Проблема возникла следующего характера:
Вывод альтернативной формы для веб-пользователей, если групп пользователей не одна, а несколько
Решение для
одной группы пользователей - простое, и оно описано в ФАКе. Устанавливаем phx и в шаблон вставляем следующее:
[+phx:mo=`Имя группы пользователей`:then=`[!вызов еформа для зарегистрированных!]`:else=`[!вызов еформа для НЕзарегистрированных!]`+]
У меня групп ВЕБ пользователей - несколько, Group1, Group2 и Group3, поэтому, если в phx вставлять mo=`Group1`, то пользователи из Group2 и Group3 видят форму для НЕзарегистрированных пользователей (что, собственно, и логично, т.к. phx проверяет состоят ли они в группе Group1, а они в ней не состоят).
Рекомендую начать читать с конца, т.к. второе решение более удобное, просто и гибкое + не требует установки phx
"Костыль" для решения и сипользованием phx
1. Во-первых, чтобы не лопнул мозг, я вынес вызовы eForm в отдельные чанки (так просто удобнее и нагляднее):
Чанк ShowForm - отвечает за вывод формы НЕзарегистрированным:
[!eForm? &formid=`shopOrderForm` &tpl=`shopOrderForm` &gotoid=`23` &report=`shopOrderReport` &vericode=`0` &ccsender=`0` &subject=`Новый заказ`&eFormOnBeforeMailSent=`populateOrderData` &eFormOnMailSent=`sendOrderToManager` &to=`{{contactEmail}}`!]
Чанк ShowFormUser - отвечает за вывод формы зарегистрированным:
[!eForm? &formid=`shopOrderForm` &tpl=`shopOrderFormWebUser` &gotoid=`23` &report=`shopOrderReportWebUser` &vericode=`0` &ccsender=`0` &subject=`Новый заказ` &eFormOnBeforeMailSent=`populateOrderData` &eFormOnMailSent=`sendOrderToManager` &to=`{{contactEmail}}`!]
2. Теперь будем строить кривую логику для phx.
Создаем 3 Чанка
testGroup1
[+phx:mo=`Group1`:then=`{{ShowFormUser}}`:else=`{{testGroup2}}`+]
testGroup2
[+phx:mo=`Group2`:then=`{{ShowFormUser}}`:else=`{{testGroup3}}`+]
testGroup3
[+phx:mo=`Group3`:then=`{{ShowFormUser}}`:else=`{{ShowForm}}`+]
В моем случае, группы 3, чанка соответственно тоже 3.
Что же делают эти чанки? В теле шаблона, где нам нужен eform вставляем чанк testGroup1. По нему видно, что он проверяет на соответствие пользователя к группе Group1, и если соответствует - выдает форму для зарегистрированных, а если не соответствует - "отправляет" нас к чанку testGroup2. Этот, в свою очередь, проверяет на принадлежность пользователя к группе Group2, и выдает либо форму для зарегистрированных, если принадлежит, либо "отправляет" в чанк testGroup3. Последний чанк выполняет проверку на соответствие Group3, и если и к ней мы не принадлежим, он, как последний выдает нам чанк {{ShowForm}}, где лежит форма вызова для НЕзарегистрированных пользователей.
Вуаля
Второе решение
Кстати, довольно неплохое, и найдено совершенно случайно. По крайней мере, оно имеет право жить, т.к., во-первых, не требует установки phx, во-вторых, подойдет и для решения подмены формы для зарегистрированных пользователей, даже если группа всего одна, т.е. проще конструкции, которая есть в ФАК и озвучена в начале этого поста.
Итак,
В чем различие вызовов eform для зарегистрированных, от незарегистрированных пользователей? Только в чанках формы и отчета. А в чем разница в названиях чанков? только во фразе WebUser в конце shopOrderReport и shopOrderReport
WebUser, shopOrderForm и shopOrderForm
WebUser.
Как этим воспользоваться? Решение простое, как 2 рубля.
В стандартной оставке MODx есть сниппет MemberCheck. Он проверяет, относится ли пользователь определенным группам пользователей
ВАЖНО! причем, он распознает и менеджеров, а не только веб-пользователей (насколько я понял из доков), в отличии от mo=`` в phx, это тоже может кому-то пригодиться
Создаем
чанк FuckEform. В него пишем злополучную фразу, которая различает 2 вызова сниппета:
В шаблоне вызываем MemberCheck
ДО вызова eForm
[[MemberCheck? &groups=`Group1, Group2, Group3` &chunk=`FuckEform` &ph=`wtf`]]
Теперь MemberCheck вставит содержимое Чанка FuckEform в плейсхолдер wtf, либо не вставит ничего, поэтому нам осталось добавить нужный плейсхолдер в один вызов eform.
Конструкция вызова целиком будет выглядеть в шаблоне так:
[[MemberCheck? &groups=`Group1, Group2, Group3` &chunk=`FuckEform` &ph=`wtf`]]
[!eForm? &formid=`shopOrderForm` &tpl=`shopOrderForm[+wtf+]` &gotoid=`23` &report=`shopOrderReport[+wtf+]` &vericode=`0` &ccsender=`0` &subject=`Новый заказ`&eFormOnBeforeMailSent=`populateOrderData` &eFormOnMailSent=`sendOrderToManager` &to=`{{contactEmail}}`!]
Вуаля...
Третий способ, но он на практике не проверен мной Проверено. Работает. Вызов eForm в чанках только надо кэшируемый сделать - [[...]]
Опять же - стандартный сниппет Personalize, входящий в дефолтную поставку.
Тут вообще все очень просто (но чисто на теории).
Вызываем сниппет:
[!Personalize? &yesChunk=`ShowFormUser` &noChunk=`ShowForm`!]
ShowFormUser - чанк с вызовом для зарегистрированных
ShowForm - чанк с вызовом еформа для незарестрированных
Вуаля...