13 июня 2017 г., 21:11

Вопрос. Расширение данных, доступных в шаблоне корзины

Возник вопрос по разработке. Сам я не прошарен в вэбе и уж тем более в modx. Стоит задача реализовать систему бонусов. Готовых модулей не нашел по этому поводу и начал делать сам. Уперся в некоторое непонимание.
На страницах корзины в шаблонах доступны через смарти данные заказа, например цена: {$Order.sum} Хотел в этот же order засунуть еще два поля. Упоминания формирования этого дела накопал в классах getdata корзины.
думал добавления в массив по аналогии двух последних полей sumBonus и isEnable должно решить вопрос
public function outputArray(array $array, $count = false){ $result = parent::outputArray($array, $count); $result['sum'] = $this->sum; $result['original_sum'] = $this->original_sum; $result['discount'] = $this->discount; $result['quantity'] = $this->quantity; $result['positions'] = $count; $result['sumBonus'] = $this->sumBonus; $result['isEnable'] = '123'; return $result; }
Но похоже этого совсем не достаточно. Может быть кто-то знает как правильно (или хотя бы в каких местах искать следы) изменять содержимое этого результирующего массива $Order?

Модуль магазина используется shopModx (скорее всего 2.1.1).
Спасибо!
хотя, в любой потребуется расширение таблицы заказа - эти данные надо сохранить, поскольку они могут потребоваться.
версия сейчас поищу какая. честно сказать не знаю.

не совсем понял. с таблицей я понимаю, что надо расширять. В базе я создал дополнительные поля. Только проблема ведь в том, что на шаблоне я не могу получить данные которые попробовал добавить в объект доступный на шаблоне. или я не знаю чего-то?
таблицу мало расширить, нужно ещё эти поля прописать в map-файлы соответствующих компонентов, иначе xpdo их не увидит и не покажет.
посмотрите файл core/components/shopmodx/model/shopModx/mysql/shopmodxorder.map.inc.php (если 3 версия shopmodx)

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

у меня есть шаблон корзины. в нем при помощи смарти используется массив. (на шаблоне прямо среди html указывается например {$Order.sum} и в итоге на странице мы видим число которое было в массиве $Order под "именем" sum). массив формируется в пхп, очевидно. я нашел место которое, предположительно, формирует массив. и для проверки пробую в него затолкать еще один элемент равный константе. действую по аналогии с тем что уже написано в классе. потом на шаблоне пытаюсь применить: {$Order. isEnable} но при входе на страницу заложенного значения нет. в том месте где оно должно быть пусто. значит я что-то не верно делаю при увеличении количества элементов массива или не учитываю какую то инициализацию этих полей. и вот тут как раз вопрос куда можно посмотреть по этому поводу?
При программировании процессоров лучше сперва запускать его из консоли (там есть скрипт вызова процессора). В самлм процессоре можно вставлять конструкции типа

... print_r(somthing); exit; ...
и в консоли смотреть - доходит ли процесс до этого места и что там происходит.
Времени при этом экономится уйма, да и можно увидеть какие-то промежуточные результаты.
Или, как вариант - можно в самом шаблоне вставить код

<pre>{print_r($result)}</pre>
и посмотреть ответ процессора в сыром виде.
Спасибо.
С консолью не разобрался, Не могу найти нужный скрипт.
А вот вторая подсказка весьма полезна похоже будет и в дальнейшем. теперь я хотя бы однозначно вижу, что в массив $Order так и не попало то, что я туда пытался положить.
консоль лучше самую последнюю установить. там есть справа кнопка "загрузить"
Да. Я там и пробовал искать среди заготовок. Скорее всего мне просто не хватает понимания, как запустить нужный мне getdata. Там ведь какой-то общий класс. Я еще попробую поразбираться, прежде чем напрягать своими расспросами)
заготовка global/modxclub.ru/processor.php
там нужно прописать $params, $namespace и в первом параметре runProcessor - путь к процессору относительно папки processors пространства имён (там как пример стоит 'site/web/getdata')
Спасибо большущее! По вопросу внесения значений в куда хотел - удалось!)
К сожалению, оказалось, что итоговую проблему это не решило.

На шаблоне корзины есть стрелки увеличения и уменьшения количества товаров. При нажатии - значения итоговой суммы и количества товаров в заказе меняются без обновления страницы. Может быть известно по какому принципу происходит это обновление на странице? все, что я смог понять - какая-то связка параметра (например итоговой стоимости) с классом css, но вот какая для меня загадка. не могу найти где прописана их связь.
там хитро всё сделано - react+flux, и всё собирается webpack (в старой версии - gulp). Но можно свой обработчик попробовать навесить, хоть это и не по феншую

уф. спасибо за наводку. попробую вникнуть прежде чем говнокодить.
надо на хостинге установить nodejs+npm, тогда можно будет прям в исходниках код править (самый верный вариант).
очень рекомендую ознакомиться с этими технологиями, они сейчас очень актуальны. Кстати, этот сайт весь на них построен

Добавить комментарий