Jump to content

Błąd podczas utworzenia obiektu klasy modułu


hiszpan

Recommended Posts

Postanowiłem napisać moduł do dodawania niestandardowych tabel pod produktami, ale już z początku natrafiłem na problem, główny plik modułu->attributesarray.php zawiera wszystkie metody edycji bazy danych, dodawania nowych wierszy itd. zaś plik ajax.php zawierać ma cały kod odpowiedzialny za dodawanie nowych wartości poprzez posta. Utworzyłem w pliku ajax.php obiekt klasy attributesArray i chcę wywołać metodę test(), która powinna zwrócić wartość 'test' co się  nie dzieje, w chwili przejścia pod adres pliku ajax.php zawartość strony pozostaje pusta.

Proszę o pomoc dlaczego echo $attrubutesarray->test(); nic nie zwraca?

 

Poniżej zawartość pliku ajax.php

<?php

include(dirname(__FILE__) . '/../../config/config.inc.php');
include(dirname(__FILE__) . '/../../init.php');
include(dirname(__FILE__) . '/$attrubutesarray.php');

$attrubutesarray = new attributesArray();
echo $attrubutesarray->test();

Poniżej zamieszczam kod klasy głównej modułu:

<?php

if (!defined('_PS_VERSION_'))
    exit;


class attributesArray extends Module {
    /* @var boolean error */

    protected $_errors = false;

    public function __construct() {
        $this->name = 'attributesarray';
        $this->tab = 'front_office_features';
        $this->version = '1.0';
        $this->author = 'Dominik Wilk';
        $this->need_instance = 0;
        parent::__construct();
        $this->displayName = $this->l('Zakładka z atrybutami produktów');
        $this->description = $this->l('To jest moduł umozliwiający wprowadzanie dodatkowych atrybutów do produtków.');
    }

    public function install() {
        if (!parent::install() OR
                !$this->alterTable('add') OR
                !$this->registerHook('actionAdminControllerSetMedia') OR
                !$this->registerHook('actionProductUpdate') OR
                !$this->registerHook('displayAdminProductsExtra'))
            return false;
        return true;
    }

    public function uninstall() {
        if (!parent::uninstall() OR !$this->alterTable('remove'))
            return false;
        return true;
    }
    
    public function test() {
        return 'test';
    }

    public function alterTable($method) {
        switch ($method) {
            case 'add':
                $sql = "CREATE TABLE IF NOT EXISTS `" . _DB_PREFIX_ . "attributesarray_rows`(
                `id_row` INT(10) NOT NULL AUTO_INCREMENT PRIMARY KEY,
                `row_title` VARCHAR(20) NOT NULL,
                `id_product` INT(10) NOT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8;
                
                CREATE TABLE IF NOT EXISTS `" . _DB_PREFIX_ . "attributesarray_cols`(
                `id_col` INT(10) NOT NULL AUTO_INCREMENT PRIMARY KEY,
                `col_title` VARCHAR(20) NOT NULL,
                `id_product` INT(10) NOT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8;

                CREATE TABLE IF NOT EXISTS `" . _DB_PREFIX_ . "attributesarray_cells`(
                `id_cell` INT(10) NOT NULL AUTO_INCREMENT PRIMARY KEY,
                `id_col` INT(20) NOT NULL,
                `id_row` INT(20) NOT NULL,
                `id_product` INT(10) NOT NULL,
                `id_status` INT(10) NOT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8;

                CREATE TABLE IF NOT EXISTS `" . _DB_PREFIX_ . "attributesarray_status`(
                `id_status` INT(10) NOT NULL AUTO_INCREMENT PRIMARY KEY,
                `class` VARCHAR(30) NOT NULL,
                `name` VARCHAR(50) NOT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8;";
                break;

            case 'remove':
                $sql = "DROP TABLE IF EXISTS `" . _DB_PREFIX_ . "attributesarray_rows`;
                    DROP TABLE IF EXISTS `" . _DB_PREFIX_ . "attributesarray_cols`;
                    DROP TABLE IF EXISTS `" . _DB_PREFIX_ . "attributesarray_cells`;
                    DROP TABLE IF EXISTS `" . _DB_PREFIX_ . "attributesarray_status`;";
                break;
        }

        if (!Db::getInstance()->Execute($sql))
            return false;
        return true;
    }

    public function prepareNewTab() {

        $this->context->smarty->assign(array(
            'custom_field' => $this->getCustomField((int) Tools::getValue('id_product')),
            'languages' => $this->context->controller->_languages,
            'default_language' => (int) Configuration::get('PS_LANG_DEFAULT')
        ));
    }

    public function hookActionAdminControllerSetMedia($params) {

        // add necessary javascript to products back office
        if ($this->context->controller->controller_name == 'AdminProducts' && Tools::getValue('id_product')) {
            $this->context->controller->addJS($this->_path . '/js/attributesarray.js');
        }
    }

    public function hookActionProductUpdate($params) {
        $id_product = (int) Tools::getValue('id_product');

        $this->addTableTitle('addColumn', 'Tytuł', 1);

        //var_dump(Tools::getValue('attributesarray_row'));
        //jeżeli został wysłany formularz dodania nowego wiersza bądź komumny pobieramy z $_POST wysłaną wartość,
        //w przeciwnym razie ustawiamy wartość zmiennej na false
        /* $attributesarray_row = (strlen(Tools::getValue('attributesarray_row')) > 0) ? Tools::getValue('attributesarray_row') : false;
          $attributesarray_col = (strlen(Tools::getValue('attributesarray_col')) > 0) ? Tools::getValue('attributesarray_col') : false;

          if (!Db::getInstance()->update('product_lang', array('custom_field' => pSQL(Tools::getValue('custom_field_' . $lang['id_lang']))), 'id_lang = ' . $lang['id_lang'] . ' AND id_product = ' . $id_product))
          $this->context->controller->_errors[] = Tools::displayError('Error: ') . mysql_error(); */
    }

    public function addTableTitle($method, $title, $id_product) {

        switch ($method) {
            case 'addColumn':
                if (!Db::getInstance()->insert('attributesarray_cols', array('col_title' => pSQL(Tools::getValue('attributesarray_col')), 'id_product' => (int) $id_product))) {
                    $this->context->controller->_errors[] = Tools::displayError('Error: ') . mysql_error();
                }
                break;

            case 'addRow':
                $sql = "CREATE TABLE IF NOT EXISTS `" . _DB_PREFIX_ . "attributesarray_rows`(
                `id_row` INT(10) NOT NULL AUTO_INCREMENT PRIMARY KEY,
                `row_title` VARCHAR(20) NOT NULL,
                `id_product` INT(10) NOT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8;";
                break;
        }

        if (!Db::getInstance()->Execute($sql))
            return false;
        return true;
    }

    public function getCustomField($id_product) {
        $result = Db::getInstance()->ExecuteS('SELECT custom_field, id_lang FROM ' . _DB_PREFIX_ . 'product_lang WHERE id_product = ' . (int) $id_product . ' LIMIT 1');
        if (!$result)
            return false;

        foreach ($result as $field) {
            $fields = $field['custom_field'];
        }

        return $fields;
    }

    public function hookDisplayAdminProductsExtra($params) {
        if (Validate::isLoadedObject($product = new Product((int) Tools::getValue('id_product')))) {
            $this->prepareNewTab();
            return $this->display(__FILE__, 'attributesarray.tpl');
        }
    }

}
?>
Link to comment
Share on other sites

W pliku ajax.php masz kod:

include(dirname(__FILE__) . '/$attrubutesarray.php');

Skąd wziął się tam ten znak dolara przed nazwą pliku?

Przepraszam, tego znaku ma tam nie być, błąd powstał podczas tworzenia posta i nie jest on przyczyną błędu.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...