Kerm Posted June 14, 2013 Share Posted June 14, 2013 Данные одни для всех товаров, одна и та же информация. Хочу вывести через $product Таблицы в базе две: ps_infotext, где всего один столбец id_infotext и одно значение = 1 ps_infotext_lang, где 5 столбцов: id_infotext;id_lang;text;text2;text3 В шаблоне должно выводится через $product.text, $product.text2, $product.text3 ----- Я так понял править надо файлы Product.php и Category.php, в Category.php добавить новые значения для подключения к таблице в getProducts(), но чего то у меня не чего не получается( Сначала добавил в Category.php в getProducts(): .....,itl.`text`, itl.`text2`, itl.`text3`, После: LEFT JOIN `'._DB_PREFIX_.'infotext` it ON (it.`id_infotext` = 1) LEFT JOIN `'._DB_PREFIX_.'infotext_lang` itl ON (it.`id_infotext` = itl.`id_infotext` AND itl.`id_lang` = '.(int)$id_lang.') В Product.php прописал переменные $text, $text2, $text3, при выводе массива на карточке товара, эти значения идут пустые.. Link to comment Share on other sites More sharing options...
absent Posted June 14, 2013 Share Posted June 14, 2013 (edited) лучше сделать класс так удобнее. Edited June 14, 2013 by absent (see edit history) Link to comment Share on other sites More sharing options...
absent Posted June 14, 2013 Share Posted June 14, 2013 вы неправильно сделали. асоциации с товарами нет. посмотрите на простейший класс cms.php Link to comment Share on other sites More sharing options...
Kerm Posted June 14, 2013 Author Share Posted June 14, 2013 (edited) Да мне асоциация с товарами не нужна, просто одна и та жа информация должна быть на всех карточках товаров и на разных языках. Edited June 14, 2013 by Kerm (see edit history) Link to comment Share on other sites More sharing options...
Kerm Posted June 14, 2013 Author Share Posted June 14, 2013 Удалось пока принтом вывести следующее на карточке товара: Array ( [0] => Array ( [id_infotext] => 1 [text] => <p>Текст</p> [text2] => <p>Текст2</p> [text3] => <p>Текст3</p> ) ) 1 Сейчас не пойму как это через переменные вевести Link to comment Share on other sites More sharing options...
Kerm Posted June 14, 2013 Author Share Posted June 14, 2013 (edited) В общем решил так: В ProductsController.php добавил: $infotext = $this->product->getFrontInfotext((int)self::$cookie->id_lang); $infotext = $infotext[0]; В Product.php добавил: public static function getFrontInfotextStatic($id_lang, $id_infotext) { return Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS(' SELECT it.`id_infotext`, itl.`text`, itl.`text2`, itl.`text3` FROM '._DB_PREFIX_.'infotext it LEFT JOIN `'._DB_PREFIX_.'infotext_lang` itl ON (it.`id_infotext` = itl.`id_infotext` AND it.`id_infotext` = 1 AND itl.`id_lang` = '.(int)$id_lang.') WHERE it.id_infotext = 1'); } public function getFrontFeatures($id_lang) { return self::getFrontFeaturesStatic($id_lang, $this->id); } В шаблоне вывожу так: {$infotext['text']} {$infotext['text2']} {$infotext['text3']} Вот не знаю на сколько это удачная реализация, но все работает.. Edited June 14, 2013 by Kerm (see edit history) Link to comment Share on other sites More sharing options...
Dzianis Yurevich Posted June 14, 2013 Share Posted June 14, 2013 Правильно сделать так: Заоверрайдить класс Product.php, создав файл override/classes/Product.php с кодом: <?php class Product extends ProductCore { public $infotext; public function __construct($id_product = null, $full = false, $id_lang = null, $id_shop = null, Context $context = null) { parent::__construct__construct($id_product, $full, $id_lang, $id_shop, $context); $this->infotext = Db::getInstance()->getRow('Some Query...'); } } Создали произвольное свойство и проинициализировали его в конструкторе. Теперь в шаблоне product.tpl можем спокойно обращаться к этому свойству вот так: [spam-filter]$product->infotext.id_infotext} 1 Link to comment Share on other sites More sharing options...
Kerm Posted June 14, 2013 Author Share Posted June 14, 2013 Спасибо! Только у меня 1.4 преста, но думаю разберусь Link to comment Share on other sites More sharing options...
koshkalama Posted June 18, 2014 Share Posted June 18, 2014 У меня примерно та же задача, 1,5 преста. Но ничего не получается (( Действительно ли достаточно только оверрайда Product.php ? Link to comment Share on other sites More sharing options...
Kerm Posted June 18, 2014 Author Share Posted June 18, 2014 Да можно и без оверайда, просто в нужном месте делаешь mysql запрос к базе, проверяешь принтом обрабатывается ли он, после через assign выводишь в шаблон... Link to comment Share on other sites More sharing options...
Dzianis Yurevich Posted June 20, 2014 Share Posted June 20, 2014 Если делать без оверрайда, то после обновления престы все правки пропадут. Как работать с оверрайдами написано в файле override/readme_override.txt Link to comment Share on other sites More sharing options...
Kerm Posted June 20, 2014 Author Share Posted June 20, 2014 Ну это да. Вообще можно подискутировать на эту тему, я вот считаю что prestashop не iOS и не Android чтобы постоянно обновлять ПО на новые версии. Это не игрушки, магазины приносят деньги и большинству клиентов нужен магазин на актуальной версии престашопа и такой как они хотят, после того как они получают что захотели, им уже не нужны обновления эти, если конечно в новых версиях не появилось чего ни будь значительного и они хотят перейти с версии 1.4, скажем на 1.5 или на 1.6, а при этом смысл оверайдов опять таки теряется.. Большинство клиентов к тому же сами все равно не смогут и не будут обновлять престошоп. Они обратятся к специалисту, тот спросит причину обновления, если там фикс багов и уязвимостей, то тут не обязательно обновлять весь магазин, можно и частично заменить нужные файлы. Link to comment Share on other sites More sharing options...
Dzianis Yurevich Posted June 20, 2014 Share Posted June 20, 2014 Я полностью согласен, но на практике клиенты часто хотят обновлений. В любом случае программист должен работать качественно. Link to comment Share on other sites More sharing options...
Recommended Posts