Всем привет, такой вопрос, отправляю на почту заказ, после оформления с сайта из корзины, но вместо параметров товара приходит Array, хотя в админке сайта в Управление заказами shopkeeper, выводит нормально всё ["L","Classic Ball 3-5 мм","красный"] , я понимаю, что это массив, но почему он не приходит на почту мне, может кто сталкивался с такой проблемой?
Та надо в шаблоне письма этот массив разобрать на отдельные составляющие.
А чтобы проверить, что они в шаблон приходят, можно передать его через print_r()
а в каком системном файле сделать передачу через print_r()?
Вообще, лучше эти вопросы на сайте шопкипера и спрашивать, я здесь не замечал особых специалистов по нему.
А так, вроде вот здесь формируется информация о заказе. Можете попробовать на 161-ой строке вставить
и после оформления заказа в логах MODX смотреть выводится там что или нет.
И вы бы привели код вашего чанка, где формируется письмо и полностью полученное сообщение. Дело в том, что у него используется функция implode(), которая вполне будет работать для одноуровневого массива со строчными значениями, но если многоуровневый, то некоторые элементы будут залетать как array.
Вот файл orderDataOuter:
А вот файл orderDataRow:
А вот само письмо, которое приходит мне на почту: https://cuu.su/Eq4MGT4/
А вот логи:
А вот файл shopOrderReport:
В файле, на который я ссылался, нет переменной addit_data, то есть это или ваша какая-то собственная переменная, или просто что-то где-то не сходится. В любом случае, здесь скорее всего нет смысла очень глубоко копать, а просто можно решить проблему локально. Смотрите, на уровне чанков просто так нельзя работать с массивами, но можно переменную передать в сниппет-обработчик. Создайте, к примеру, сниппет arrayToStr вот с таким содержимым:
и замените
на
Это не гарантированно заработает, но может. Суть его в том, что значение плейсхолдера будет передано в сниппет-модификатор, в котором мы и выполняем обработку массива. После выполнения проверьте логи MODX-а, если все ОК, там будет запись с содержимым этой переменной.
Если это не поможет, можно попробовать другой вариант:
заменить на
Просто в первом варианте в сниппет может не дойти переменная в чистом виде, а так больше шанс. Но если первый вариант пройдет, он предпочтительней.
все равно в логе пишется просто [2019-01-04 11:29:52] (ERROR @ /index.php) ArrayПробовал два варианта делать, но почему-то не прокатывает.
Раз пишет Array, значит в сниппет уже залетает значение Array (строковое). То есть это не объект типа Array, а просто строковая переменная "Array". Чтобы проще понять было, попробуйте выполнить вот такой код (например в консоли):
Результат будет такой:
Вот и получается, что на момент вывода переменной вам передается не исходный массив, а простое строчное значение Array. Из этого вы уже ничего не получите.
А вообще это лютый квест...
Просто прикол в том, что если бы в саму вкладку "Управление заказами ShopKeeper" тоже летело Array, тогда да, косяк где-то лютый, но просто там все нормально отображается.
В этом ничего удивительного нет, потому что разные механизмы работают. В админке выводится через процессоры и JS+ExtJS, а на фронте проходит через чанки-сниппеты.
Собственно, это больше всего и раздражает.
Ага, понял, спасибо, буду пробовать.
Пожалуйста.
Смотри, я передаю в корзину маленькую с помощью [[+addit_data:default=`—`]] [[!arrayToStr?input=[[+addit_data]]]] [[+addit_data:arrayToStr]] всеми выдает Array, как можно передать параметры не через этот метод?
Я же говорю, в данной ситуации это не имеет смысла. В плейсхолдер [[+addit_data]] уже прилетает строковый параметр Array. Сделай себе бекап сайта и пришли мне доступ в админку на почту n.lanets@modxclub.ru, я посмотрю что там у тебя происходит.
Как я и говорил, проблема в том, что у вас передается многоуровневый массив.
Но как эту проблему решить с шопкипером, я не знаю, так как перелопачивать его нет никакого желания. Посмотрите, я дописал у вас сниппет arrayToStr
Плейсхолдер shkDataArray я устанавливаю в файле core/components/shopkeeper3/model/shopkeeper.class.php на строке 1297. Посмотрите там код.
Вот свою переменную я в сниппете смог получить как есть, а вот плейсхолдер data_arr там же в сниппете я получаю Array, то есть где-то он преобразовывается.
Сорри, ничем больше не помогу.
P.S. в чанке orderDataRow я тоже дописал [[!arrayToStr]], оставил, чтобы вы посмотрели что и как. Удалите что не нужно будет.
спасибо за попытку помочь, буду дальше копаться
Не за что