Pull to refresh

Comments 5

А вариант «Реально ли это сделать вообще без Ditto» не рассматривается? :)

Если интересно, то можно посмотреть здесь modx.ru/blog/modx-adding-articles/
Рассматривается, благодарю. Посмотрю.
Добавил в статью.
На самом деле далеко не всегда хорошо использовать какие-то свои методы. Ditto — можно сказать стандарт, хребет MODx. И в разработке с использованием Ditto почти наверняка разберется другой MODx-программист. А самописка, это все таки самописка.
На самом деле с Ditto можно вытворять многое, практически не трогая его. Но все зависит от каждого конкретного случая.
Но очень многое зависит от организации документов. В данном случае, если в каталоге новостей есть папки по датам, то сами понимаете, задача упрощается.
Если документы тупо в куче, то чуть сложнее, но тоже конечно же можно. Правда лучше с Ditto работать через API modx. В данном случае я бы сделал так (в случае, если все в куче):
В Ditto есть различные форматы. В нашем случае предпочтительней формат JSON. То есть в параметрах указываем format => 'json'. Помимо конечно же указываем и другие параметры, типа кол-во просматриваемых слоев, кол-во выводимых документов и т.п.
Конечный код будет примерно такой:
$array = $modx->runSnippets('Ditto',array(
format => 'json',

));
Вот так всегда… Пишешь, и нечаянно сохраняешь…
Продолжу.
$docs = $modx->runSnippets('Ditto',array(
format => 'json',
depth => 3,
display => 10
));

В результате вы получите Объект, содержащий в формате JSON информацию по полученным документам. Только учтите, что это пока только текст. Чтобы получить реальный объект, нужно его сформировать. $ docs = json_encode($docs); Только вот в версии MODx Evolution 1.0.4 нормально работало. В более ранних версиях не достаточно правильно формировался текст и объект не инкодился, приходилось править json.format.inc.php

Примерный полученный объект (точнее часть его, в которой описаны именно документы):
[entries] => Array
(
[0] => stdClass Object
(
[title] => Концерт «Будущее детям»
[link] => [~117~]
[date] => 1285865175
[guid] => yaroslav.loc/[~117~]
[author] => Fi1osof
[description] =>
[introtext] =>
[id] => 117
[pagetitle] => Концерт «Будущее детям»
[menutitle] =>
[galeryDirPrev] => assets/images/Galery/Photo/Razdel_Vse_foto_07.09.2010.jpg
)

Для того, чтобы включить в формат дополнительные параметры, прийдется править вышеперечисленный файл.

Ну а далее дело техники. В цикле по каждому документу форматируем правильно дату и собираем многоуровневый массив.

$arr = array();

if(is_array($docs->entries) and count($docs->entries) > 0 ){
foreach($docs->entries as $doc){
$date = date('Y-m-d', $doc['date']);
!is_array($arr[$date])? $arr[$date] = array(): "";
$arr[$date][] = $doc;

}
}
Ну и дальше, думаю, сами сможете развить.

Только вот при выводе в HTML уже не плейсхолдерами пользуемся, а свойствами объектов документов, типа $doc->id и т.п.
А вот плейсхолдеры постраничности работают. То есть в конце уже выведите постраничность. [+pages+] и т.п.

Вот только данный метод не очень эффектно будет работать, если в одной дате будет больше трех документов по понятным причинам.
Sign up to leave a comment.

Articles