Автор Тема: Как правильно использовать собственную логику на PHP в Prestashop шаблонах  (Прочитано 351 раз)

14 Октябрь 2015, 17:49:56
  • Новичок
  • *
  • Сообщений: 17
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Здравствуйте,

Мы хотим к примеру в шаблоне "Корзина товара", получить ID товаров и сделать выборку из БД привязанных аксессуаров.
Скажите пожалуйста как или где конкретно узнать правильное внедрение собственной логики в шаблоны.
14 Октябрь 2015, 17:56:14
Ответ #1
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 33071
  • Репутация: +26762/-0
    • Просмотр профиля
Получить ид товаров так
{foreach from=$products item='product'}
        $product.id_product

Если правльно, то делать выборку в контроллере нужно CartController в шаблон передавать массив товаров.
14 Октябрь 2015, 18:03:28
Ответ #2
  • Ветеран
  • *****
  • Сообщений: 86543
  • Репутация: +25419/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Получить акссесуары
$product = new Product((int)$this->id_product);
$accessories = $product->getAccessories($this->context->language->id);
$this->context->smarty->assign('accessories', $accessories);
в шаблоне корзины можете использовать переменную
{$accessories}
14 Октябрь 2015, 23:42:34
Ответ #3
  • Новичок
  • *
  • Сообщений: 17
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Скажите пожалуйста, вы подразумеваете что код
$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

Будте добры подскажите почему так?
15 Октябрь 2015, 10:34:45
Ответ #4
  • Новичок
  • *
  • Сообщений: 17
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Мы разобрались с поднятой темой, смотрите:

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

Структура кода:
В контролере -
public function __construct()
{
$result = $this->test();
$this->context->smarty->assign('text', $result);
}

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

В шаблоне:
{$text}

Скажите пожалуй правильно ли мы думаем?
15 Октябрь 2015, 11:00:06
Ответ #5
  • Ветеран
  • *****
  • Сообщений: 86543
  • Репутация: +25419/-0
  • Сообщество PrestaShop
    • Просмотр профиля
1, 2 и 3 правильно.

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