DocLister: Примеры
- Дополнения
- DocLister
- Примеры
DocLister: Примеры
Простой пример без пагинации
[!DocLister? &display=`20` &summary=`notags,len` &dateSource=`pub_date` &parents=`5` &tvList=`img,tag` &id=`lastnews` &tpl=`ListSummaryPost`!]
Выборка последних 20 документов из родителем которых является документ с ID=5.
Текст каждого документа будет подвержен дополнительной обработке классом summary с предварительным удалением html тегов и усечением длины текста до 200 +/- 50 символов. При этом в чанке будут доступны плейсхолдеры tv.img и tv.tag со значением TV параметров img и tag.
Для наглядности чанк ListSummaryPost
<div class="post"> <div class="date">[+createdon+]</div> <h3><a href="/[~[+id+]~]">[+pagetitle+]</a> </h3> <div class="tag"><span>Теги: </span> [+tv.tag+] </div> <div class="content"> <a href="/[~[+id+]~]" title="[+pagetitle+]"><img src="[+tv.img+]" /></a> <p>[+summary+]...</p> <a href="/[~[+id+]~]" title="Подробнее">Подробнее</a> </div> </div>
Использование конфигов
[!DocLister? &config=`test`!]
После чего создаем JSON файл test.json в подпапке сниппета /config/custom/ с таким содержимым:
{ "display" : "20", "summary" : "notags,len", "dateSource" : "pub_date", "parents" : "5", "tvList" : "img,tag", "id" : "lastnews", "tpl" : "ListSummaryPost" }
Результат работы этого вызова будет идентичен предыдущему примеру.
Использование лексиконов
[!DocLister? &tpl=`example` &customLang=`news`!]
После чего создаем php файл news.php с $_lang массивом в подпапке сниппета /lang/
<?php if (!defined('MODX_BASE_PATH')){die('What are you doing? Get out of here!');} $_lang = array(); $_lang['newsTitle'] = 'Последние новости'; return $_lang;
Теперь в чанке example можно использовать тег [%newsTitle%] и он автоматически будет заменен на сообщение "Последние новости".
Сложный пример с пагинацией
[!DocLister? &display=`4` &depth=`2` &tpl=`ListSummaryPost` &summary=`notags,len:500` &dateFormat=`%d.%m.%Y в %H:%M` &dateSource=`pub_date` &parents=`2` &tvList=`img,tag` &renderTV=`img` &id=`list` &showParent=`0` &addWhereList=`c.template IN (6,7)` &sortBy=`menuindex` &paginate=`pages` &TplNextP=`` &TplPrevP=`` &TplPage=`@CODE: <li><a href="[+link+]">[+num+]</a></li>` &TplCurrentPage=`@CODE: <li class="active"><a href="[+link+]">[+num+]</a></li>` &TplWrapPaginate=`@CODE: <div class="pagination"><ul>[+wrap+]</ul></div>`!] [+list.pages+]
В данном случае происходит выборка всех документов из контейнера с ID=2 с глубиной 2 и шаблонами 6 или 7. После чего будут отфильтрованы документы контейнеры (те документы внутри которых производился поиск. А именно - документ с ID=2 и все его дочерние элементы которые являются контейнерами). При выводе будет подготовлена пагинация типа page и переопределяется шаблоны для элементов пагинации на те, что указаны в параметрах TplWrapPaginate, TplCurrentPage и TplPage. Шаблоны для ссылок следующая и предыдущая будут пустыми (соответственно текст в этих элементах не будут выводиться). Ко всем плейсхолдерам сниппета DocLister добавится префикс list, а к каждому документ участвующему в выдаче прибавятся значения TV параметров img и tag в плейсхолдеры tv.img и tv.tag соответственно. TV параметр img будет отрендерен в соответствии с виджетом указанным при создании этого TV параметра. Всего на странице будет отображено по 4 документа. При этом сортировка будет произведена не по дате создания, а по menuindex (позиции в меню). В качестве источника даты будет браться дата публикации документа.
Для наглядности чанк ListSummaryPost
<div class="post"> <div class="date">[+createdon+]</div> <h3><a href="/[~[+id+]~]">[+pagetitle+]</a> </h3> <div class="tag"><span>Теги: </span> [+tv.tag+] </div> <div class="content"> <a href="/[~[+id+]~]" title="[+pagetitle+]">[+tv.img+]</a> <p>[+summary+]...</p> <a href="/[~[+id+]~]" title="Подробнее">Подробнее</a> </div> </div>
Пример вывода информации из таблицы отличной от site_content
[!DocLister? &contentField=`snippet` &sortBy=`name` &sortDir=`ASC` &display=`10` &idField=`id` &table=`site_snippets` &tpl=`snippet` &controller=`onetable` &id=`snip` &showParent=`0` &paginate=`pages`!]
Чанк snippet
<div class="row"> <div class="span12"> <h3 class="pagination-centered">[+name+]</h3> <code>[+snippet+]</code><br /> <table class="table table-striped table-bordered"> <thead> <tr><td><strong>field</strong></td><td><strong>value</strong></td></tr> </thead> <tbody> <tr><td>id</td><td>[+id+]</td></tr> <tr><td>name</td><td>[+name+]</td></tr> <tr><td>description</td><td>[+description+]</td></tr> <tr><td>editor_type</td><td>[+editor_type+]</td></tr> <tr><td>category</td><td>[+category+]</td></tr> <tr><td>cache_type</td><td>[+cache_type+]</td></tr> <tr><td>locked</td><td>[+locked+]</td></tr> <tr><td>properties</td><td>[+properties+]</td></tr> <tr><td>moduleguid</td><td>[+moduleguid+]</td></tr> </tbody> </table> </div> </div> <hr />
В данном примере информация будет выводиться из таблицы site_snippets. В качестве колонки PrimaryKey выступает поле id. Сортировка происходит по возрастанию значений в колонке name.