• avatar paic
  • 0
Спасибо за разъяснение. Но все же не понятно, почему у 1px данные формы «слетали», а у меня нет (а может, завтра тоже будут слетать? или у кого-то из пользователей будет слетать и пойдет поток жалоб...)
Тут явно какое-то недопонимание, как все работает. Данные из defaultsSources просто загружаются в обработчик до обработки формы, а будем мы их выводить в шаблоне формы или не будем — дело хозяйское. Например, мы имя и телефон сохранили в сессию, а потом во всех формах подставляем из сессии. Если же не просто подставляем, а хотим, чтобы пользователь не мог их изменить — тогда используется параметр keepDefaults. Можно просто посмотреть в исходниках и станет понятно, что откуда берется.
  • avatar paic
  • 0
так мы не про валидацию, а чтобы введенные данные сохранялись, если по каким-то причинам (в данном случае картинка не прошла валидацию)данные из формы не были отправлены по назначению.
keepDefaults вообще пофиг валидация, он загружает данные до нее.
  • avatar paic
  • 0
Потестите, это политика браузеров такая.
Протестил только что еще раз, ничего не слетело. Браузер хром. Только раскрывающийся список выбора категории — он да, закрылся.

И раньше еще делал на других проектах формы отправки с прикреплением несколько файлов, тоже работает отлично — не слетает.
  • avatar EGO
  • 0
А я вот так делал…

if (IN_MANAGER_MODE != 'true') die();
$e = &$modx->event;
$tv_id = 10; // id вашего tv-параметра
if ($e->name == 'OnBeforeDocFormSave') {
	global $tmplvars;
		$tmplvars[$tv_id][1] = 0; // нужное значение
//$modx->logEvent(101, 1, '<pre>'.print_r($tmplvars,true).'</pre>', 'OnBeforeDocFormSave tmplvars');
	$e->output($tmplvars);
}
  • avatar 1px
  • 0
keepDefaults поможет только если мы редактируем страницу, и надо показать имеющиеся фото.

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

Я делал загрузку файлов на лету во временную папку, их айди пихал в таблицу, а после сохранения в сниппете на событие prepareAfterProcess писал их перемещение во что-то типа /images/ads/101/ и вставлял имена файлов в нужные ТВ созданного ресурса.
В скрытый ТВ документа писал также список айдишек из этой таблицы, чтобы потом видеть, какие файлы какому ресурсу принадлежат. Ну и вроде ещё там были колонки сортировки и владелец файла.
  • avatar paic
  • 0
Плюс попозже пришлось сделать сохранение фото аяксом, чтобы при ошибках валидации формы не приходилось заново грузить всё.

keepDefaults как раз и должен помогать в случаях ошибок валидации, чтобы не грузить все заново (он данные формы, прошедшие валидацию, загружает повторно сам).
За ajax спасибо, что напомнили.
  • avatar 1px
  • 1
Спасибо за труд, действительно, давно не хватало чего-то в этом духе.
Год назад делал такую же точно работу, кое-что решал по-другому, кое-что также как вы, достал весь чат вопросами, заколебал (наверное) Pathologic'a, но в итоге всё работает =)
Разве что в плане записи значений в ТВ использовал Modx Api — это когда пути к файлам сохранял.

Плюс попозже пришлось сделать сохранение фото аяксом, чтобы при ошибках валидации формы не приходилось заново грузить всё. Советую всем сделать это СРАЗУ же. Перепиливать на живом сайте с тысячами объявлений будет больней.
  • avatar paic
  • 0
Убрал — и действительно работает! А изначально не хотело, почему и ставил просто ссылку по id, без названия — наверное, сам что-то схомутил.
Так оно потому и работает, что эти данные уже есть. Если параметр убрать, то все останется на месте.
  • avatar paic
  • 0
Эта запись означает загрузить данные из параметра contentDefaults, которого в вызове нет, поэтому не знаю, чем это может помочь
Дык, работает же)) это вызов

это в личном кабинет

Вообще данные документа и данные пользователя можно использовать без каких-либо ухищрений:
спасибо, осваиваем потихоньку
Маленькое, но полезное дополнение в форму удаления объявления (раздел III)
Если добавить параметр
&defaultsSources=`param:contentDefaults`

то в форму можно вывести заголовок объявление и все что посчитаете нужным, чтобы обезопасить пользователя от случайного удаления не того объявления.

Эта запись означает загрузить данные из параметра contentDefaults, которого в вызове нет, поэтому не знаю, чем это может помочь. Вообще данные документа и данные пользователя можно использовать без каких-либо ухищрений: github.com/Pathologic/FormLister/blob/master/assets/snippets/FormLister/core/controller/DeleteContent.php#L63-L64
Изменить ДО сохранения по-идее невозможно. После — вот так.
Событие: OnDocFormSave
$tvid = '99'; //id нужного ТВ
$tvvalue = $modx->db->getValue('select value from '.$modx->getFullTableName('site_tmplvar_contentvalues').' where tmlpvarid='.$tvid.' and contentid='.$id); // Получаем значение тв
/*
...
*/
$modx->db->query('Replace into '.$modx->getFullTableName('site_tmplvar_contentvalues').'  (contentid,tmplvarid,value) values ('.$id.','.$tvid.',"'.$modx->db->escape($newValue).'")'); // где $newvalue - новое значение
Да там много что работает только через migrate
Уважаемые форумчане.

Спешим вас обрадовать новостью о запуске недорогих VDS серверов в России (Москва) с KVM виртуализацией и гарантированными ресурсами без оверселлинга. На серверах используются NVMe SSD-диски, которые в 5 раз быстрее обычных SSD. Наше собственное серверное оборудование размещается в ДЦ Selectel (Берзарина).

Возможна установка любой операционной системы (FreeBSD, CentOS, Ubuntu, Debian, BitrixVM), либо собственного ISO-образа. Также на любом тарифе можно установить собственную лицензию Windows.

RuVDS1 — 3800 MHz / 2 Gb DDR4 / 20 Gb NVMe SSD — 400 руб/мес
RuVDS2 — 2x3800 MHz / 4 Gb DDR4 / 40 Gb NVMe SSD — 800 руб/мес
RuVDS3 — 3x3800 MHz / 6 Gb DDR4 / 60 Gb NVMe SSD — 1200 руб/мес
RuVDS4 — 4x3800 MHz / 8 Gb DDR4 / 80 Gb NVMe SSD — 1600 руб/мес

Ссылка для заказа — cp.hostiman.ru/cart.php?gid=26

С уважением, Ваш хостинг-провайдер HostiMan.
Всё верно, этот актуальный — github.com/extras-evolution/Shopkeeper
  • avatar paic
  • 0
а у меня работает, только что проверил
Прошло больше чем полгодика. Решение только с моей стороны работает на десятках проектах. Жалоб пока не поступало.
  • avatar paic
  • 0
Извините, это не понял.
И если можно, чуть подробнее про это
Для фронта нужна только верстка и js
Попытку сделал, но она оказалась учебной)) Вот ymap — тот запустился сразу, но конечно, его с SG не сравнить.