Через pdoResources не выводится плейсхолдер

Друзья, прошу помощи! Как в pdoResources через чанк вывести значение заранее заполненного плейсхолдера? На данный момент вместо значения плейсхолдера выводится его текстовая запись в примерно таком виде
[[+nn7]]
, где последняя цифра зависит от id ресурса. Т.е. получается, что плейсхолдер не обрабатывается в pdoResources, вместо его значения выводится текст, задающий сам плейсхолдер.

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

У товара/услуги в строке будут отображаться:
  • название
  • стоимость
  • возможно какие-то дополнительные данные из дополнительных полей соответствующих ресурсов (картинка-привью, наличие и пр.) по необходимости
  • и будет input, где пользователь сможет указать количество единиц товара/услуги для заказа
Вводя какое-то числовое значение для заказа у нужного товара/услуги, рядом с инпутом будет сразу выводиться стоимость данного вида товара/услуги в указанном количестве. Естественно, эта стоимость будет плюсоваться к общей стоимости заказа.

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

Пока сделал форму заказа без расчета стоимостей, где через pdoResources вывел товары/услуги. Для отправки использую FormIt + AjaxForm. Параметр name у инпутов зависит от id ресурса.

В чанке sentEmailTpl, формирующем отправляемое письмо с заказом, также через pdoResources вывожу данные заказа с помощью чанка
[[#[[+id]].pagetitle]]: количество - [[+nn[[#[[+id]].id]]]], цена - [[#[[+id]].cena]] рублей
При этом название товара и стоимость в заказе приходят правильные, чего не скажешь про указанное количество.

Запись
[[+nn[[#[[+id]].id]]]]
должна формировать плейсхолдер количества товара/услуги, передаваемый из формы для дальнейшей отправки. Но как я писал выше, эта запись выводит не значение плейсхолдера
[[+nn7]]
, а его текстовую запись. Т.е. если в форме заказа я укажу для элемента с id=7 какое-то числовое значение, то в заказе в письме вместо этого числового значения отображается не введенное число, а текст
[[+nn7]]
Причем если в чанке sentEmailTpl, формирующем отправляемое письмо с заказом, выводить данные заказа не через pdoResources а вручную для каждого отдельного товара/услуги в виде
[[#7.pagetitle]]: - количество - [[+nn[[#7.id]]]], цена - [[#7.cena]] рублей
, то запись
[[+nn[[#7.id]]]]
которая формирует плейсхолдер
[[+nn7]]
отрабатывает нормально и отправляет в письме введенное в инпут значение.

Вполне вероятно, что я неправильно вывожу плейсхолдер через сниппет. Буду рад любой помощи!
Ури
06 февраля 2017, 16:18
modx.pro
1 870
0

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

Олег
06 февраля 2017, 20:39
0
Каким образом задается плейсхолдер?
Желательно с примерами кода.
    Ури
    06 февраля 2017, 21:05
    0
    На сколько я понимаю, при использовании AjaxForm плейсхолдеры сами формируются исходя из параметров name тегов input и заполняются автоматически теми значениями, что были введены пользователем в форме (если инпуты не заполнялись, то плейсхолдеры пустые).

    Например, если в чанке форме мы делаем поле
    <input type="text" class="form-control" name="email" id="af_email" value="">
    , то плейсхолдер [[+email]] сам создается автоматически (из параметра name поля) и заполняется введенным значением в соответствующий input.

    При этом в чанке sentEmailTpl, формирующем отправляемое письмо, для отправки заполненного поля email мы пишем:
    Email: [[+email]]
    Т.е. плейсхолдеры создаются и заполняются автоматически. Как-то специально я их не заполняю.
    Ури
    06 февраля 2017, 21:16
    0
    Есть предположение, что сниппет отрабатывает раньше, чем плейсхолдеры инициализируются. Поэтому вместо значения сниппета выводится сам текст, сниппет задающий.
    Но так ли это, я понятия не имею ) А быть может, плейсхолдеры в сниппетах надо выводить как-то особым образом…
      Николай
      07 февраля 2017, 11:38
      0
      А если просто записать в шаблоне [[+nn7]] что-то выводится?
        Ури
        07 февраля 2017, 11:58
        0
        Если просто записать в шаблоне [[+nn7]], то на странице сайта ничего не выводится (пустое место), т.к. на момент загрузки страницы форма еще не заполнена, следовательно плейсхолдер [[+nn7]] и ему подобные еще не сформированы. А отправляется форма через Ajax компонентом AjaxForm. Следовательно страница не перезагружается. В общем, на момент загрузки страницы этому плейсхолдеру неоткуда взяться, чтобы он выводился в шаблоне.
        Быть может, в чанке sentEmailTpl, формирующем отправляемое письмо, сниппет pdoResources отрабатывает еще до того, как он вызывается через AjaxForm? Тогда получается, что плейсхолдеры еще не были сформированы…
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        5