Jump to content
hiszpan

Błąd podczas utworzenia obiektu klasy modułu

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');
        }
    }

}
?>

Share this post


Link to post
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?

Share this post


Link to post
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.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More