PHP-файл для генерации code128 не работает в codeigniter - PullRequest
0 голосов
/ 14 мая 2019

Я пытался запустить из библиотек и неправильно печатал столбцы, но вся проблема была в скрипте, который по какой-то причине конфликтует с CI ... Я думаю, что в будущем мне придется адаптировать код для CI.


<?php

function bar128($text) { // Part 1, make list of widths
 $char128asc=' !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~'; 
$char128wid = array(
 '212222','222122','222221','121223','121322','131222','122213','122312','132212','221213', // 0-9 
 '221312','231212','112232','122132','122231','113222','123122','123221','223211','221132', // 10-19 
 '221231','213212','223112','312131','311222','321122','321221','312212','322112','322211', // 20-29 
 '212123','212321','232121','111323','131123','131321','112313','132113','132311','211313', // 30-39 
 '231113','231311','112133','112331','132131','113123','113321','133121','313121','211331', // 40-49 
 '231131','213113','213311','213131','311123','311321','331121','312113','312311','332111', // 50-59 
 '314111','221411','431111','111224','111422','121124','121421','141122','141221','112214', // 60-69 
 '112412','122114','122411','142112','142211','241211','221114','413111','241112','134111', // 70-79 
 '111242','121142','121241','114212','124112','124211','411212','421112','421211','212141', // 80-89 
 '214121','412121','111143','111341','131141','114113','114311','411113','411311','113141', // 90-99
 '114131','311141','411131','211412','211214','211232','23311120' ); // 100-106
 $w = $char128wid[$sum = 104]; // START symbol
 $onChar=1;
 for($x=0;$x<strlen($text);$x++) // GO THRU TEXT GET LETTERS
 if (!( ($pos = strpos($char128asc,$text[$x])) === false )){ // SKIP NOT FOUND CHARS
 $w.= $char128wid[$pos];
 $sum += $onChar++ * $pos;
 } 
 $w.= $char128wid[ $sum % 103 ].$char128wid[106]; //Check Code, then END
 //Part 2, Write rows
 $html="<table cellpadding=0 cellspacing=0><tr>"; 
 for($x=0;$x<strlen($w);$x+=2) // code 128 widths: black border, then white space
 $html .= "<td><div class=\"b128\" style=\"border-left-width:{$w[$x]};width:{$w[$x+1]}\"></div></td>"; 
 return "$html<tr><td colspan=".strlen($w)." align=center><font family=arial size=1.5>$text</td></tr></table>"; 
}

//include 'barcode128.php';
$product    = $_POST['product'];
$product_id = $_POST['product_id'];
$rate       = $_POST['rate'];

for ($i = 1; $i <= $_POST['print_qty']; $i++) {
    echo "<p class='inline'><span ><b>$product</b></span>" . bar128(stripcslashes($_POST['product_id'])) . "<span ><b>Precio: " . $rate . " </b><span></p>&nbsp&nbsp&nbsp&nbsp";
}

?>

Во-первых, я довольно нуб на Codeigniter.

Я нашел этот php-код для генерации code128, который мне нужен, чтобы распечатать несколько этикеток из БД и затем отправить их на принтер Zebra.

На чистом php он отлично работает, но при интеграции с codeigniter с использованием библиотек полосы не печатаются. Все печатает кроме баров.

По коду в комментариях вы можете увидеть все мои попытки.

Сначала я попытался в том же виде «включить» «require_once», но потом обнаружил, что это не работает с КИ или чем-то подобным, поэтому я создал новую библиотеку:


//////The lib//////

<?php

global $char128asc,$char128charWidth;
$char128asc=' !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~'; 
$char128wid = array(
 '212222','222122','222221','121223','121322','131222','122213','122312','132212','221213', // 0-9 
 '221312','231212','112232','122132','122231','113222','123122','123221','223211','221132', // 10-19 
 '221231','213212','223112','312131','311222','321122','321221','312212','322112','322211', // 20-29 
 '212123','212321','232121','111323','131123','131321','112313','132113','132311','211313', // 30-39 
 '231113','231311','112133','112331','132131','113123','113321','133121','313121','211331', // 40-49 
 '231131','213113','213311','213131','311123','311321','331121','312113','312311','332111', // 50-59 
 '314111','221411','431111','111224','111422','121124','121421','141122','141221','112214', // 60-69 
 '112412','122114','122411','142112','142211','241211','221114','413111','241112','134111', // 70-79 
 '111242','121142','121241','114212','124112','124211','411212','421112','421211','212141', // 80-89 
 '214121','412121','111143','111341','131141','114113','114311','411113','411311','113141', // 90-99
 '114131','311141','411131','211412','211214','211232','23311120' ); // 100-106




class Bar128 
{

    function __construct()
    {



function Barra128($cod) { // Part 1, make list of widths
 global $char128asc,$char128wid; 
 $w = $char128wid[$sum = 104]; // START symbol
 $onChar=1;
 for($x=0;$x<strlen($cod);$x++) // GO THRU TEXT GET LETTERS
 if (!( ($pos = strpos($char128asc,$cod[$x])) === false )){ // SKIP NOT FOUND CHARS
 $w.= $char128wid[$pos];
 $sum += $onChar++ * $pos;
 } 
 $w.= $char128wid[ $sum % 103 ].$char128wid[106]; //Check Code, then END
 //Part 2, Write rows
 $html="<table cellpadding=0 cellspacing=0><tr>"; 
 for($x=0;$x<strlen($w);$x+=2) // code 128 widths: black border, then white space
 $html .= "<td><div class=\"b128\" style=\"border-left-width:{$w[$x]};width:{$w[$x+1]}\"></div></td>"; 
 return "$html<tr><td colspan=".strlen($w)." align=center><font family=arial size=1.5>$cod</td></tr></table>"; 
}
}

?>

//////////// CONTROLLER ///////////

    public function Barcodegenerator()
    {

        //load library
        $this->load->library('Myzend');
        //$this->zend->load('Zend/barcode128');
        //require ('barcode128.php');
        //$this->load->helper('barcode128');
        //require_once APPPATH. 'barcode128.php';
        //require 'barcode128.php';
        //include APPPATH. 'barcode128.php';
        //include('assets/barcode128.php');
        $this->load->view('barcode',$data);

    }
////////////////// My Lib //////////


<?php if( ! defined('BASEPATH')) exit('No direct script access allowed');

require('Zend/barcode128.php');

class MyZend extends Bar128 {

    public function __construct()
    {
        parent::__construct();
        $CI =& get_instance();
}

}
/////////////// THE VIEW //////////


<?php

//define('__ROOT__', dirname(dirname(__FILE__))); 
//require_once(__ROOT__.'/barcode128.php');
//require_once('../barcode/barcode128.php');
//require_once dirname( __FILE__ ) . '/barcode128.php';
//require_once($_SERVER['DOCUMENT_ROOT'].'/barcode/barcode128.php');
//echo include(base_url().'../barcode/barcode128.php');
//require_once 'barcode128.php';
//require 'barcode128.php';
//include 'barcode128.php';
$product    = $_POST['product'];
$product_id = $_POST['product_id'];
$rate       = $_POST['rate'];

for ($i = 1; $i <= $_POST['print_qty']; $i++) {
    echo "<p class='inline'><span ><b>$product</b></span>" . Barra128(stripcslashes($_POST['product_id'])) . "<span ><b>Precio: " . $rate . " </b><span></p>&nbsp&nbsp&nbsp&nbsp";
}

?>

Ответы [ 2 ]

0 голосов
/ 15 мая 2019

Вам действительно не нужна библиотека Myzend или какой-либо файл.Вам просто нужно изменить файл класса bar128, чтобы следовать соглашениям об именах для пользовательских библиотек CI.Быстрый способ начать это переименовать файл, используя определенный префикс из ваших файлов конфигурации.Затем в его конструкторе инициализируйте экземпляр CI, который должен использоваться любым другим методом в библиотеке.Родитель :: __ конструкция ();$ CI = & get_instance ();

Затем вы можете заменить каждый $ this на $ CI в этих классах.

0 голосов
/ 15 мая 2019

Общие предложения (может быть проблема в codeigniter):

Этот путь относительно файла lib в каталоге вашей библиотеки (или третьего_партии).

require('Zend/barcode128.php');

Если вы хотите, чтобы это потребовалось откуда-то еще, лучше всего использовать предопределенные относительные пути (BASEPATH, APPPATH, FCPATH и т. Д.). Например

require(APPPATH . 'libraries/zend/barcode128.php');

будет искать /application/libraries/zend/barcode128.php

Также попробуйте использовать только имя в верхнем регистре для имени библиотеки, например, измените это

class MyZend extends Bar128 {

до

class Myzend extends Bar128 {

Иногда (tm) Codeigniter не очень хорошо работает с формированием имен для библиотек, помощников и т. Д.

Безопасный способ создания основных файлов библиотеки - присвоить им имена в верхнем и нижнем регистре, как в вашем случае имя файла должно быть «Myzend.php».

Что касается включения логов в codeigniter: в config.php:

$config['log_threshold'] = 4;

Устанавливает журналы, включающие INFO, может помочь найти ошибку

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...