Личный кабинет на FL, массовое редактирование, редактирование в чанке.

Добрый день.
Есть на сайте личный кабинет, сделанный на FormLister'е и соответственно, со всеми страницами с формами Добавить, Редактировать, Удалить документы.
И есть в личном кабинете список документов, которые конкретный веб-пользователь уже добавил на сайт, например:


[!DocLister? &tvPrefix=`` &display=`30` &filters=`AND(tv:aid:is:[!userId!])` &prepare=`imgformat,priceformat` &tvImg=`img` &phpthumb=`w=123,h=100,zc=1,bg=ffffff` &depth=`3` &parents=`2` &dateFormat=`%d.%m.%Y в %H:%M` &dateSource=`createdon` &orderBy=`id DESC` &tvList=`img,price,nalichie` &addWhereList=`template=24` &id=`cat` &paginate=`pages` &pageLimit=`1` &pageAdjacents=`1` &tpl=`@CODE:
<div class="product-item pub[+published+]">
	<div class="product-item-img">
		<a href="[+url+]"><img src="[+thumb+]" alt="[+pagetitle+]"></a>
	</div>
	<div class="product-item-desc">
		<h6><a href="[+url+]">[+pagetitle+]</a></h6>
		<span>[+date+]</span> / [+nalichie+]
		<span class="price">[+price_format+] руб</span>
		<a href="[~25~]?id=[+id+]">[ Редактировать ] </a>
		<a href="[~13~]?id=[+id+]">[ Удалить ] </a>
		<a href="[+url+]" target="_blank">[ Смотреть ] </a>
	</div>
</div>`
......
!]

Сейчас чтобы поменять любое незначительное состояние, например:
— публиковать/отменить публикацию
— продажа/снять с продажи (это TV «nalichie»)
нужно открывать каждый отдельный документ в форме редактирования (а она может быть не маленькая) и вносить изменения там.

А хотелось бы вносить такие простые изменения прямо в списке анонсов (в чанках).

Или массовые изменения — отметил в нужных анонсах чекбоксы или радиокнопки, потом нажал одну кнопку (над или под списком) и во все выбранные документы внеслись соответствующие изменения.

Аналогично и для удаления документов.

Как можно такое сделать?

Спасибо.

6 комментариев

avatar
Хотя бы — в какую сторону смотреть.
avatar
Отправляйте данные на страницу обработки формы аяксом, заполнив предварительно все поля существующими значениями из базы (упаковав из в параметр ajax-запроса в json), и поменяв только те, для которых вывели поля для редактирования.

Либо можете сделать отдельный обработчик формы, не доступный для пользователей, принимающий только ajax, и в зависимости от того, что отредактировал пользователь — менять в базе только эти параметры.
Комментарий отредактирован 2019-07-22 19:45:51 пользователем Dreamer
avatar
Спасибо.
Аякс, конечно, хорошо… но у меняя это займет много времени(( Поэтому сделал проще:
1. В чанк добавил инпут
<input type="checkbox" name="sale[]" title="Продать" value="[+id+]">

2. Вызов DocLister обернул в форму с кнопкой «Выполнить»
3. Сниппет, в котом из $_POST['sale'] вытягиваю список ids и по нему update нужную таблицу.

Может топорно, но просто и работает)
avatar
не мог бы поделиться вызовом doclister для редактирования созданных документов?

и код сниппета userId

Заранее спасибо
avatar
Так я уже поделился, в топике вызов написан (кроме пагинации), а userId
return $modx->getLoginUserID();

И DL не редактирует документы. В чанке стоит ссылка на страницу редактирования, и по ней переход на страницу с формой редактирования на FL, делился здесь
modx.im/blog/5798.html
avatar
спасибо!
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.