MAGENTO 1.5: продукты, которые генерируют PDF для печати - PullRequest
1 голос
/ 02 сентября 2011

Так что я объясню это как могу, пожалуйста, не стесняйтесь задавать вопросы, если мне нужно что-то прояснить.

  • Мы создаем учетные данные из PDF.
  • Фоновое изображение уже напечатано на листе бумаги (A4: альбомная)
  • Из входных данных в наших продуктах (Пользовательские параметры> Имя и дата) и возрастающего идентификационного номера, который хранится в нашей базе данных; мы накладываем их на наши бумаги формата A4 в определенных координатах, чтобы самим напечатать конечный продукт.

Обычно мы продаем около 400–900 из них в день, поэтому нам нужен комбинированный лист в формате PDF, генерирует / добавляет все это в один печатный документ. Как они отделены от вчерашних заказов или сегодняшние заказы, или заказы после печати сегодняшних заказов не имеют значения. Это может быть ПОСЛЕДНИЕ учетные данные номер, или по дате / времени отсечки, или как угодно. Это незначительно, пока нет дубликатов.

Вещи, которые я хотел бы видеть, это возможность для пользователя предварительно просмотреть свои учетные данные перед отправкой (JQuery, скорее всего, будет отвечать всем требованиям, я предполагал обновить изображение предварительного просмотра из полей ввода), возможность использовать массив или список фильтров (это может быть плоский файл?), чтобы мы могли удалить запрещенные слова, и, наконец, так что мы можем исправлять ошибки, даже если пользователь их делает, способ редактировать PDF, либо через инструмент.

Я искал плагин или модуль на прошлой неделе, чтобы я мог, по крайней мере, начать указать на это. Если нет, то это то, что нужно будет создавать с нуля. Я смотрел на паутину для краткой печати Zetaprints, но есть не только сложный процесс установки, но и плата за использование около $ 1,70, что быстро съест нашу прибыль.

Что мы делаем сейчас Это старая версия, которую мы использовали с OSCommerce, и ее нужно будет заменить на эквивалент Magento.

Старая версия с возможностями редактирования: http://pastebin.com/pafG0RLZ

Новая версия без редактирования: http://pastebin.com/b4a3kim1

Вот физический код новой версии, который нуждается в некоторой интеграции. Пожалуйста, прекратите опускать меня, основываясь на «теоретических концепциях», так как это уже рабочий продукт, требующий интеграции.

    case "Ordination Credentials":

        // hack -jd
        include ('class.ezpdf.php'); 
        $pdf =& new Cezpdf('LETTER','landscape'); 
        $pdf->selectFont('./fonts/mtcorsva.afm'); 
        $pdf->ezSetMargins(30,1,30,1);

            extract($_GET); 

        $query = "
                SELECT  o.date_purchased, 
                        fd.template_fn, 
                        o.customers_name, 
                        op.orders_id, 
                        opa.orders_products_id, 
                        products_name, 
                        op.products_quantity, 
                        field_name, 
                        products_options_values

                FROM orders_products AS op
                JOIN orders AS o ON o.orders_id                     = op.orders_id
                JOIN fulfillment_doc_products AS fdp ON fdp.product_id          = op.products_id
                JOIN fulfillment_docs AS fd ON fd.doc_id                = fdp.doc_id
                JOIN orders_products_attributes AS opa ON opa.orders_products_id    = op.orders_products_id

                RIGHT JOIN fulfillment_doc_fields AS fdf ON fdf.products_options_name   = opa.products_options

                    AND fdf.doc_products_id                                             = fdp.doc_products_id

                WHERE op.orders_id
                BETWEEN $in

                    AND $out
                    AND fd.doc_id                                                       = $doc_id

                ORDER BY o.orders_id, products_name, opa.orders_products_id, field_name, products_options_values";

            $result = mysql_query(trim($query)) or die("Broke the interwebs.");
            while ($query_data = mysql_fetch_array($result)) {

                //Standard db output filtering and processing into multi-dimensional array as seen above                
                $creds[$query_data['orders_products_id']][$query_data['field_name']]    = sanitize_db_output($query_data['products_options_values']);
                $creds[$query_data['orders_products_id']]['order_number']       = $query_data['orders_id'];
                $creds[$query_data['orders_products_id']]['products_quantity']      = $query_data['products_quantity'];

            }

                $started = false;

            foreach( $creds as $opt ) {
                if($started) { $pdf->ezNewPage(); } //create new page

                    $started = true;
                    $name = ucwords(strtolower($opt['name']));

                    foreach (array('-', '\'',' Mc') as $delimiter) {
                        if (strpos($name, $delimiter) == true) {
                            $name = implode($delimiter, array_map('ucfirst', explode($delimiter, $name)));
                        }
                    }

                //all caps
                foreach (array('Ii', 'Iii') as $delimiter) {
                    if (strpos($name, $delimiter) == true) {
                        $name = implode($delimiter, array_map('strtoupper', explode($delimiter, $name)));
                  }
                }

                if(strpos($name, ',') !== false) { 
                    foreach (array(', Jr', ', Sr') as $delimiter) {
                        if (strpos($name, $delimiter) == false) {
                            $name=implode(" ", array_reverse(explode(',', $name)));
                        }
                    }
                }

                    $day = $opt["date-day"];

                if (0<>$day) {
                    if (in_array($day% 100, range(11,13))) {
                        $day .= 'th';
                    } else {
                        switch ( $day % 10 ) {
                            case 1:  $day .= 'st'; break;
                            case 2:  $day .= 'nd'; break;
                            case 3:  $day .= 'rd'; break;
                            default: $day .= 'th'; break;
                        }
                    }
                }

                    $month  = $opt["date-month"];
                    $year   = $opt["date-year"];
                    $ordid  = $opt["order_number"];

                //create date
                if (!isset($yname)) { $yname = "370"; }
                if (!isset($ydate)) { $ydate = "289"; }

                    $pdf->ezSetY($yname);   $pdf->ezText($name,28,array('left'=>-35, 'justification'=>'center'));
                    $pdf->ezSetY($ydate);   $pdf->ezText($day,17,array('left'=>-220, 'justification'=>'center'));
                    $pdf->ezSetY($ydate);   $pdf->ezText($month,17,array('left'=>40, 'justification'=>'center'));
                    $pdf->ezSetY($ydate);   $pdf->ezText($year,17,array('left'=>375, 'justification'=>'center'));
                    $pdf->ezSetY(96);       $pdf->ezText($ordid,12,array('left'=>505, 'justification'=>'center'));
            }

            $pdfcode = $pdf->output(); 
            $file = './tmp/PDF_ordinations.pdf';

            if (file_exists($fname)) { unlink($fname); }    //start with new file
            if (!file_exists($dir)) { mkdir ($dir,0777); }  //dir create if not there

                $fname = $file;
                $fp = fopen($fname,'w'); 

            fwrite($fp,$pdfcode); 
            fclose($fp); 

        header('Location:'.$fname);

    break;
...