Jump to content

Вывести данные из базы на карточку товара


Recommended Posts

Данные одни для всех товаров, одна и та же информация. Хочу вывести через $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

Да мне асоциация с товарами не нужна, просто одна и та жа информация должна быть на всех карточках товаров и на разных языках.

Edited by Kerm (see edit history)
Link to comment
Share on other sites

Удалось пока принтом вывести следующее на карточке товара:

 

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

В общем решил так:

 

В 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 by Kerm (see edit history)
Link to comment
Share on other sites

Правильно сделать так:

Заоверрайдить класс 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}

  • Like 1
Link to comment
Share on other sites

  • 1 year later...

Да можно и без оверайда, просто в нужном месте делаешь mysql запрос к базе, проверяешь принтом обрабатывается ли он, после через assign выводишь в шаблон...

Link to comment
Share on other sites

Ну это да.

 

Вообще можно подискутировать на эту тему, я вот считаю что prestashop не iOS и не Android чтобы постоянно обновлять ПО на новые версии. Это не игрушки, магазины приносят деньги и большинству клиентов нужен магазин на актуальной версии престашопа и такой как они хотят, после того как они получают что захотели, им уже не нужны обновления эти, если конечно в новых версиях не появилось чего ни будь значительного и они хотят перейти с версии 1.4, скажем на 1.5 или на 1.6, а при этом смысл оверайдов опять таки теряется..

 

Большинство клиентов к тому же сами все равно не смогут и не будут обновлять престошоп. Они обратятся к специалисту, тот спросит причину обновления, если там фикс багов и уязвимостей, то тут не обязательно обновлять весь магазин, можно и частично заменить нужные файлы.

Link to comment
Share on other sites

×
×
  • Create New...