+ в копилку за Либера
Возможно проблема в плагинах.
  • avatar CCC
  • 0
Да точно, спасибо за пояснение, сразу не обратил внимание. Тем не менее, вопрос не решился. можно ли его как-то вывести?
Влияет на удобство, и в доках как раз и написано всюду — json или php массив.
  • avatar paic
  • 0
Пожалуй, это уже в следующий раз(( Тем более в доках и примерах везде так, и как мне кажется, так будет удобнее если где-то что-то потребуется поменять.

Или это на что-то принципиально влияет?

Спасибо за помощь и подсказки.
Можно без json, сразу массивы.
  • avatar paic
  • 0
В итоге для двух типов форм заказа (для не зарегистрированного и зарегистрированного пользователя) получился такой сниппет.
Вызывается так (как и рекомендовал Pathologic для общих параметров, наконец-то дошло))):
[!tplrender? 
&controller=`Form`
&formid=`shopOrderForm`
&prepareProcess=`form_order`			
&formTpl=`shopOrderForm` 
&formTpl2=`shopOrderFormRegistered` 
&reportTpl=`shopOrderReport` 
&reportTpl2=`shopOrderReportRegistered` 
&messagesOuterTpl=`@CODE:<div class="success">[+messages+]</div>`
&errorTpl=`@CODE:<span class="required">[+message+]</span>`
&to=`[(emailsender)]`
&subject=`Заказ в интернет-магазине`
&successTpl=`@CODE:<p>Спасибо, что воспользовались формой заказа на нашем сайте. Ваше сообщение будет рассмотрено нашими менеджерами в кратчайшие сроки.</p>`
&ccSender=`1`
&ccSenderTpl=`@CODE:<p>Здравствуйте, [+name.value+]! Ваш заказ получен и будет рассмотрен в кратчайшие сроки.</p>`
&redirectTo=`15`
!]

Здесь successTpl на случай, если не сработает редирект или если редирект удалить.

И сам сниппет

<?php

$id = $modx->getLoginUserID('web');
if (!$id) {
$params['rules'] = '{
"name":{
	"required":"Обязательно введите имя"
},
"address":{
	"required":"Обязательно введите адрес доставки"
},
"region":{
	"required":"Обязательно введите регион"
},
"payment":{
	"required":"Обязательно введите способ оплаты"
},
"email":{
	"required":"Обязательно введите email",
	"email":"Введите email правильно"
},
"phone":{
	"required":"Обязательно введите номер телефона",
	"phone":"Введите номер правильно"
},
"agree":{
	"required":"Вы не можете отправить обращение, если не согласны с правилами обработки персональных данных"
},
"message":{
	"required":"Обязательно введите сообщение",
	"minLength":{
		"params":10,
		"message":"Сообщение должно быть не менее 10 символов"
	}
}
}';
$params['formTpl'] = $formTpl;
$params['reportTpl'] = $reportTpl;
$params['formControls'] = 'payment,agree';
$params['captcha'] = 'modxCaptcha';	
$params['captchaParams'] = '{
"width":140,
"height":50
}';		
} else {
$params['rules'] = '{
"payment":{
	"required":"Обязательно укажите способ оплаты"
},
"message":{
	"required":"Обязательно введите сообщение",
	"minLength":{
		"params":10,
		"message":"Сообщение должно быть не менее 10 символов"
	}
}
}';
	
$params['formTpl'] = $formTpl2;
$params['reportTpl'] = $reportTpl2;
$params['formControls'] = 'payment';
$params['defaultsSources'] = 'user:web';
$params['keepDefaults'] = 'username,fullname,street,email,phone,mobilephone,state,fax,zip,discountInfo';
}

return $modx->runSnippet("FormLister", $params);

  • avatar paic
  • 0
Получается так, пока для теста (не все параметры прописаны)

<?php
// Общие параметры
$params['controller'] = 'Form';
$params['formid'] = 'shopOrderForm';
$params['prepareProcess'] = 'form_order';
// и т.д. общие параметры

//разные параметры
$id = $modx->getLoginUserID('web');
if (!$id) {
$params['rules'] = '{
"name":{
	"required":"Обязательно введите имя"
},
"address":{
	"required":"Обязательно введите адрес доставки"
},
"region":{
	"required":"Обязательно введите регион"
},
"payment":{
	"required":"Обязательно введите способ оплаты"
},
"email":{
	"required":"Обязательно введите email",
	"email":"Введите email правильно"
},
"phone":{
	"required":"Обязательно введите номер телефона",
	"phone":"Введите номер правильно"
},
"agree":{
	"required":"Вы не можете отправить обращение, если не согласны с правилами обработки персональных данных"
},
"message":{
	"required":"Обязательно введите сообщение",
	"minLength":{
		"params":10,
		"message":"Сообщение должно быть не менее 10 символов"
	}
}
}';
$params['formTpl'] = $formTpl;
$params['formControls'] = 'payment,agree';
$params['captcha'] = 'modxCaptcha';	
$params['captchaParams'] = '{
"width":140,
"height":50
}';		
} else {
$params['rules'] = '{
"payment":{
	"required":"Обязательно укажите способ оплаты"
},
"message":{
	"required":"Обязательно введите сообщение",
	"minLength":{
		"params":10,
		"message":"Сообщение должно быть не менее 10 символов"
	}
}
}';
	
$params['formTpl'] = $formTpl2;
$params['formControls'] = 'payment';
$params['defaultsSources'] = 'user:web';
$params['keepDefaults'] = 'username,fullname,street,email,phone,mobilephone,state,fax,zip,discountInfo';
}

return $modx->runSnippet("FormLister", $params);


Почему-то не отображается валидация message, но может где допустил опечатку, все остальное вроде работает (из того что прописано).

Вызывается
[!tplrender? &formTpl=`shopOrderForm` &formTpl2=`shopOrderFormRegistered`!]

В вызове еще будет reportTpl и reportTpl2
  • avatar paic
  • 0
Оно выбрасывает из админки и просто так, без параллельной авторизации в виде веб-пользователя.
  • avatar 3fir
  • 2
Неопубликованные ресурсы могут видеть только залогиненные менеджеры.
  • avatar paic
  • 0
Я это тоже имел ввиду, когда писал о варианте с одним runSnippet.
Но это особой роли не играет — что один раз прописать, что два копипастом. Возможно, есть и более оптимальный вариант, я же исхожу из своего скромного опыта, например, приходилось допиливать и перепиливать eFilterResult и он мне как своего рода образец дружелюбной обертки)
При чем тут personalize. Я имел в виду, что можно снчала задать общие параметры в массиве, а потом по условию добавлять еще параметры или удалять.

github.com/evolution-cms/evolution/tree/1.4.x
  • avatar paic
  • 0
Ну да, ничем не лучше того же Personalize.

Или оставлять один вызов с одной формой (самый первый вариант), в которую в случае авторизации пользователя подставляются значения полей.
Зато есть полезное — понял (на основе результатов тестирования) зачем нужен keepDefaults ))

И еще раз спрошу по выбрасыванию из админки — нужно обязательно обновлять весь движок или можно ограничиться FormLister и какими-то отдельными компонентами (DL, может еще что)? И где искать 1.4.5
Работать одинаково будет, но очевидно же, что держать два почти одинаковых набора параметров неудобно.
  • avatar paic
  • 0
это по схеме

$id = $modx->getLoginUserID('web');
if (!$id){
return $modx->runSnippet("FormLister", array(
        набор параметров 1
));
}
else {
return $modx->runSnippet("FormLister", array(
	набор параметров 2
));
}

ну или runSnippet один, а через if подменять params?
Ну, предлагаю выкинуть prepare и использовать обертку, которая и разрулит параметры.
  • avatar paic
  • 0
Не долго радовался )) Как оказалось, одной подмены шаблона мало.
Нужно менять и параметры, так как хотя в форме для зарегистрированного пользователя и нет agree и modxCaptcha, FormLister их все-равно требует, подменить эти параметров в препаре так же не увенчались успехом, плюс в форме для незарегистрированного пользователя не отображается капча

<?php
$id = $modx->getLoginUserID('web');
if (!$id) {
$FormLister->config->setConfig(array(
        'formControls'=>'payment,agree',
		'captcha'=>'modxCaptcha'
        ));
$FormLister->renderTpl = 'shopOrderForm';
} else {
$FormLister->config->setConfig(array(
        'formControls'=>'payment'
        ));
$FormLister->renderTpl = 'shopOrderFormRegistered';
}

Вот не везет мне в этот раз с setConfig (( Как же их менять? раньше вроде срабатывало

Скорее всего, с набором параметров rules тоже придется что-то делать — он разный.
И шаблон reportTpl тоже желательно подменять.

Побочный эффект, вызван скорее тем, что сайт не вновь создаваемый, а обновляемый — он связан с разным наименованием полей, например, там где для незарегистрированного пользователя name, то у зарегистрированного — fullname, и т.д. Пока решил этот вопрос прописыванием двойного набора плейсхолдеров, начиная с модуля управления заказами SHK, например
[+fullname+] [+name+] и все остальные аналогично

и в других местах, какой-то один из двух сработает. Но это скорее для тех, кто пожелает наступить на мои грабли))
  • avatar paic
  • 0
Подскажите, а нужно обязательно обновлять весь движок или можно ограничиться FormLister и какими-то отдельными компонентами?
  • avatar paic
  • 0
я, наверное, за эти дни что-то упустил, уже есть 1.4.5? А на гите пока нет ((
github.com/modxcms/evolution
Обновиться до 1.4.5. Я не помню, в какой версии это исправлено.