Автор Тема: Передача переменных по шаблонам  (Прочитано 2413 раз)

05 Октябрь 2016, 17:15:59
Ответ #30
  • Ветеран
  • *****
  • Сообщений: 22125
  • Репутация: +25303/-1
  • Prestashop - просто и эффективно
    • Просмотр профиля
В методе initContent инициализируете переменную шблона и можете ее использовать в шаблоне.
public function initContent()
{
        parent::initContent();
        $this->context->smarty->assign('myvar', $myvar);
Эксперт Prestashop - решения всех проблем, написание модулей, создание тем для интернет-магазинов под Prestashop.
Эксперт Magento - создам сайт на Magento, программирование кастомных модулей для Magento, кастомизация тем Magento.
Лучшие цены!!!
05 Октябрь 2016, 18:44:28
Ответ #31
  • Старожил
  • ****
  • Сообщений: 366
  • Репутация: +0/-0
  • Skype: away4people
    • Просмотр профиля
public function initContent()
{
$this->setTemplate(_PS_THEME_DIR_.'errors.tpl');
if (!$this->ajax)
parent::initContent();
                $this->context->smarty->assign('ANQ', $anq);
}

<p class="payment_module">
    <a {*class="bankwire" *} href="{$link->getModuleLink('payparts2', 'redirect', ['id_cart' => {$cart->id}])}" title="{l s='Pay PayParts' mod='payparts2'}">
        <img src="{$this_path}logo.png" width="100px" />{l s='Pay PayParts' mod='payparts2'} <span> lal  {$anq} (онлайн рассрочка от Приватбанка)</span>
    </a>
</p>

получил
05 Октябрь 2016, 19:01:45
Ответ #32
  • Ветеран
  • *****
  • Сообщений: 22125
  • Репутация: +25303/-1
  • Prestashop - просто и эффективно
    • Просмотр профиля
Шаблон тот-же что и в контроллере? В initContent дано название шаблона, вы этом шаблоне используте переменную?
Эксперт Prestashop - решения всех проблем, написание модулей, создание тем для интернет-магазинов под Prestashop.
Эксперт Magento - создам сайт на Magento, программирование кастомных модулей для Magento, кастомизация тем Magento.
Лучшие цены!!!
05 Октябрь 2016, 20:07:50
Ответ #33
  • Старожил
  • ****
  • Сообщений: 366
  • Репутация: +0/-0
  • Skype: away4people
    • Просмотр профиля
спасибо большое, уловил свою ошибку.
вопрос, сейчас просмотр шаблонов идёт за папки темы, но шаблон, в котором будет находиться нужная мне переменная, находится в ./modules/payparts2/ , т.е. из корня смотреть нужно. какая это константа? )
05 Октябрь 2016, 20:52:06
Ответ #34
  • Старожил
  • ****
  • Сообщений: 366
  • Репутация: +0/-0
  • Skype: away4people
    • Просмотр профиля
CartController:
public function initContent()
{
$this->setTemplate(_PS_ROOT_DIR_.'modules/payparts2/views/templates/hook/payment.tpl'); //   _PS_THEME_DIR_
if (!$this->ajax)
parent::initContent();
                $this->context->smarty->assign('ANQ', $anq);
}
Payment.tpl:
<p class="payment_module">
    <a {*class="bankwire" *} href="{$link->getModuleLink('payparts2', 'redirect', ['id_cart' => {$cart->id}])}" title="{l s='Pay PayParts' mod='payparts2'}">
        <img src="{$this_path}logo.png" width="100px" />{l s='Pay PayParts' mod='payparts2'} <span> lal  {$anq} (онлайн рассрочка от Приватбанка)</span>
    </a>
</p>

при добавлении товара в корзину ловлю:
06 Октябрь 2016, 11:52:06
Ответ #35
  • Старожил
  • ****
  • Сообщений: 366
  • Репутация: +0/-0
  • Skype: away4people
    • Просмотр профиля
странно, у меня этот метод походу даже и не отрабатывает:
public function initContent()
{
            die(_PS_ROOT_DIR_);
$this->setTemplate(_PS_ROOT_DIR_.'\modules\payparts2\views\templates\hook\payment.tpl'); //   _PS_THEME_DIR_
if (!$this->ajax)
parent::initContent();
                $this->context->smarty->assign('ANQ', 'rqwuibrqwuibuiabfuiasbfas');
}

die просто не работает, а нотисы есть
06 Октябрь 2016, 13:00:10
Ответ #36
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 86688
  • Репутация: +25428/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Для модулей и корзины разные контроллеры. Полностью неправильно. Нельзя так делать.

Цитировать
мне не нужен модуль, - мне нужно, чтобы шаблон мог выполняться непосредственно в другом шаблоне,
Нужно только подключить  шаблон в шаблоне, тогда так
{include file="./file.tpl" myvar='значение'}
Нужно передать свою переменную между шаблонами, так
$myvar = Tools::getValue('myvar');
Нужно получить переменную prestashop, тогда так
$this->context->'название объекта'->'свойство объекта';
06 Октябрь 2016, 19:13:15
Ответ #37
  • Старожил
  • ****
  • Сообщений: 366
  • Репутация: +0/-0
  • Skype: away4people
    • Просмотр профиля
решил воспользоваться {include file="./file.tpl" myvar='значение'}но myvar мне нужно присвоить айдишник корзины, т.е. $this->context->cart->cart_id (как-то так, не суть), но это уже пхп-скрипт.
попытался отработать пхп-код {php}die('eqweqw');{/php} и получил :
07 Октябрь 2016, 13:37:13
Ответ #38
  • Старожил
  • ****
  • Сообщений: 366
  • Репутация: +0/-0
  • Skype: away4people
    • Просмотр профиля
есть какие-то идеи?.. может, задание перефразировать или ещё что-то дополнить?)
Для модулей и корзины разные контроллеры.

как они называются? я правил ./modules/CartController
07 Октябрь 2016, 19:53:47
Ответ #39
  • Старожил
  • ****
  • Сообщений: 366
  • Репутация: +0/-0
  • Skype: away4people
    • Просмотр профиля
включил выполнение php-кода путём перехода на работу с классом SmartyBC:
require_once(_PS_SMARTY_DIR_.'SmartyBC.class.php');

global $smarty;
$smarty = new SmartyBC();
smarty.config.inc.php

теперь собсно вопрос, а как же туда передать пхп-переменную?
в шаблоне юзать this->context->cart->cart_id невозможно, ибо неопределен $this .
как это делается? с каким контроллером работа? :/
CartController не подходит? по названию ведь должен
08 Октябрь 2016, 11:02:55
Ответ #40
  • Ветеран
  • *****
  • Сообщений: 3419
  • Репутация: +79/-6
  • Сообщество PrestaShop
    • Просмотр профиля
Цитировать
невозможно, ибо неопределен $this
$this не нужно определять, так обращаемся к свойству, методу класса, внутри этого класса.
Лучше бы ты ничего не делал. Для чего тебе выполнение php кода в шаблонах? Для того чтобы вытащить 1-ну переменную??? В шаблоне нужно показывать переменые, а не определять.

В контроллер Cart загляни, там id корзины определен
'id_cart' => (int)$this->context->cart->id,Поэтому в шаблоне корзины его можно показать так
{$id_cart}
09 Октябрь 2016, 14:58:54
Ответ #41
  • Старожил
  • ****
  • Сообщений: 366
  • Репутация: +0/-0
  • Skype: away4people
    • Просмотр профиля
ну вот:

я ж говорю, мне нужно получить айдишник корзины тогда, когда товар только-только аяксом добавился в выпадающее меню корзины (mircom.ua), -там можно посмотреть о чём я говорю.
справа менюшка корзины.
в твоем варианте этого ещё нет, видимо
09 Октябрь 2016, 15:23:03
Ответ #42
  • Ветеран
  • *****
  • Сообщений: 3419
  • Репутация: +79/-6
  • Сообщество PrestaShop
    • Просмотр профиля
$this->context->cart->idВот так поучить ид корзины, в любом контроллере. В том числе и когда товар только-только добавился в корзину.
09 Октябрь 2016, 16:11:17
Ответ #43
  • Старожил
  • ****
  • Сообщений: 366
  • Репутация: +0/-0
  • Skype: away4people
    • Просмотр профиля
в каком ещё контроллере? и что я там буду с ней делать? не понимаю.
я нашел место, где в шаблон blockcart.tpl привязываются переменные. в этот же шаблон мне нужно сейчас айдишник корзины передать, делаю так:
$this->context->cart->idно становится она доступна тоьлко после обновления страницы, т.е. при последующем запросе на сервер. это не аякс.
09 Октябрь 2016, 16:43:26
Ответ #44
  • Ветеран
  • *****
  • Сообщений: 22125
  • Репутация: +25303/-1
  • Prestashop - просто и эффективно
    • Просмотр профиля
"Место где привязываются переменные" - это конроллер. В конроллерах как раз используют id, а не в шаблонах.
При добавлении товара в корзину по Ajax вызывается контроллер корзины
controller=cart&add=1&ajax=trueПередать какие-то свои данные можете в /themes/default-bootstrap/js/modules/blockcart/ajax-cart.js в
add : function(idProduct, idCombination, addedFromProductPage, callerElement, quantity, whishlist){
Эксперт Prestashop - решения всех проблем, написание модулей, создание тем для интернет-магазинов под Prestashop.
Эксперт Magento - создам сайт на Magento, программирование кастомных модулей для Magento, кастомизация тем Magento.
Лучшие цены!!!