hiszpan Posted October 28, 2013 Share Posted October 28, 2013 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 More sharing options...
presta4you.com Posted October 28, 2013 Share Posted October 28, 2013 W pliku ajax.php masz kod: include(dirname(__FILE__) . '/$attrubutesarray.php'); Skąd wziął się tam ten znak dolara przed nazwą pliku? Link to comment Share on other sites More sharing options...
hiszpan Posted October 28, 2013 Author Share Posted October 28, 2013 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 More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now