MixedObjectsプラグインを利用すると複数のモデルのオブジェクトを1つにマージしてループ出力することができます。このプラグインは次のバージョンにて提供する予定のものですが、こちらから先行してダンロード( MixedObjects.zip (7.9KB) )していただけます。
mt:mixedobjects
models 属性または params属性のキーに指定した複数のモデルのオブジェクトを1つにマージしてループ出力します。
models 属性または params属性のどちらかが必須です。params属性を省略した時、読み込まれるのは idカラムとプライマリカラムの値、sort_by属性指定のあるときはそのカラムとなります。
このタグは LivePreview には対応していません。
予約変数
タグ属性
<mt:sethashvars name="params">
entry=title,published_on
page=title,published_on
asset=label,published_on
</mt:sethashvars>
<mt:mixedobjects params="$params" sort_by="published_on" limit="5" sort_order="descend" set_context="1">
<mt:if name="__first__"><ul></mt:if>
<li>
<mt:if name="__model__" eq="entry">
<a href="<mt:entrypermalink>">
<mt:elseif name="__model__" eq="page">
<a href="<mt:pagepermalink>">
<mt:elseif name="__model__" eq="asset">
<a href="<mt:assetfileurl>">
</mt:if>
<mt:var name="object_title">(<mt:var name="__model__"> : ID <mt:var name="object_id">)
</a>
</li>
<mt:if name="__last__"></ul></mt:if>
</mt:mixedobjects>
または、
<mt:mixedobjects models="entry,page,asset" sort_by="published_on" limit="5" sort_order="descend" set_context="1">
<mt:if name="__first__"><ul></mt:if>
<li>
<mt:if name="__model__" eq="entry">
<a href="<mt:entrypermalink>">
<mt:elseif name="__model__" eq="page">
<a href="<mt:pagepermalink>">
<mt:elseif name="__model__" eq="asset">
<a href="<mt:assetfileurl>">
</mt:if>
<mt:var name="object_title">(<mt:var name="__model__"> : ID <mt:var name="object_id">)
</a>
</li>
<mt:if name="__last__"></ul></mt:if>
</mt:mixedobjects>
この時、発行されるSQLは以下のようになります(システムスコープのビューの場合)。
(SELECT entry_id,entry_title,entry_published_on,'entry' AS table_name FROM mt_entry WHERE entry_rev_type=0 AND entry_status=4 AND entry_workspace_id = 0)
UNION
(SELECT page_id,page_title,page_published_on,'page' AS table_name FROM mt_page WHERE page_rev_type=0 AND page_status=4 AND page_workspace_id = 0)
UNION
(SELECT asset_id,asset_label,asset_published_on,'asset' AS table_name FROM mt_asset WHERE asset_rev_type=0 AND asset_status=4 AND asset_workspace_id = 0)
ORDER BY entry_published_on DESC LIMIT 5
各モデルをフィルタ指定する条件をモデルに対して1つずつ conditions 属性で渡すことができます。
キーにモデル名、値に「カラム名,条件,フィルタする値」を指定した配列(ハッシュ)として渡してください。
<mt:sethashvars name="conditions">
entry=title,ct,PowerCMS X
page=title,ct,PowerCMS X
asset=label,ct,PowerCMS X
</mt:sethashvars>
<mt:mixedobjects params="$params" sort_by="published_on" limit="5" sort_order="descend" conditions="$conditions" set_context="1">
~
</mt:mixedobjects>
条件 | 説明 |
---|---|
ct(like) | Contains (含む) |
nc | Not Contains (含まない) |
gt | Greater Than (より大きい) |
lt | Less Than (より小さい) |
ge | Greater than or Equal (以上) |
le | Less than or Equal (以下) |
eq | Equal (等しい) |
ne | Not Equal (等しくない) |
bw | Begin with (から始まる) |
ew | End with (で終わる) |