Как правильно использовать собственную логику на PHP в Prestashop шаблонах

Автор 1482909, 14 октября 2015, 17:49:56

« назад - далее »

1482909

Здравствуйте,

Мы хотим к примеру в шаблоне "Корзина товара", получить ID товаров и сделать выборку из БД привязанных аксессуаров.
Скажите пожалуйста как или где конкретно узнать правильное внедрение собственной логики в шаблоны.

coder

Получить ид товаров так
{foreach from=$products item='product'}
        $product.id_product


Если правльно, то делать выборку в контроллере нужно CartController в шаблон передавать массив товаров.

DarinSr

Получить акссесуары
$product = new Product((int)$this->id_product);
$accessories = $product->getAccessories($this->context->language->id);
$this->context->smarty->assign('accessories', $accessories);

в шаблоне корзины можете использовать переменную
{$accessories}

1482909

Скажите пожалуйста, вы подразумеваете что код

$product = new Product((int)$this->id_product);
$accessories = $product->getAccessories($this->context->language->id);
$this->context->smarty->assign('accessories', $accessories);
:
должен находиться в контролере CartController, правильно я вас понимаю? Но где именно, в какой функций?

Дело в том что я попробывал сделать элементарную передачу переменной из php в tpl шаблон вот:
php фаил

    $address = 123;
    $smarty->assign('Address', $address);


tpl шаблон

{include file='/address.tpl'}
{$Address}


но в результате - assign('Address', $address); Notice: Undefined index: Address in

Будте добры подскажите почему так?

1482909

Мы разобрались с поднятой темой, смотрите:

Определяем шаблон с которым будем работать;
Находим контроллер который работает с данным шаблоном;
Объявляем функцию в данном контроллере которая буде возвращать результат какой то логики;
В конструкторе данного контролера присваиваем результат функций переменной и транслируем данную переменную в шаблон.

Структура кода:
В контролере -

public function __construct()
{
$result = $this->test();
$this->context->smarty->assign('text', $result);
}

public function test(){
return 'Hello';
}


В шаблоне:

{$text}


Скажите пожалуй правильно ли мы думаем?

DarinSr

1, 2 и 3 правильно.

В контроллере при инициализации контроллера добавляете получение значения переменной шаблона
public function init()
{
        parent::init();
        .....
        $this->my_var = Tools::getValue('myvar');
        ....
        $this->context->smarty->assign('myvar', $this->my_var);  /* или в методе initContent() */
        ...

В методе postProcess добавляете свою функцию.