Создание двух страниц с помощью DocLister

Всем привет

Можно как-то без самоличных сниппетов с помощью DocLister создавать пользователем сразу две страницы?

первая страница создается в определенной папке, а вторая должна быть дочерней к первой

Спасибо

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

avatar
Да можно используя MODxAPI от DOCLISTER создавать цепочку документов.
include_once(MODX_BASE_PATH.«assets/lib/MODxAPI/modResource.php»);
$doc = new modResource($modx);

$doc->save(false, true); — вот тут два параметра, один отвечает за очистку кеша, второй за вызов цепочки событий (порядок надо посмотреть в документации). Это если с помошью плагина делать. А можно проще с помощью своего снипета.
avatar
а как в modresourse можно передать id документа, создаваемого DocLister?

я правильно понимаю:
1. вызывается DocLister, в форме из шаблона вводятся какие-то данные, они передаются в DocLister и он создает документ
2. id созданного документа передается в следующий снимет, который также создает документ, но родителем должен быть созданный документ

как вызвать второй сниппет после работы doclister?
или в создается новый плагин, который должен срабатывать после срабатывания DocLister? тогда на какое событие вешать плагин?
avatar
Или я что-то не понимаю, или DocLister не создаёт никаких документов. Вот FormLister — да.
avatar
да, вы правы, formlister, но сути это не меняет)

переозвучу вопрос — Можно как-то без самоличных сниппетов с помощью FormLister создавать пользователем сразу две страницы?
avatar
Без помощи «самоличных» нет. Нету такого там функционала.
А вот дописать свой Prepare-сниппет дело пяти минут.
В prepareAfterProcess пишешь имя сниппета, в нём что-то вроде этого:


<?php
include_once(MODX_BASE_PATH."assets/lib/MODxAPI/modResource.php");
$doc = new modResource($modx);
$id = $data['id'];

$doc->create(array(
	'pagetitle' =>  $id,
	'alias' => 'party' . $id,
	'template' => 13,
	'parent' => 7,
	'published' => $data['published'],
	'hidemenu' => $data['hidemenu'],
	'cacheable' => $data['cacheable'],	
	'...' => $data['...'],
        //короче тут параметры твои
));
$new_res_id = $doc->save(true, false);
avatar
о! вот это отлично про prepareAfterProcess. невнимательно я читал документацию

Огромное спасибо!

я правильно понимаю, что $id = $data['id'] это id созданного formlister документа?

то есть если я напишу 'parent' => $id то (если все остальное верно будет) новая страница будет дочерней в созданной FL странице?
avatar
Да, вроде бы это id созданной страницы. Но вообще var_dump($data);die; для отладки выручат отца русской демократии =)
avatar
действительно, &id это найди создаваемой страницы

я все сделал, у меня создается две страницы, но при просмотре созданного родителя вылезает ошибка sql
Execution of a query to the database failed — You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 32

подскажите, куда копать?

заранее спасибо!
avatar
Я бы копал в сторону созданного ресурса в базе. Чего там за скобочка затесалась в запрос, откуда и т.д.
avatar
в общем методом тыка я выяснил, что проблема в имени автора документа.
[!DocLister?
&parents=`[*id*]` 
&tpl=`@CODE
<div class="item">
	<img src="[+tv.price+]" class="img_preview"/>
	<div class="name">Фотограф: <b>[+user.fullname.tv.author+]</b></div>
	<div class="link"><a href="[+pagetitle+]">[+pagetitle+]</a></div>
</div>`
&tvList=`price,author`
&usertype=`web`
&userFields=`tv.author`
&extender=`user`
!]

если убрать из перечня TV автора, то все работает (ну только не выводится имя автора), как только возвращаю — ошибка SQL
при этом, в базе никаких ошибок я не нашел
имя автора у меня также добавляется в longtitle — там тоже ошибок нет
avatar
Не знаю. Дебаг выставить и смотреть запросы. У меня не бывало такого.
avatar
в вызове formlister был лишний параметр &ownerField=`author`

Спасибо Pathologic за помощь
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.