Значение в глобальный плейсхолдер ?

Приветствую! Как сохранить значение в глобальный плейсхолдер в пределах сессии пользователя, который можно вызывать из любого сниппета/чанка?
Поясню, чего я пытаюсь добиться:
Есть корзина, в которой лежат товары. Цена с доставкой у товаров считается так:

[[!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'];

На промежуточном шаге, при заполнении формы адреса все нормально передается, но проблема в том, что я не знаю, как передать эти данные на следующий шаг, который отправляет заказ в корзину.

Хотелось бы записать значение «проверки» в плейсхолдер и просто вызывать его в любом месте. Как это сделать?

Может я изобретаю велосипед и есть какие-то другие способы, доступные не разбирающемуся в программировании человеку?

Constantine
19 июля 2015, 11:49
modx.pro
1 574
0

Комментарии: 2

Павел Романов
19 июля 2015, 15:48
+1
Так в сессию и запишите:
<?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'];
    Constantine
    19 июля 2015, 17:43
    0
    Спасибо большое! Работает как и хотелось.
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    2