Поддержать Проект

Обратная связь

[MODX] Guru
  • Информация
  • Разработчикам
  • Дополнения
    • DocLister
      • Параметры выборки
      • Обработка данных перед выводом
      • Вывод данных
      • Фильтры
      • Лексиконы
      • Примеры
      • Отладка
      • Разработчикам
      • MODxAPI
    • DLMenu
    • DLCrumbs
    • DLBuildMenu
    • DLLastViews
    • DLSiblings
    • DLRequest
    • DLglossary
    • DLSitemap
    • DocInfo
    • FormLister
    • Wayfinder
    • phpthumb
    • LikeDislike
    • eForm
    • Ditto
    • multiTV
    • AjaxMegaSearch
    • AjaxSearch
    • WebLoginPE
    • Breadcrumbs
    • CodeMirror
    • AnythingRating
    • Easy Newsletter
    • FirstChildRedirect
    • OpenGraphTags
    • ddTypograph
    • TagSaver
    • BlackList
    • CfgTv
    • ModxAccount
    • Forgot Manager Login
    • GetField
    • if
    • Jot
    • ListChild
    • ListIndexer
    • ManagerManager
    • ddMMEditor
    • MaxiGallery
    • MemberCheck
    • ddGetMultipleField
    • MetaX
    • MODxBB и phpBB
    • Yams
    • Personalize
    • PHx
    • Reflect
    • tagLinks
    • TransAlias
    • TvTagCloud
    • UltimateParent
    • WebSignup
    • WebLogin
    • countViews
    • thumb
    • imageCaptor
    • optimizeJPG
    • Preview Next
    • Shopkeeper
    • SiteMap
    • Sass
    • Selector
    • SimpleGallery
    • SimpleTube
    • SimpleFiles
    • Star Rating
    • MinifyX
    • adminNav
    • SimplePolls
    • CResource
    • MODxAPI
    • customTables
    • HtmlInLine
    • HtmlMinModxEvo
    • SHKUserProfile
    • PickDocsInTree
    • evoSearch
    • editDocs
    • PageBuilder
    • HybridAuth
    • Compare
    • alterTitle
  • Виджеты
  • Уроки
  • Разработчики
  • Готовые примеры
  • Блог
  • Конфиги
  • HTML коды
© [MODX] Guru
  • DocLister

DocLister: Примеры

  • Дополнения
  • DocLister
  • Примеры
15235

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.