Автор Тема: добавить переменную для использования ее в шаблоне  (Прочитано 2777 раз)

23 Май 2014, 07:05:00
  • Новичок
  • *
  • Сообщений: 12
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Здрасте всем. Не смог сам добавить переменную. Прошу помощи. Шаблон - order-payment.tpl модуля "onepagecheckout". Надо, чтобы при обращении контроллеру "order-opc" (в OrderOpcController.php) в зависимости от присутствия некоторых параметров в URL присваивалось определенное значение переменной $afterfail, позже используемой в шаблоне.

URL будет примерно таким: "/index.php?controller=order-opc&afterfail=yes". В OrderOpcController.php сразу после кода, создающего переменную $link_conditions, (тоже используется в этом шаблоне) написал:
$afterfail = true;
$this->context->smarty->assign('afterfail', $afterfail);

А в шаблоне -
{if ($afterfail == true)}ZDES' BUDET DOPOLNITEL'NYI ABZAC {/if}
И ничего не получилось, к сожалению. Нет тестового текста на странице сайта. Кстати сказать, пробовал брать параметр из URL прямо в коде шаблона:
{if (Tools::getValue('afterfail') == 'yes')}ZDES' BUDET DOPOLNITEL'NYI ABZAC {/if} - и тестовая строка отобразилась. Но хотелось бы все-таки вынимать значение из параметра и помещать в переменную не в шаблоне, а во время выполнения функции класса. Подскажите, пожалуйста, почему шаблон не видит функцию, присвоенную смарти в OrderOpcController.php
23 Май 2014, 09:56:19
Ответ #1
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 86688
  • Репутация: +25428/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Для передачи параметров в контроллер модуля в классе Link.php есть функция
/**
* Create a link to a module
*
* @since 1.5.0
* @param string $module Module name
* @param string $process Action name
* @param int $id_lang
* @return string
*/
public function getModuleLink($module, $controller = 'default', array $params = array(), $ssl = false, $id_lang = null)
{
23 Май 2014, 10:21:55
Ответ #2
  • Новичок
  • *
  • Сообщений: 12
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
у меня нет проблем с передачей параметров в контроллер. У меня проблема с объявлением переменной, к которой можно было бы обратиться в шаблоне. Как я ни присваивал ей значение, в какую функцию контроллера ни вставлял ее "assign", все равно в шаблоне она не видна (

Забыл уточнить: prestashop 1.5.6.2
23 Май 2014, 11:25:14
Ответ #3
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 33325
  • Репутация: +26771/-0
    • Просмотр профиля
Для инициализации переменной в tpl достаточно использовать "assign".
Может все-таки проблема с передачей в конроллер? Или не правильного алгоритма?
Что конретно нужно?
23 Май 2014, 22:36:08
Ответ #4
  • Новичок
  • *
  • Сообщений: 12
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Спасибо за внимание к моей проблеме. Конкретно нужно использовать в шаблоне переменную (булево true или false). Пишу в шаблоне {(int)$afterfail} - на странице выводится ноль. Пишу в OrderOpcController.php :  $afterfail = true;
$this->context->smarty->assign('afterfail', $afterfail);
  Бесполезно, все равно выводится ноль. Что мне написать в OrderOpcController.php, чтобы переменная стала равна true ?
24 Май 2014, 13:13:25
Ответ #5
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 33325
  • Репутация: +26771/-0
    • Просмотр профиля
В контроллере в методе
public function initContent()
{
        ............
        $this->context->smarty->assign('afterfail', true);
        .............
В шаблоне tpl
{$afterfail}Будет выводить "1".
25 Май 2014, 19:39:09
Ответ #6
  • Новичок
  • *
  • Сообщений: 12
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Ну так я это практически и писал...
Впрочем, Вам огромное спасибо, мог и пропустить что-то. Сейчас не могу проверить, на днях вернусь к вопросу вооруженный Вашей подсказкой, и, даст Бог, заработает.