M-Blog

DocListerで記事の一覧

DocListerをDittoの代わりに使ってみよう

フォーラムによると、「Dittoの代替として使えます。軽い動作・柔軟性の高さが特長です。」ということなので、使ってみます。おそらく解説がロシア語ということがハードルの高さなのかな?私はロシア語もPHPもMySQLも詳しくないので、説明に間違いがあるかもしれません。実力としてはhtmlがちょっと読めるくらいの程度です(わからなくてもどうにかなるのがMODXの良いところ)。

さて、こちらにDittoとの比較が掲載されています。なんかは良い感じらしいことを書いてるのでしょう。

DocListerのダウンロード

まずはDocListerのサイトにファイルとインストールの方法が書いてあります。ダウンロードはGitHubからもできます。

DocListerのインストール

ダウンロードしたファイルの中には、スニペットやプラグインなどたくさんのファイルがあります。
しかし今回はDocListerだけが使えたらよいのです。

展開したディレクトリにある「assets」ディレクトリに、「lib」ディレクトリと「snippets」ディレクトリがあります。
FTPソフトなどを使って、「snippets」の中にある「DocLister」と「lib」ディレクトリとをアップロードします。

アップロードするディレクトリアップロード先
assets/lib assets
assets/snippets/DocLister assets/snippets

次にDocListerのスニペットを新規作成します。

「install/assets/snippets」の中にDocLister.tplがありますので、その中身を
管理画面から「エレメント」→「エレメント管理」→「スニペット」→「スニペット作成」にある、スニペットコードの中に貼り付けます。

return require MODX_BASE_PATH.'assets/snippets/DocLister/snippet.DocLister.php';

https://modx.mblo.info/content/images/blog/use-snippet-doclister/doclister-install.png

これでインストールは完了です。

DocListerのパラメータ


2016年5月13日追記:MODX Evolution1.1への採用に伴い英語のドキュメントができています。(https://rtfm.modx.com/extras/evo/doclister/


スニペット全般の使い方として言えることですが、表示させたい箇所に[[DocLister]]か[!DocLister!]と書き、後は必要に応じてパラメータを設定します。

同様にパラメータもDocListerのサイトに書いています。Google先生に聞けばある程度わかります。パラメータの種類はおおよそDittoと似ていますが、それでも少しは違いがありますので、高い頻度で使いそうなものをメモっておきます。

親リソースを指定して記事一覧を出力する

[[DocLister?
&parents=`リソースID,リソースID`
&depth=`0`]]

指定がない場合は現在のリソースIDです。「&depth=`数字`」で階層を指定できます。

リソースを指定して記事を出力する

[[DocLister?
&documents=`リソースID,リソースID`]]

「&idType=`documents`」または「&idType=`parents`」を書くことで出力方法を変更できますが、documentsパラメータかparentsパラメータを書くこと自動的に変更されるので省略できます。

並び順を指定する

[[DocLister?
&parents=`リソースID`
&sortType=`other`
&orderBy=`c.id DESC`]]

「&sortType」はデフォルト(指定しない場合)で「other」になっています。「none」を指定すると自動で並びます。「doclist」を指定するとスニペットに読み込まれた順で並ぶようです。自分で指定する場合は「other」が良いでしょう。

「&orderBy=`c.id DESC`」の他に「&sortBy=`id`&order=`DESC`」でも指定できます。orderByもsortByもSQLで指定する文字列です。
ランダムで表示する場合は「&orderBy=`RAND()`」にします。リソース変数(site_content)から使用する場合、プレフィックスとして「c.」をつけることが望ましいようです。カンマ(,)区切りで複数指定可能です。

データフォーマットの指定

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

テンプレートを指定する

[[DocLister?
&parents=`リソースID`
&ownerTPL=`@CODE:<ul>[+dl.wrap+]</ul>`
&noneWrapOuter=`0`
&noneTPL=`@CODE:<p>記事はありません。</p>`
&tpl=`@CODE:<li class="[+dl.class+]">[+title+]</li>`
&tplFirst=`@CODE:<li class="[+dl.class+]">[+title+]</li>`
&tplLast=`@CODE:<li class="[+dl.class+]">[+title+]</li>`
&tplCurrent=`@CODE:<li class="[+dl.class+]">[+title+]</li>`]]

もちろんチャンクで指定(&tpl=`chunk.name`)もできます。「&noneWrapOuter」を「0」に指定すると「&ownerTPL」で指定したテンプレートは出力されません([+dl.wrap+]のみになる?)。「&noneTPL」で記事がない場合の出力を指定できます。

コードに「[+dl.wrap+]」とありますが、これは例えば「&syskey=`text`」と指定することで「[+text.wrap+]」にすることができます。また「[+dl.class+](first,current,last,even,oddのクラスを追加)」や「[+dl.active+](出力されているものが現在のページであれば1(true)そうでないなら0)」も同様に変わるので注意が必要です。

テンプレートパラメータの指定

チャンクで指定できますが、@Bindingsも使用できます。

項目説明
@FILE assets/templates内のhtmlファイルを読み込む
@CHUNK チャンクを読み込む
@TPL
@CODE
インラインで使用できる
@DOCUMENT
@DOC
リソースの内容から読み込む
@PLH
@PLACEHOLDER
プレースホルダーから読み込む
@CFG
@CONFIG
@OPTION
グローバル設定から読み込む
その他 extenderは工事中

参考:http://blog.agel-nash.ru/addon/doclister.html

プレースホルダー

お馴染みの[+title+]、[+url+]、[+date+]などが使えます。[+interarion+]は表示しているページのアイテムに連番(1から始まる)を振ります。

概要を使う

[[DocLister?
&documents=`リソースID`
&summary=`tags:0,len:300`
&tpl=`@CODE:<p>[+title+]<br />[+summary+]</p>`]]

「summary」に特定のリソース変数を指定する場合は、「&introField=`任意のリソース変数`」を指定すると変わります。設定は「&summary=`アクション:設定,アクション2:設定`」というように書きます。

テンプレート変数を使う

[[DocLister?
&parents=`リソースID`
&tvList=`テンプレート変数1,テンプレート変数2,テンプレート変数3`
&tpl=`@CODE:<li><a href="[+tv.テンプレート変数1+]">[+title+][+tv.テンプレート変数2+]([+tv.テンプレート変数3+])</a></li>`
&ownerTPL=`@CODE:<ul>[+dl.wrap+]</ul>`]]

「&tvList」に使用したいテンプレート変数をカンマ区切りで指定します。後は[+tv.テンプレート変数+]というように、テンプレート変数のプレフィックスとして「tv.」を付けます。

フィルターを使う

[[DocLister?
&parents=`リソースID`
&filters=`tv:テンプレート変数1:is:値`
&tvList=`テンプレート変数1,テンプレート変数2,テンプレート変数3`
&tpl=`@CODE:<li><a href="[+tv.テンプレート変数1+]">[+title+][+tv.テンプレート変数2+]([+tv.テンプレート変数3+])</a></li>`
&ownerTPL=`@CODE:<ul>[+dl.wrap+]</ul>`]]

フィルターにはテンプレート変数を使います。複数指定する場合は、「OR(tv:テンプレート変数1:is:値;tv:テンプレート変数2:like:値)」や「AND(tv:テンプレート変数1:is:値;tv:テンプレート変数2:like:値)」と指定します。リソース変数を使う場合は、「content:pagetitle:is:値」など。

演算子 説明
=
is
eq
値と一致するもの
例1 content:c.id:is:3
例2 tv:テンプレート変数:is:MODX
!=
no
isnot
値と一致しないもの
例1 content:c.id:no:3
例2 tv:テンプレート変数:no:MODX
>
gt
値より大きいもの
例1 content:c.menuindex:gt:3
例2 tv:テンプレート変数:gt:3
<
lt
値より小さいもの
例1 content:c.menuindex:lt:3
例2 tv:テンプレート変数:lt:3
<=
elt
値以下のもの
例1 content:c.menuindex:elt:3
例2 tv:テンプレート変数:elt:3
>=
egt
値以上のもの
例1 content:c.menuindex:egt:3
例2 tv:テンプレート変数:egt:3
%
like
値を含むもの
例1 content:c.content:like:MODX
例2 tv:テンプレート変数:like:MODX
like-r 値で始まるもの
例1 content:c.content:like-r:MO
例2 tv:テンプレート変数:like-r:MO
like-l 値で終わるもの
例1 content:c.content:like-l:DX
例2 tv:テンプレート変数:like-l:DX
regexp 値が正規表現で一致するもの
例1 content:c.pagetitle:regexp:MODX
例2 tv:テンプレート変数:regexp:MODX
against 値がフルテキストインデックスに含まれるもの
例1 content:pagetitle,description,content:against:MODX
例2 tv:values:against:MODX
containsOne いずれかの値を含むもの
例1 content:c.content:containsOne:MODX,CMS
例2 tv:テンプレート変数:containsOne:MODX,CMS
in いずれかの値に一致するもの
例1 content:c.pagetitle:in:MODX,CMS
例2 tv:テンプレート変数:in:MODX,CMS
notin いずれかの値に一致しないもの
例1 content:c.pagetitle:notin:MODX,CMS
例2 tv:テンプレート変数:notin:MODX,CMS

againstはフルテキストインデックスに内包されているものを選択しなければならないので、modx_site_contentテーブルを検索する場合は「pagetitle,description,content」を一緒に指定しないとエラーになります。modx_site_tmplvar_contentvaluesテーブルを検索する場合は「values」のみです。他のものから検索しようとするとエラーになります。

WHERE句を使う

addWhereListを使用します。

[[DocLister?
&parents=`リソースID`
&addWhereList=`c.hidemenu=0 AND c.isfolder=0`]]

SQLのWHEREで指定する文字列になるようです。
リソース変数で指定することで出力するものを制御できます。

&filtersと&addWhereListを組み合わしてみる

各エントリーに関連記事を表示します。

例:同一カテゴリーで現在の記事以外をランダムに表示(条件付きGETを有効にしている場合はランダム表示を更新しません)

[!DocLister?
&id=`related`
&parents=`親リソースID`
&filters=`tv:カテゴリー:is:[*カテゴリー*]`
&addWhereList=`c.id<>[*id*]`
&display=`5`
&orderBy=`RAND()`
&ownerTPL=`@CODE:<ul>[+dl.wrap+]</ul>`
&tpl=`@CODE:<li><a href="[+url+]">[+title+]</a></li>`
&noneWrapOuter=`0`
&noneTPL=`@CODE:<p>関連する記事はありません。</p>`!]

「&filters」だけで制御するには、「AND(tv:カテゴリー:is:[*カテゴリー*];content:c.id:isnot:[*id*];)」にすると同様の結果になります。

ページネーション

[[DocLister?
&parents=`リソースID`
&id=`text`
&paginate=`pages`
&display=`5`
&tvList=`テンプレート変数1,テンプレート変数2,テンプレート変数3`
&tpl=`@CODE:<li><a href="[+tv.テンプレート変数1+]">[+title+][+tv.テンプレート変数2+]([+tv.テンプレート変数3+])</a></li>`
&ownerTPL=`@CODE:<ul>[+dl.wrap+]</ul>`
&pageAdjacents=`4`
&PrevNextAlwaysShow=`1`
&TplNextP=`@CODE:<a href="[+link+]">次へ</a>`
&TplNextI=`@CODE:<a href="[+link+]" class="disabled">次へ</a>`
&TplPrevP=`@CODE:<a href="[+link+]">前へ</a>`
&TplPrevI=`@CODE:<a href="[+link+]" class="disabled">前へ</a>`
&TplPage=`@CODE:<a href="[+link+]" class="page">[+num+]</a>`
&TplCurrentPage=`@CODE:<b class="current">[+num+]</b>`
&TplWrapPaginate=`@CODE:<div class="[+class+]">[+wrap+]</div>`
&PaginateClass=`class`]]
[+text.totalPages+][+text.isstop+][+text.isstart+][+text.pages+]

ページネーションを表示するには、「&id」を任意の文字列で指定します。そして表示したい場所に[+指定したid.pages+]と書きます。テンプレートやクラスの指定もできます。その他のパラメータも「[+指定したid.totalPages+](総ページ数)」「[+指定したid.isstop+](現在のページが最後なら1そうでなければ0)」「[+指定したid.isstart+](現在のページが最初なら1そうでなければ0)」に変わるので注意してください。「TplNextI」と「TplPrevI」はページがない場合のテンプレートです。「PrevNextAlwaysShow」を「0」にすれば非表示になります。Dittoと違い、最初のページに戻るときにはURLの「?〜」がなくなります。ページ数が増えてきたら、「&pageAdjacents=`数字`」を指定することで、間の数字は「...」で省略されて表示されるようになります。

「&display=`数字`」を指定することで、1ページごとの表示件数の変更もできます。

デバッグ

[[DocLister?
&parents=`リソースID`
&debug=`1`]]

デフォルトでは「0」になっています。デバッグのレベルは「1」か「2」で、「2」の方がより詳細が表示されます。

まとめ

MODX自体も日本語ドキュメントが少なかったり古かったりしますが、DocListerはこれで自分で使う分には困らない程度にめぼしい物をまとめられた気がします。ロシア語なのでとっつきにくいですが、やっていくうちになんとかなるでしょう。extenderなど他にもパラメータはありますので、これから使う人はDocListerのサイトを見てがんばってください。わかったことは適宜変更・追記していきます。

保留中のパラメータ

  • api
  • controller
  • extender
  • tree
  • prepare
  • contentPlaceholder
  • lang
  • locale
  • JSONformat
  • offset
  • start
  • total
  • config
  • customLang
  • filter_delimiter
  • showParent
  • queryLimit
  • tagsDate
  • tabel
  • idField
  • parentField
  • introField
  • contentField
  • pageLimit

© 2015 - 2021 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