Как формируется имя плейсхолдера в miniShop2?

Как бы так взять и понятно описать, что же я имею ввиду)))
Насколько я понимаю, каждый из сниппетов msCart, msOrder, msGetOrder представляют из себя многомерные массивы. И обратится к элементу массива можно через его плейсхолдер.
К примеру вот на этой странице docs.modx.pro/components/minishop2/snippets/msgetorder говорится что msGetOrder содержит в себе 7 массивов, хранящих полную информацию о заказе.
Открыв шаблон, формирующий письмо в miniShop2 я вижу обращения к элементам массива msGetOrder, которые действительно содержат плейсхолдеры, по имени совпадающие с именем элемента массива. [[+cart_cost]] [[+delivery_cost]] к примеру. На месте их появляются их значения.
Но если посмотреть по ссылке, которую я оставлял выше, то можно убедиться что эти два плейсхолдера принадлежат массиву total. Я экспериментировал со всеми элементами массива total и каждый получается вывести через его плейсхолдер. Но ведь там есть еще шесть других массивов с важными данными.
И вот тут начинается проблема или вернее мое непонимание.
Скажем есть массив Payment и в нем элемент name, содержащий имя способа оплаты. Логично вроде предположить что плейсхолдер должен иметь вид [[+payment_name]] но ничего не происходит. Да и для массива total не указывали же мы [[+total_cart_cost]]… Пробую не указывать имя массива payment и обращаюсь к [[+name]]? но результат никакой да и глупо как-то, ведь name присутствует и у массива delivery и у других массивов.
Собственно сам вопрос — как должен выглядеть плейсхолдер для обращения к элементам массивов кроме тех что вложены в массив total.
Надеюсь понятно сформулировал. Спасибо.
P.s. Кстати вывести массивы на экран методом указания пустого шаблона для сниппета у меня тоже не получается. Если кто может помочь то буду рад. Вопрос по этому поводу есть чуть ниже в списке.
Александр Мельник
02 сентября 2016, 14:34
modx.pro
1 538
0

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

Александр Мельник
02 сентября 2016, 19:22
0
$outer = array_merge($order->toArray(), array(
	'user' => $user ? $user->toArray() : array(),
	'address' => $address ? $address->toArray() : array(),
	'delivery' => $delivery ? $delivery->toArray() : array(),
	'payment' => $payment ? $payment->toArray() : array(),
));

$outer['goods'] = '';
$outer['cart_count'] = 0;
$outer['cost'] = $miniShop2->formatPrice($outer['cost']);
$outer['cart_cost'] = $miniShop2->formatPrice($outer['cart_cost']);
$outer['delivery_cost'] = $miniShop2->formatPrice($outer['delivery_cost']);
$outer['weight'] = $outer['cart_weight'] = $miniShop2->formatWeight($outer['weight']);
Это часть php кода из сниппета msGetOrder. Насколько я понимаю goods, cart_count, count,cart_cost, delivery_cost, weight создаются просто как элементы массива. Пишутся в переменную outer (которая и возвращается как результат функции) и поэтому к ним получается обратится напрямую через плейсхолдер [[+weight]].
А остальные элементы передаются как массивы и логично предположить что обращаться к ним нужно так — массив[элемент массива]. Тоесть плейсхолдер должен выглядеть как-то так [[+payment[name] ]]. Но modx не позволяет такую запись. Как-то пробовать экранировать квадратные скобки? Но это уже выглядит совсем не гармонично. Не верю что в miniShop2 не предусмотрели возможности обратиться к таким элементам…
    Александр Мельник
    03 сентября 2016, 08:54
    0
    Сегодня перестали отображаться даже плейсхолдеры [[+weight]] [[+goods]] и так далее.
    Если вчера код
    [[!msGetOrder?id=`35`]]
    [[+goods]]
    выводил мне товары, то сегодня — пустота.
    Бред какой-то. Но учитывая, что функционал сайта сохраняется, то означает что это я туплю. Но как один и тот же код может работать вчера и не работать сегодня.
      Сергей Кепкин
      04 октября 2017, 21:04
      0
      плейсхолдеры тоже кешируются, ставь!
      А что касается msGetOrder?id=, то он вообще вяжет с сессией, может из-за этого не давать смотреть, авторизуйся на фронте и все увидишь, вернее свои заказы увидишь и мозга не е**!
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    3