Всем привет, такой вопрос, отправляю на почту заказ, после оформления с сайта из корзины, но вместо параметров товара приходит Array, хотя в админке сайта в Управление заказами shopkeeper, выводит нормально всё ["L","Classic Ball 3-5 мм","красный"] , я понимаю, что это массив, но почему он не приходит на почту мне, может кто сталкивался с такой проблемой?
Та надо в шаблоне письма этот массив разобрать на отдельные составляющие. А чтобы проверить, что они в шаблон приходят, можно передать его через 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]], оставил, чтобы вы посмотрели что и как. Удалите что не нужно будет.
Не за что