M-Blog

DocListerで記事の一覧 モディファイア編

前回DocListerについて書いて、まさかまた書くとは思っていなかったけれども、モディファイアの使い方がわかったので紹介します。なんでか前回のときは使えなかった(よくわかっていなかった)ので断念していました。ドキュメントも英語版が作られたので、今後は情報がもっと増えることに期待しています。

まずは参考に、

ダウンロードはMODX公式からおこないます。DocListerはMODX Evolution 1.1に導入されることになりました。展開したディレクトリ内にあるassets/lib ディレクトリとassets/snippets/DocLister ディレクトリを自分のMODXにコピーしてきます。そしてinstall/assets/snippets/DocLister.tplの中身をコピーしてスニペットコードに貼り付けます。スニペットの作成・インストールについてはこちらを参照してください。

DocLister.tpl

//<?php
/**
* DocLister
*
* Snippet to display the information of the tables by the description rules. The main goal - replacing Ditto and CatalogView
*
* @category snippet
* @version 2.1.30
* @license http://www.gnu.org/copyleft/gpl.html GNU Public License (GPL)
* @internal @properties
* @internal @modx_category Content
* @internal @installset base, sample
*/ return require MODX_BASE_PATH.'assets/snippets/DocLister/snippet.DocLister.php';

DocListerの書き方

[[DocLister?
&parents=`リソースID`
&dateSource=`pub_date`
&dateFormat=`%y年%m月%d日 %H:%M`
&tpl=`@CODE:<h1>[+title+]([+date+])</h1><p>[+content:limit='300'+]</p>`]]
[[DocLister?
&parents=`リソースID`
&dateSource=`pub_date`
&dateFormat=`%y年%m月%d日 %H:%M`
&tpl=`DLpost.item`]]

チャンク:DLpost.item

<h1>[+title+]([+date+])</h1><p>[+content:limit=`300`+]</p>

使用できるモディファイアは、assets/snippets/DocLister/lib/DLphx.class.phpを確認してください。またDocLister内蔵のモディファイアのため、オプションは従来の記述法([+phx:modifier=`オプション`+])で書きます。MODX Evolution日本語版の最近追加された記述法([+phx:modifier(オプション)+])では認識されません。&tpl=`@CODE:`でモディファイアのオプションを記述する際に同じクォートで入れ子にならないように注意が必要です。クォートなしの他に使用できるクォートは、「"」「'」「`」の三つです。

カスタムモディファイア

作成自体は日本語版と同じです。スニペットにphx:モディファイア名で、スニペットコードに処理を書きます。
変数は$outputに代入されます。$valueでないことに注意しましょう。オプションについては不明なので、スニペットコードに直接書くようにします。

例えばsummaryモディファイアを使用する場合、DocListerに内蔵されていないので次のように追加します。モディファイア名は誤作動防止のためにDocListerとMODXに内蔵されているものを避けます。

スニペット名

phx:dlsummary

スニペットコード

$value = $output;  //追加
$opt = '300,。'; //追加
//以下、manager/includes/extenders/modifiers/mdf_summary.inc.phpからコピー if(strpos($opt,',')) list($limit,$delim) = explode(',', $opt); elseif(preg_match('/^[1-9][0-9]*$/',$opt)) {$limit=$opt;$delim='';} else {$limit=100;$delim='';} if($delim==='') $delim = $modx->config['manager_language']==='japanese-utf8' ? '。' : '.'; $limit = intval($limit); $content = $modx->filter->parseDocumentSource($value); $content = strip_tags($content); $content = str_replace(array("\r\n","\r","\n","\t",' '),' ',$content); if(preg_match('/\s+/',$content)) $content = preg_replace('/\s+/',' ',$content); $content = trim($content); $pos = $modx->filter->strpos($content, $delim); if($pos!==false && $pos<$limit) { $_ = explode($delim, $content); $text = ''; foreach($_ as $v) { if($limit <= $modx->filter->strlen($text.$v.$delim)) break; $text .= $v.$delim; } if($text) $content = $text; } if($limit<$modx->filter->strlen($content) && strpos($content,' ')!==false) { $_ = explode(' ', $content); $text = ''; foreach($_ as $v) { if($limit <= $modx->filter->strlen($text.$v.' ')) break; $text .= $v . ' '; } if($text!=='') $content = $text; } if($limit < $modx->filter->strlen($content)) $content = $modx->filter->substr($content, 0, $limit); if($modx->filter->substr($content,-1)==$delim) $content = rtrim($content,$delim) . $delim; return $content;

これでDocListerで使うテンプレートに[+content:dlsummary+]と書くだけです。

以下サンプルに、当ブログで使用しているものを書いておきます。フレームワークのUIkitを使っているので、classはそれに準じて記述されています。

記事一覧(ホーム)

[[DocLister?
&id=`entry`
&parents=`リソースID`
&tvList=`アーカイブ,タグ,カテゴリー,アイキャッチ`
&depth=`1`
&paginate=`pages`
&display=`10`
&orderBy=`c.publishedon DESC`
&dateFormat=`%m月%d日`
&noneWrapOuter=`0`
&ownerTPL=`@CODE:[+dl.wrap+]`
&tpl=`DLpost.item`
&pageAdjacents=`4`
&PrevNextAlwaysShow=`1`
&TplNextP=`@CODE:<li><a href="[+link+]">次へ</a></li>`
&TplNextI=`@CODE:<li class="uk-disabled"><span>次へ</span></li>`
&TplPrevP=`@CODE:<li><a href="[+link+]">前へ</a></li>`
&TplPrevI=`@CODE:<li class="uk-disabled"><span>前へ</span></li>`
&TplPage=`@CODE:<li><a href="[+link+]">[+num+]</a></li>`
&TplCurrentPage=`@CODE:<li class="uk-active"><span>[+num+]</span></li>`
&TplWrapPaginate=`@CODE:<ul class="[+class+]">[+wrap+]</ul>`
&PaginateClass=`uk-pagination`]]
[+entry.pages+]

記事一覧(カテゴリー・タグ・アーカイブ)

[[DocLister?
&id=`entry`
&parents=`リソースID`
&tvList=`アーカイブ,タグ,カテゴリー,アイキャッチ`
&filters=`tv:[*parent:pagetitle*]:like:[*id*]`
&depth=`1`
&paginate=`pages`
&display=`10`
&orderBy=`c.publishedon DESC`
&dateFormat=`%m月%d日`
&noneWrapOuter=`0`
&ownerTPL=`@CODE:[+dl.wrap+]`
&tpl=`DLpost.item`
&pageAdjacents=`4`
&PrevNextAlwaysShow=`1`
&TplNextP=`@CODE:<li><a href="[+link+]">次へ</a></li>`
&TplNextI=`@CODE:<li class="uk-disabled"><span>次へ</span></li>`
&TplPrevP=`@CODE:<li><a href="[+link+]">前へ</a></li>`
&TplPrevI=`@CODE:<li class="uk-disabled"><span>前へ</span></li>`
&TplPage=`@CODE:<li><a href="[+link+]">[+num+]</a></li>`
&TplCurrentPage=`@CODE:<li class="uk-active"><span>[+num+]</span></li>`
&TplWrapPaginate=`@CODE:<ul class="[+class+]">[+wrap+]</ul>`
&PaginateClass=`uk-pagination`]]
[+entry.pages+]

DLpost.item

<article class="uk-article">
<h1 class="uk-article-title">
<a href="[+url+]">[+title+]</a></h1>
<p class="uk-article-meta">
<i class="uk-icon uk-icon-calendar"></i> [+tv.アーカイブ:dlcategory+][+date+] / <i class="uk-icon uk-icon-folder-o"></i> [+tv.カテゴリー:dlcategory+] / <i class="uk-icon uk-icon-tags"></i> [+tv.タグ:dlcategory+]</p>
<div class="uk-grid">
<div class="uk-width-1-1 uk-width-medium-1-3">
<a href="[+url+]" class="uk-thumbnail"><img src="assets/plugins/timthumb/tt.php?src=[+tv.アイキャッチ:ifempty=`[+content:dlgetimage+]`:ifempty=`content/images/website/noimage.jpg`+]&amp;q=70&amp;w=260&amp;h=160" alt=""></a>
</div>
<div class="uk-width-1-1 uk-width-medium-2-3">
</p>[+content:dlsummary+](<a href="[+url+]">続きを読む</a>)</p>
</div>
</article>

関連記事一覧

[!DocLister?
&parents=`リソースID`
&depth=`1`
&display=`5`
&orderBy=`RAND()`
&dateFormat=`%m月%d日`
&filters=`AND(tv:カテゴリー:is:[*カテゴリー*];content:c.id:no:[*id*];)`
&noneWrapOuter=`0`
&ownerTPL=`@CODE:<ul class="uk-list uk-list-line">[+dl.wrap+]</ul>`
&tpl=`@CODE:<li><a href="[+url+]">[+title+]</a></li>`
!]

© 2015 - 2020 M-Blog. Powered by MODX.

(URL:https://modx.mblo.info/,E-mail:info@mblo.info)

ブログについて
MODX Evolutionを使ってブログをしています。基本的にはまとめ、チートシートのメモなど、他にも日常のことをぼちぼち書いています。

コンテンツ
ブログ
MODXまとめ
MODXチートシート

動作環境
このブログはで運用しています。
・Apache 2.2.31
・OS Free BSD
・PHP 7.1.33
・MySQL 5.5.38
・MODX 1.0.22J-beta1

ブログ更新通知
RSS | ATOM

まとめ更新通知
RSS | ATOM

フィードバック

お問い合わせ
Twitter