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

Дополнение: 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, 17:34    Александр Мельник   
0    470 0

Комментарии (3)

  1. Александр Мельник 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 не предусмотрели возможности обратиться к таким элементам…
    1. Александр Мельник 03 сентября 2016, 08:54 # 0
      Сегодня перестали отображаться даже плейсхолдеры [[+weight]] [[+goods]] и так далее.
      Если вчера код
      [[!msGetOrder?id=`35`]]
      [[+goods]]
      
      выводил мне товары, то сегодня — пустота.
      Бред какой-то. Но учитывая, что функционал сайта сохраняется, то означает что это я туплю. Но как один и тот же код может работать вчера и не работать сегодня.
      1. Сергей Кепкин 04 октября 2017, 21:04 # 0
        плейсхолдеры тоже кешируются, ставь!
        А что касается msGetOrder?id=, то он вообще вяжет с сессией, может из-за этого не давать смотреть, авторизуйся на фронте и все увидишь, вернее свои заказы увидишь и мозга не е**!
    Вы должны авторизоваться, чтобы оставлять комментарии.