MODxでCMSの恩恵を賜りつつ、validを保ち、かつWEB標準化を目指そう
Welcome !! Now 2008.07.25 16:19 (JST)
Dittoは、様々な形式で、ドキュメントの一覧を出力するスニペットです。
ドキュメントにタグを挿入したり、カテゴリページを作ったり、ブログやニュース形式でページを作ったり出来ます。
rss feed、xmlなども出力出来ます。マルチ言語対応。
コンフィギュレーションファイルをサポート、簡潔なスニペットコールで表現できます。
参照ページ:Ditto Support Site
※現在2.1betaは、RSS出力でエラーが出るバージョンがあります※
rss.format.inc.php の以下を
<?xml version="1.0"
encoding="[+rss_charset+]" ?>
↓
<?xml version="1.0"
encoding="UTF-8" ?>
とかにして、しのいでますが、なぜなんでしょうか。2.02では問題がないようです。
このページは、Ditto 2.x系の解説です。Ditto 1.x系の解説はこちらになります。
MODx 0.9.6 を新規にインストールした場合は、はじめからDitto 2.x系が同梱されています。こちらの解説をご覧下さい。
MODx 0.9.5 以前にはDitto 1.xが同梱されています。0.9.5から0.9.6 へインストールすると、Dittoは2.xにアップグレードされます(強制的に…笑)。
MODx 0.9.5 へももちろんDitto 2.xを導入することができます。
Ditto 1.x系から2.x系へアップグレードされた方、またはその予定の方は、まず、Ditto 2.x と 1.x の違いをご参照下さい。
Ditto 2.x では、「ditto_base」パラメータで、ditto の外部リソースファイルの場所を指定できるので、2.x系 ditto のリソースを「ditto21b」などのフォルダに格納し、スニペット名も「ditto21b」などとすることで、旧バージョンとの混在が可能です。
[[Ditto? &parents=`54,70`]]
または
[!Ditto? &parents=`54,70`!]
目次パラメータ(セッティングと拡張)Ditto の外部リソースの場所を指定します。デフォルトは以下です。
[(base_path)]assets/snippets/ditto/
インスタンス:&ditto_base=`assets/snippets/ditto21b/`
※このパラメータは「コンフィギュレーションファイル」に含めることはできません※
ユニークIDを指定します。「Reflect」スニペットで、アーカイブを出力する場合にこのIDを利用します。1ページに複数個のDitto を設置する場合にも有効です。
また、Ditto でページ分割する場合、ページナビゲーション関係のプレイスホルダにもこのIDが必要になります(「Ditto でページ分割する場合」参照)。
デフォルト「ブランク("")」。
このパラメータは「コンフィギュレーションファイル」の中で指定できません。
言語ファイルを指定します。デフォルト「english」。言語ファイルは、「lang」フォルダー下に格納されています。日本語の言語ファイルは、「japanese-utf8.inc.php」になります。以下のように指定します。
&language=`japanese-utf8`
または、必要であれば、eucでファイルを作り、指定します。
尚、2.1BATAには、日本語ファイルは含まれていません。MODx0.9.6 に同梱のDitto2.01 に含まれています。
Ditto 1.x の時と同じように、Ditto スニペットの以下の部分を修正することも可能です。
*/
$language = (isset($language))? $language : "english";
/*
↓
*/
$language = (isset($language))? $language : "japanese-utf8";
/*
出力フォーマットを指定します。以下を指定できます。デフォルト「html」。
コンフィギュレーションファイルを使うを参照してください
デバックインフォメーションを出力するかどうかを指定します。デフォルト「しない(0)」。
※このパラメータを「コンフィギュレーションファイル」で「1」にセットすることはできません※
PHx ファンクションを利用するかどうかを指定します。デフォルト「する(1)」。
※PHx ファンクションはDitto の外部リソースに含まれていますので、別途PHxプラグインを導入する必要はありません。
後述のextendersを参照してください。
Ditto オブジェクト及び結果を他のスニペットで利用できるように、プレイスホルダに代入するかどうかを指定します。デフォルト「しない(0)」。以下を指定できます。
ちょっと意味がわかりません。。
取得するコンテンツから、取り去るチャンクを指定します。カンマで区切って複数指定可能です。
一般的には、「NewsPublisher」による投稿によって付加された「comment」チャンクを取り去るために利用します。
取得したいドキュメント群の親ドキュメントをIDで指定します。デフォルト「カレントドキュメント」。カンマで区切って複数指定可能です。
「メニューに表示・非表示」に関係なく、公開ドキュメントをすべて取得します。また、ここで指定したドキュメントが非公開であってもその下のドキュメントが公開されていれば表示します。
取得する階層は、「1階層」です(「depth」を参照)。
取得したいドキュメントのIDを指定します。デフォルト「なし」。カンマで区切って複数指定可能です。
「メニューに表示・非表示」に関係なく、公開ドキュメントをすべて取得します。
「documents」を指定すると「parents」で指定した値は無効になります。
何階層まで取得するかを「1」以上の整数で指定します。デフォルト「1」。「1」以上の整数以外を指定するとすべての階層を取得します。
プレイスホルダ[+date+]の表示形式を指定します。phpのstrftime関数の値を利用できます。デフォルト「言語ファイルから読み込み($_lang['dateFormat'])」。
以下のようにパラメータの値に2バイト文字を含めると出力結果が文字化けします。
dateFormat=`%Y年%m月%d日 %R`
これは、「classes/ditto.class.inc.php」の950行目付近を以下のようにするとことで回避できます。
function formatDate($dateUnixTime, $dateFormat) {
global $modx;
$dt = strftime($dateFormat, (intval($dateUnixTime) + $modx->config["server_offset_time"]));
if ($modx->config["modx_charset"] == "UTF-8") {
$dt = utf8_encode($dt);
}
return $dt;
}
↓
function formatDate($dateUnixTime, $dateFormat) {
global $modx;
$dt = strftime($dateFormat, (intval($dateUnixTime) + $modx->config["server_offset_time"]));
// if ($modx->config["modx_charset"] == "UTF-8") {
// $dt = utf8_encode($dt);
// }
return $dt;
}
3行をコメント行にして無効にします(MODxフォーラム内関連トピ)。
取得したドキュメントのうち、何件表示するかを指定します。デフォルト「3」。「all」を指定するとすべてのドキュメントを表示します。
何件取得するかを指定します。デフォルト「すべて(all)」。
公開ドキュメントのみを表示対象するかどうかを指定します。デフォルト「はい(1)」。非公開ドキュメントも表示対象にしたい場合「0」を指定します。
メニューに表示しているドキュメントのみを表示対象とするかどうかを指定します。デフォルト「いいえ(0)=メニューに非表示ドキュメントも表示」。
メニューに表示していないドキュメントはDittoの表示対象から外したい場合は「1」を指定します。
フォルダ(親ドキュメント)を表示対象から外すかどうかを指定します。デフォルト「外さない(0)=表示する」。
「private」ドキュメントを表示対象から外すかどうかを指定します。デフォルト「外す(1)=表示しない」。
「hideFolders」が「1」で「depth」が「1」より大きい場合、非公開親ドキュメントの子ドキュメントを表示するかどうかを指定します。デフォルト「する(1)」。
※ドキュメントではデフォルト「しない(0)」になっていますが、デフォルトは「する(1)」です※
挙動がちょっとわかりづらいのですが以下のようになります。
document A(15) --- published └document B(16) --- published └document C(17) --- unpublished └document D(18) --- published
[!Ditto? &parents=`15` &depth=`2`!][!Ditto? &parents=`15` &depth=`2`
&seeThruUnpub=`0`!][!Ditto? &parents=`15` &depth=`2`
&seeThruUnpub=`0` &hideFolders=`1`!]と、いうように、単に親が非公開ドキュメントという条件だけでは、「seeThruUnpub=`0`」は、機能しません。
昇順でソートするか降順でソートするかを指定します。デフォルト「降順(DESC)」。昇順にする場合は「ASC」です。
ソートの基準になるフィールドを指定します。すべてのドキュメントオブジェクトまたはテンプレート変数を指定できます。デフォルト「作成日(createdon)」。
出力順序をランダムに変更するかどうかを指定します。デフォルト「しない(0)」
表示する際のオフセット値を指定します。1、2件目は表示せず、3件目から表示したいなら「2(= 2件スキップする)」を指定します。デフォルト「なし(0)」。
プレイスホルダ[+date+]のソースを指定します。unix タイムスタンプを持つすべてのMODx フィールドや、以下のような テンプレート変数を指定できます。
デフォルト「createdon」。
関連するキーワードを、それぞれのドキュメントのために取得するかどうかを指定します(ウソかも)。「tagData」や[+keywords+]のソースにできます。
※「keywords=`1`」にしてテンプレートに[+keywords+]を書いても表示されず。使い方間違ってる?METAタグとキーワードで設定したキーワードが入るんじゃないの?※
データベースから何件取得するかを指定します。MySQL の LIMIT と同等です。デフォルト「自動(0)」
MYSQL の where ステートメントを指定します。利用できるのは、ドキュメントオブジェクトのみで、テンプレート変数は利用できません。デフォルト「Null」
表示する結果がないときに、表示するテキストを、テキストかチャンクで指定します。デフォルト「言語ファイルから読み込み($_lang['no_documents'])」
テンプレートパーサが処理できない、ネストされたプレイスホルダや、[fields]を取得する場合に指定します(ウソかも)。MODxフィールド名またはテンプレート変数をカンマで区切って複数指定可能です。デフォルト「Null」
ページ分割するかどうかを指定します。デフォルト「しない(0)」。「1」を指定した場合、「display」で指定した値で分割します。
ページ分割する場合は、スニペットコールを non-cache 形式で書く必要があります。
また、ドキュメント内にページナビゲーション関係のプレイスホルダが必要です(「Ditto でページ分割する場合」参照)。
常に「次へ([+next+])」「前へ([+previous+])」のリンクを表示するかどうかを指定します。デフォルト「しない(0)」。
「前へ([+previous+])」「次へ([+next+])」へのリンクが機能しているとき表示される、スプリッタキャラクタ([+splitter+])を指定します。デフォルト「言語ファイルから読み込み($_lang['button_splitter'])」
ページ分割する場合、ページング関係のプレイスホルダにDitto コールで指定した「id」をプリフィックスとして挿入します。
[!Ditto? &parents=`54` &display=`5`
&id=`myDittoCall` &paginate=`1`!]<p>[+myDittoCall_previous+] [+myDittoCall_pages+]
[+myDittoCall_next+]</p>指定した条件に一致するドキュメントを表示しないようにする機能です。もっとも基本的な書式は以下のようになります。
field,criterion,mode
それぞれは、「localFilterDelimiter」で指定した値で区切ります(スペースを入れてはいけません)。
id,50,2複数のフィルタを指定する場合「globalFilterDelimiter」で指定した値で区切ってフィルタを並べることができます。並べるフィルタの数に制限はありません。
それぞれのフィルタは「or」の関係を持ちます。
id,50,2|id,52,2フィルタとして@EVAL を利用しphpコードを書くこともできます(ウソかも)
「filter」の中で指定する「フィルタ」を区切る文字を指定します。「フィルタ」で利用していない文字を指定できます。デフォルト「|」。
「フィルタ」の中で、個々のパラメータを区切る文字を指定します。「フィルタ」自身に利用されていない文字を指定できます。デフォルト「,」。
出力用のテンプレートを指定するパラメータです。以下の指定方法があります。
出力用のテンプレートを指定します。デフォルト「言語ファイルから読み込み($_lang['default_template'])」。以下になります。
<div class="ditto_item" id="ditto_item_[+id+]">
<h3 class="ditto_pageTitle"><a href="[~[+id+]~]">[+pagetitle+]</a></h3>
<div class="ditto_documentInfo">by <strong>[+author+]</strong> on [+date+]</div>
<div class="ditto_introText">[+introtext+]</div>
</div>
「tplCurrentDocument」「tplFirst」「tplLast」が指定してある場合、該当するするアイテムでは、それぞれ、「tplFirst」「tplLast」「tplCurrentDocument」が優先されます。
「tpl」と交互に現れるテンプレートを指定します。デフォルト「tpl」。背景色などを変更して出力結果を見やすくしたいときなどに使うと良いでしょう。
「tplLast」「tplCurrentDocument」が指定してある場合、該当するするアイテムでは、それぞれ「tplLast」「tplCurrentDocument」が優先されます。
出力結果の中で、最初に現れるアイテムに適用するテンプレートを指定します。デフォルト「tpl」
出力結果の中で、最後に現れるアイテムに適用するテンプレートを指定します。デフォルト「tpl」
カレントドキュメント用のテンプレートを指定します。デフォルト「tpl」。
「tplFirst」「tplLast」が指定してある場合、カレントドキュメントが最初、または最後の時、「tplCurrentDocument」は適用されず、「tplFirst」「tplLast」が適用されます。
document A(15) └document B(16) └document C(17) └document D(18) └document E(19) └document F(20)
ドキュメントツリー構造が上記のような場合、Ditto コールで「parents=`15`」として、すべてのテンプレートを指定したとすると、以下のように適用されます(上記の通りの順番で出力されたとします)。
・document B … tplFirst … tplFirst がなければ tpl ・document C … tplAlt ・document D … tpl ・document E … tplAlt ・document F … tplLast … tplLast がなければ tpl
・document B … tplFirst … tplFirst がなければ tpl ・document C … tplAlt ・document D … tplCurrentDocument ・document E … tplAlt ・document F … tplLast … tplLast がなければ tpl
そしてすでにフォーラムでも指摘されていますが、document B でDitto コールをした場合は以下のようになります。
・document B … tplFirst … tplCurrentDocument は無効 ・document C … tplAlt ・document D … tpl ・document E … tplAlt ・document F … tplLast
ページナビゲーションの「前へ」用のテンプレートを指定します。デフォルト「言語ファイルから読み込み($_lang['prev']
)」
ページナビゲーションの「次へ」用のテンプレートを指定します。デフォルト「言語ファイルから読み込み($_lang['next']
)」
Ditto を機能拡張します。「extenders=`xxxxx`」で指定します。
実態は、「extenders」フォルダ下にあるファイルです。ファイル名の先頭がパラメータの値になります。パラメータはカンマで区切って複数指定可能です。
標準では、以下の4種類が用意されています。
Reflectや他の、日時を基準とするフィルタリングを利用したいときに指定します。Reflectでは、月別ページや年別ページを表示できるようになります。詳しくは「Reflect」を参照してください。
旧バージョン(1.x系)と互換性を保つためのパラメータです(一部、このパラメータを指定しなくても有効になる機能があるようですが、指定した方が間違いはないと思います)。
それぞれの説明はDitto 1.x 解説を参照してください。
※尚、Ditto2.xでは、切り詰める長さなどをPHxファンクションで指定できます※
URLを通して、Ditto のパラメータを利用するためのパラメータです。例えば、ドキュメントで以下のようにコールすると
[!Ditto? &extenders=`request`!]
このドキュメントのURLにDittoのパラメータを追加してそのパラメータを機能させることができます。
http://www.exsample.com/sample.html&ditto_parents=2これは、[!Ditto? &parents=`2`!] と同じ意味を持ちます。
1ページに複数のDittoを設置している場合「id」を利用します。
[!Ditto? &id=`menu` ....... !]
[!Ditto? &id=`toc` ....... !]
http://www.example.com/sample.html&ditto_menu_display=all&ditto_toc_hideFolders=1このように各Ditto を「&」でつないで指定します。
「SEO Strict URLsプラグイン」導入時、不要にリダイレクトされる問題についての、報告及び回避策です。
http://www.exsample.com/sample.html&ditto_parents=2上記のURLにアクセスすると、「http://www.exsample.com/sample.html」にリダイレクトされます。
http://www.exsample.com/sample.html?&ditto_parents=2「&」の前に「?」を挿入します。
※SEO Strict URLs プラグインの解説はこちらです※
タギングに関するファンクションを有効にします(一部、このパラメータを指定しなくても有効になる機能があるようですが、指定した方が間違いはないと思います)。
詳しくは、「Tagging」を参照してください
新しく「extenders」のパラメータを作るときのひな形です。
「extenders=`tagging`」とすることにより、タギングに関するパラメータ及び、プレイスホルダが有効になります。
タグリンクリストを表示するためのドキュメントをIDで指定します。デフォルト「カレントドキュメント」。
タグのデータソースとなるフィールドを指定します。カンマで区切って複数指定可能です。すべてのドキュメント変数、及び、テンプレート変数を指定できます。デフォルト「なし」。
タグの大文字小文字の区別をするかどうかを指定します。デフォルト「しない(0)」。「tag」も「Tag」も同じリストに属することになります。
フィルタリングの方法を指定します。以下を指定できます。
デフォルト「onlyTags」。
「tagData」で指定したタグソースの中の、それぞれのタグを区切るキャラクタを指定します。タグ自身に含まないキャラクタであれば、なにを指定しても構いません。デフォルト「半角スペース」。
[+tagLinks+]で出力するタグを区切るキャラクタを指定します。すべてのキャラクタを指定できます。デフォルト「tagDelimiter」で指定した値。
タグをアルファベット順にソートするかどうかを指定します。デフォルト「する(1)」。
[+tagLinks+] で、どのようにタグを表示するかを指定します。以下を指定できます。
デフォルト「1」。
すべてのタグを指定できます。タグは、「tagDelimiter」で区切って指定します。
例えば以下のような場合:
URLは、「sample.html?start=0&tags=modx」となります。
アーカイブを出力するためのスニペットです。「Reflect」スニペットを利用するときは、Ditto コールで「extenders=`dateFilter`を指定します。
Reflect 2.1 beta の解説をアップしました。
すべてのMODx ドキュメント変数とテンプレート変数をプレイスホルダとして利用できます。例えば、[*pagetitle*]ならば、[+pagetitle+]と記述することによって、値を取得できます。
このプレイスホルダは、Ditto コールをしたドキュメントに記述します。Ditto コールで指定した「id」をプリフィックスとして挿入します(「Ditto でページ分割する」参照)。
※準備中※
Ditto2でも、Wayfinder2.0 や MaxiGallery で採用されている config パラメータを使った簡潔なスニペットコールの記述が可能です。
<?php
// common parameter //
$param = 'value';
?>
こんな感じに「$パラメータ = '値';」を並べます
値を囲むクォーテーションはパラメータ指定の「``」ではなく、「''」または「""」なので注意。
[!Ditto? &config=`sample`!]
後方互換を取るためのコンフィギュレーションファイルです。Ditto1.xのバラメータで、コールできように設定します。以下のようにパラメータを並べます。
$newParameters = $oldParameter;
ファイルとしては、configs 下にありますが、Ditto のデベロッパーズドキュメントでは extenders に入っています。将来的にどちらに入るかちょっとわかりません。