はじめに
いろいろやっているうちに・・・最近よくコンテンツデータを使うのでメモがきで・・
コンテンツデータを記事のようにアーカイブする方法
コンテンツデータも記事のように下記の2つがあります。
コンテンツタイプアーカイブ........詳細ページになります、
コンテンツタイプリストアーカイブ..リストページになります。カテゴリか年間か月かのリストページです。
コンテンツタイプアーカイブ
コンテンツデータ詳細ページを作ります。
コンテンツタイプを該当のコンテンツタイプを選択します。
画像の例
<mt:ContentField content_field="コンテンツタイプで作成した名前を指定">
<img src="<$mt:AssetURL$>">
</mt:ContentField>
テキストの例
<mt:ContentField content_field="コンテンツタイプで作成した名前を指定"><mt:ContentFieldValue></mt:ContentField>
日付タイプの例
<mt:ContentDate format="%Y-%m-%d">
デフォルトのアーカイブマッピングは下記・・変更する場合は、記事と同様です。。
アーカイブマッピングは一度保存しないと設定できません。
yyyy/mm/dd/content_basename.html
コンテンツタイプリストアーカイブ
こちらは、一覧表示で使用します。
記事の場合mt:Entriesで括りますが・・mt:Contentsで括ります・・
タグはこんな感じ
<mt:Contents content_type="指定のコンテンツタイプ名 ">
<!-- 画像の場合 -->
<mt:ContentField content_field="コンテンツタイプで作成した名前を指定">
<img src="<$mt:AssetURL$>">
</mt:ContentField>
<!-- テキストの場合-->
<mt:ContentField content_field="コンテンツタイプで作成した名前を指定"><mt:ContentFieldValue></mt:ContentField>
</mt:Contents>
ソートしたい場合コンテンツタイプで数値タイプで並び順を作成して下記・・
<mt:Contents content_type="コンテンツタイプで作成した名前を指定" sort_by="field:並び順" sort_order="descend">
アーカイブマッピングは記事と同じです。
カテゴリの場合
/%-c/%i
上記のフォルダー付ける場合は
dir/%-c/%i
カテゴリフィールドにカテゴリを選択します。
メモ
ContentFieldの値を比較する。mt:Varに入れる場合。
mt:Varで初期化しないと、値がない場合、置き換えしてくれない。
<mt:Var name="view" value="">
<mt:ContentField content_field="表示区分"><mt:ContentFieldValue setvar="view"></mt:ContentField>
<mt:If name="view" eq="表示">
</mt:If>
コンテンツデータを検索したい・・・
mt.cgiと同じ領域にあるmt-cdsearch.cgiに実行権限のパーミッションを与えます。
高機能な、検索はデフォルトのままではできません・・・・(T.T)
MTの公式サイトの例では下記をつけることで検索窓が追加できる
<form method="get" id="search" action="<$mt:CGIPath$><$mt:ContentDataSearchScript$>">
<div>
<input type="text" name="search" value="<MTIfStatic><mt:IfStraightSearch><$mt:SearchString$></mt:IfStraightSearch></MTIfStatic>" placeholder="検索...">
<mt:If name="search_results">
<input type="hidden" name="IncludeBlogs" value="<$mt:SearchIncludeBlogs$>">
<input type="hidden" name="blog_id" value="<$mt:SiteID$>">
<input type="hidden" name="SearchContentTypes" value="コンテンツタイプ名、ID、ユニークID のいずれかを指定">
<mt:Else>
<input type="hidden" name="IncludeBlogs" value="<$mt:SiteID$>">
<input type="hidden" name="blog_id" value="<$mt:SiteID$>">
<input type="hidden" name="SearchContentTypes" value="コンテンツタイプ名、ID、ユニークID のいずれかを指定">
</mt:If>
<input type="hidden" name="limit" value="<$mt:SearchMaxResults$>">
<button type="submit" name="button">
<img alt="検索" src="<$mt:SupportDirectoryURL encode_html="1"$>theme_static/rainier/img/search-icon.png">
</button>
</div>
</form>
公式サイトから引用
IncludeBlogs
検索対象にするサイトの ID(blog_id)をカンマ区切りで指定します。
ExcludeBlogs
検索対象にしないサイトの ID(blog_id)をカンマ区切りで指定します。
SearchContentTypes
検索対象にするコンテンツタイプの ID、名前、ユニーク ID を指定します。
AND、OR、NOT による複数のコンテンツタイプの条件指定が可能です。
blog_id
検索のベースになる blog_id を指定します。template_id や Template パラメーターが未指定の場合、blog_id で指定したサイトの検索結果テンプレートが検索結果の表示で利用されます。
content_field
コンテンツフィールドでフィルタリングする場合、コンテンツフィールドの名前もしくはユニーク ID と、コンテンツフィールドの値を、コロン(:)で分けて指定します。コンテンツフィールドが日付、時刻、日付と時刻、バイナリ以外のフィールドが指定できます。指定可能なコンテンツフィールドはひとつのみで、複数フィールドの指定はできません。また、コンテンツフィールドが数値の場合は完全一致検索します。それ以外のフィールドでは、部分一致検索します。AND OR NOT を組み合わせて指定できます。
http get形式
mt-cdsearch.cgi?search=検索ワード&SearchContentTypes=コンテンツタイプで作成した名前を指定&content_field=コンテンツフィールドの名前&limit=20
検索応用例?
SearchContentTypesで指定するのは、下記の製品A、製品Bに該当する部分です。
content_fieldで指定するのは、下記の製品名、価格に該当する部分です。
上記を応用して、htmlとJavaScriptを使用すれば下記のようなイメージで検索できるように・・・できるかも・・
また、コンテンツデータでは、記事同様にカテゴリが使用できます。
content_fieldでは、「指定可能なコンテンツフィールドはひとつのみで、複数フィールドの指定はできません」とあるので
製品名と製品カテゴリを両方指定することはできないので・・不便です。
ですがここも、JavaScriptで製品カテゴリとか製品名とか入れ替えて検索はできそうですが。。。
カテゴリは、「コンテンツタイプリストアーカイブ」で事前にディレクトリ分けして、リンクで対応してその後検索をつけるなどで工夫する感じですかね・・
コンテンツタイプリストアーカイブでディレクトリ分け例
コンテンツの検索結果がテンプレートにない場合....
これは正式出ないかもしれませんが・・・検索と同じ方法で
一度、作成中のテンプレートをテーマで保存して。ダウンロードします。
templatesディレクトリに下記のファイル名を0バイトもしくは、1バイトで保存して追加します。
cd_search_results.mtml
theme.yamlを編集します。system:があるのでその下に下記を追加して system:はいらないですよ・・
保存します。
system:
cd_search_results:
description_label: 'Displays results of a search for content data.'
label: 'Search Results for Content Data'
上記を再度、テーマフォルダーへアップロードして、テーマを設定します。
これ以外に追加する方法があれば・・・おしえてほしいぃ・・・
さいごに
わすれちゃうから・・・ね。