Значение в глобальный плейсхолдер ?
Приветствую! Как сохранить значение в глобальный плейсхолдер в пределах сессии пользователя, который можно вызывать из любого сниппета/чанка?
Поясню, чего я пытаюсь добиться:
Есть корзина, в которой лежат товары. Цена с доставкой у товаров считается так:
Т.е. просто убираем лишний пробел и прибавляем к цене 120, и далее эти данные уходили на форму в я.кассу. Все работало просто и без лишних заморочек.
Но теперь появились «особые» товары, у которых доставка = 0.
Вроде бы все просто, посчитал количество товаров (именно товаров, исключая 2+ позиций одного товара) и сравнил, если «особые» = «всего»: тогда доставка будет 0 рублей.:
Казалось бы, чего, проще, чем сравнить два параметра?
Проблема в том, что кроме как в «корзине» их нигде нельзя использовать. Пробовал передавать и собирать через GET и POST, написав сниппет в одну строку:
На промежуточном шаге, при заполнении формы адреса все нормально передается, но проблема в том, что я не знаю, как передать эти данные на следующий шаг, который отправляет заказ в корзину.
Хотелось бы записать значение «проверки» в плейсхолдер и просто вызывать его в любом месте. Как это сделать?
Может я изобретаю велосипед и есть какие-то другие способы, доступные не разбирающемуся в программировании человеку?
Есть корзина, в которой лежат товары. Цена с доставкой у товаров считается так:
[[!msCart:replace=` ==`:add=`120`? &tplEmpty=`` &tplOuter=`@INLINE [[+total_cost]]` &tplRow=``]]
Т.е. просто убираем лишний пробел и прибавляем к цене 120, и далее эти данные уходили на форму в я.кассу. Все работало просто и без лишних заморочек.
Но теперь появились «особые» товары, у которых доставка = 0.
Вроде бы все просто, посчитал количество товаров (именно товаров, исключая 2+ позиций одного товара) и сравнил, если «особые» = «всего»: тогда доставка будет 0 рублей.:
(tpl.msCart.row)
[[!pdoField?
&field=`empty`
&default=``
&toPlaceholder=`favor`
&output=`[[+favorite:is=`1`:then=`[[+idx]]`:else=`0` ]]
`]]
[[!pdoField?
&field=`empty`
&default=``
&toPlaceholder=`favor_check`
&output=`[[+favor_check:add=`1`]]
`]]
Казалось бы, чего, проще, чем сравнить два параметра?
(tpl.msCart.outer)
[[+favor:is=`[[+favor_check]]`:then=`1`:else=`0`]]
Проблема в том, что кроме как в «корзине» их нигде нельзя использовать. Пробовал передавать и собирать через GET и POST, написав сниппет в одну строку:
<?php
echo $_GET['s'];
На промежуточном шаге, при заполнении формы адреса все нормально передается, но проблема в том, что я не знаю, как передать эти данные на следующий шаг, который отправляет заказ в корзину.
Хотелось бы записать значение «проверки» в плейсхолдер и просто вызывать его в любом месте. Как это сделать?
Может я изобретаю велосипед и есть какие-то другие способы, доступные не разбирающемуся в программировании человеку?
Комментарии: 2
Так в сессию и запишите:
Ну и вызывайте:
А там, где нужно, если включен новый парсер pdoTools, то просто:
Если не установлен, то сниппетом:
<?php
if($favor == $favor_check) {
$output = 1;
} else {
$output = 0;
}
$_SESSION['favor'] = $output;
Ну и вызывайте:
[[!имя Сниппета? &favor=`[[+favor]]` &favor_check=`[[+favor_check]]`]]
А там, где нужно, если включен новый парсер pdoTools, то просто:
[[!#SESSION.favor]]
Если не установлен, то сниппетом:
<?php
return $_SESSION['favor'];
Спасибо большое! Работает как и хотелось.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.