MTタグ記述

空白をつめる  HTML タグを除去する モディファイア

インデックスページを作成したりする時、最初の文章をチラ見させて後は各記事へ飛ばすリストをよくつくりますよね。


その時、文章から空白や改行を除去したい時には以下のモディファイアを。
regex_replace="/\s*\n+/g","\n"

さらにHTMLタグも取っ払ってしまいたい時には。
 remove_html="1"

を使います。
特に文字制限かけている時、その制限した文字数のところに丁度画像のHTMLタグが当たったりしちゃうと、その後のソースがおかしくなってしまうので。そんなときはHTMLタグは取ってしまうのがいいですね。

具体的な使い方は↓
<$mt:entrybody remove_html="1" regex_replace="/\s*\n+/g","\n" trim_to="130"$>...
とか。

特定のカスタムフィールドの特定の値を集めて表示

MTOSでカスタムフィールドを手動で設定しているのですが、
ある、フィールドの中でも特定の値だけ、抜粋して表示させたい場合に
以下でOKです。


<mt:Entries>
<mt:If tag="フィールド" eq="特定の値">
カスタムフィールドに入力した特定の値だけ絞って表示
</mt:If> 
</mt:Entries>


たとえば

<mt:Entries>
<mt:If tag="sukinatabemono" eq="たこ焼き">
たこ焼き好きな人の声をたくさん表示~
</mt:If> 
</mt:Entries>


tag=""にはフィールド名、eq=""は日本語で大丈夫です。

カンタンで嬉しいですね。

そのブログ記事以外の同じカテゴリの記事一覧をページに表示させたい場合

個々のブログ記事ページで、その他の同じカテゴリの記事を一覧表示させる方法です。
SEO的にはすごく良いらしいです。

以下参考ページです。

MovableTypeで表示中の記事と同じカテゴリーの記事をリストアップする方法

-----------

<mt:IfNonEmpty tag="EntryCategory">
    <mt:EntryCategories>
        <h2>その他の<$mt:CategoryLabel$>の記事</h2>
        <$mt:EntryCategory setvar="hoge"$>
        
            <mt:Entries catgeory="$hoge">
               <h3>たとえば記事タイトル</h3>
<p>記事内容</p>
            </mt:Entries>
      
    </mt:EntryCategories>
</mt:IfNonEmpty>

-----------

表示できました。

それにしても。
"hoge"って、ベタだな。。。ソースからは見れないけど、
私に何かあって、他人がMT管理画面アクセスして
「"hoge"だって・・・・。ださ。ぷっ。」
とか笑われたら恥ずかしすぎる!!!
別のに直しておこう。

そのブログ記事以外の記事一覧をページに表示させたい場合

ブログ記事ページで
そのブログ記事以外の記事の一覧もページに置きたい場合

参考にしたのはコチラです。

Movable Typeで表示中の記事を記事一覧から除外する方法

ブログ記事テンプレートをいじります。
記事の前に以下を置きます。

<$mt:EntryID setvar="hyojikiji"$>

記事のIDを取得して、"hyojikiji"に代入してます。


続きまして

<mt:entries>
直下に
<$mt:EntryID setvar="article"$>
    <mt:If name="article" ne="$hyojikiji">
を記述。

変数"article"と、変数"hyojikiji"が一致しない場合に、
その下に記述したものが表示されます。

--------
これで、このカテゴリ以外のものは表示しない分岐も入れたい。
来週のお仕事になりますな。

別のブログ記事テンプレートを動かす

今回のお仕事は、同じ情報を別の見せ方の2ページで表示したいという物。
しかも、個別のブログ記事テンプレートで生成させると言うものです。
以下手順です。

①アーカイブテンプレートの作成:+ブログ記事 をクリックして生成。
②新しいアーカイブマッピングをつくる。
今回私は、「category/sub-category/entry-basename.html」にしました。
③別のページからどうリンクするかというのが、一番の心配でしたが、以下の記述でOK!
<a href="<$mt:BlogArchiveURL$><$mt:FileTemplate format="%c/%-f"$>"><$mt:EntryTitle$></a>

aタグのなかに<$mt:FileTemplate format="%c/%-f"$>">を入れるんですね。
format=""の記述についてはアーカイブマッピングの種類によってかわります。
その記述についてこちらのサイトを参考にしました。
「アーカイブマッピングで利用するアーカイブファイル名の定義」
http://www.movabletype.jp/documentation/appendices/archive-file-path-specifiers.html

これで別の個別ブログ記事ページが生成されて、リンク先の設定もできた~!!
成長したなぁ。自分。
成長したね~キミ。って誰かに誉めて欲しい。。。

RSSで数件表示、そこからメインページのページ内リンク飛ばす

各ブログ、xmlファイルの「リンク先」の指定を、
<$MTEntryPermalink$>ではなく、
<$MTBlogURL$>#<$MTEntryID$>にします。 

 一方で メインページ
<mt:Entry>
の中に
<a name="<$MTEntryID$>"></a>のアンカーを埋め込んでおきます。 

これで、記事ごとに記事IDのアンカーが入ります。
 RSS一覧から、各記事へページ内リンクで飛べるというわけです。 

思いついて、仕事で使ってみたら成功しました。 
どうぞ、お試しください。

MT生成のアーカイブリストを折りたたむJQ

月別アーカイブリストを年ごとに折りたたむjqueryにトライしました。
このサイトのサイドバーにも反映してみました。


参考にした本は、「Movable Type 4.x クリエイターが身につけておくべき100の法則。」(発行:インプレスジャパン)です。
4.xなので、もう使えない機能もたまにありますが、今回は5.04にも使えました。

ソースは以下です。

<dl>
<dt></dt>
<dd>
<ol>
<MTArchiveList archive_type="Yearly">
<li class="yearlyList"><$MTArchiveTitle$>の記事を見る
<ol>
<MTArchiveList archive_type="Monthly">
<li><a href="<$MTArchiveLink$>"><$MTArchiveTitle$></a></li>

</MTArchiveList></ol>
</li>
</MTArchiveList></ol>
</dd>
</dl>

基本は上記ですが、
今回、今年度のは別に記載したので、去年から過去の表示が欲しい。
と言うことで、ちょっとつけたし。


<dl>
<dt></dt>
<dd>
<ol>
<MTArchiveList archive_type="Yearly"><MTArchivePrevious>
<li class="yearlyList"><$MTArchiveTitle$>の記事を見る
<ol>
<MTArchiveList archive_type="Monthly">
<li><a href="<$MTArchiveLink$>"><$MTArchiveTitle$></a></li>

</MTArchiveList></ol>
</li></MTArchivePrevious>
</MTArchiveList></ol>
</dd>
</dl>
------------

<MTArchivePrevious>タグを使います。

さて、

jqueryが入ってなければダウンロードして<head>内で読み込みます。
その下に新たにjavascriptを書くか、別ファイルにして読み込みます。

$(document).ready(function(){
$(".yearlyList ol").css("display","none")
$(".yearlyList").click(function(){
$(this).children().slideToggle("slow");
});
});


---------

スタイルシートは適宜入れてください。
1点。

.yearlyList{
cursor:pointer;
}

は記述したほうがいいです。しないと、オンマウスでもカーソル形状がかわりませんので、リンクなのかわかりづらいです。

さらに、注意。

「<$MTArchiveTitle$>の記事を見る」

の記述のところにスタイルを入れると、とたんにうまく行かなくなります。
「<$MTArchiveTitle$>の記事を見」る、は残ってて欲しいのに、表れた下層リストに押し出されて消えてしまうんです。

そこに背景バーイラストをおきたかったので、いろいろ試しました。
で、行き着いたのでが、
.yearlyListに背景画像をいれて、下のolにその分マージンを取るスタイルを入れました。
それで、なんとかうまく行きましたよ。

よく分からないけど、
js記述内の
.css("display","none")
が反映されちゃうんじゃないかと思うんですが、、、どうでしょうか。
詳しい人にめぐり合えたら聞いてみます。

カテゴリごとの条件分岐

忘れやすいので、覚書です。

<MTEntryIfCategory name="A">
カテゴリページ条件分岐
</MTEntryIfCategory>



<MTIfCategory label="A">
インデックスページ条件分岐
</MTIfCategory>


こんなことで時間とりたくない~

新しい投稿に"new!"を、一定期間表示

記事の新着マークがあると、新鮮度がぐんとアップしますよね。
SEO的にも、ユーザビリティ的にも、効果は高いです。

MTで新着表示をつけてみたので、ご紹介します。

①</head>直前に以下を記述

<script type="text/javascript">
<!--
function newM(y,m,d)
{
newday=new Date(y+"/"+m+"/"+d);
oldday= new Date();
n=(oldday-newday)/(1000*60*60*24);
if (n <=3)document.write("new!");
}
//-->
</script>

これで、投稿3日以内に"new!"マークがつきます。
日数を調整したい時はif (n <=3)の数字をカスタマイズします。

②new!マークを入れたい場所に以下を記述します。

<script type="text/javascript">newM(<$mt:EntryDate format="%Y,%m,%d"$>)</script>

------------------
①の記述をちょっとカスタマイズ。
<span>でスタイルシートを指定することが出来る、<img ~>タグで画像アイコンも対応可、ということですが、私が今回触ったコードはかなり複雑にスタイルシートが敷いてあって、新しいスタイルを効かすための作業がめんどくさかったので( ̄Д ̄;)、Javascriptに直に書き込みました。ちょっとした指示だったので。

<script type="text/javascript">
<!--
function newM(y,m,d)
{
newday=new Date(y+"/"+m+"/"+d);
oldday= new Date();
n=(oldday-newday)/(1000*60*60*24);
if (n <=3)document.write("&nbsp;new!".fontcolor("red").fontsize(2));
}
//-->
</script>

これで、文字色赤、フォントサイズ2に指定OKです。

カテゴリ一覧の並び順ソート

お久しぶりです~。
サイドバナーのカテゴリ一覧の並び替えをする機会があったので、メモです。

そのカテゴリは、20××年××月度という月くくりで作成していったもので、デフォルトだと古い順から並んでいってしまいますので、

<mt:TopLevelCategories>


<mt:TopLevelCategories sort_order="descend">

を追加しました。

<mt:SubCategories>にも有効だそうな。
参考ページはコチラです。

http://www.movabletype.jp/documentation/mt5/blogs/category.html

カスタムフィールドに入力があったら表示

すごく、今さらな感じのエントリーですが、
あれ、どうだっけ。。。となることが多いので覚書

カスタムフィールドに入力があったら表示
なければブロックごと非表示

<mt:If tag="Entrymarumaru">
<img src="./img/marumaru.gif" alt="まるまる" />
<p><$mt:Entrymarumaru$></p></mt:If>

別サーバのブログ記事をRSSで取得。表示する

Aサーバのページに、BサーバのMTのブログ記事をリスト表示させたいと思い、こちらのプログラムを使いました。

PHP で使える RSS パーサー
http://www.hyuki.com/yukiwiki/wiki.cgi?MagpieRSS

(1)  Aサーバ のRSS表示させたいページ と同階層に、上記ダウンロードしたファイルを、設定してアップロードする。
設定方法は上記ページをみてください。結構カンタンです。

(2) Aサーバ のRSS表示させたいページの、記述したい部分に下記記述を追加します。
※最初と最後の<>は2バイト文字なので、半角英数に変換して使ってください。

<?php
 require_once 'rss_fetch.inc';
 $url = 'http:// Bサーバ のブログのatom.xmlへのリンク';
 $rss = fetch_rss($url);
 $title = $rss->channel['title'];
 $title = mb_convert_encoding($title, "SJIS", "auto");
 echo "<h2>$title</h2>\n";
 echo "<ul>\n";
 foreach ($rss->items as $item ) {
 $title = $item[title];
 $title = mb_convert_encoding($title, "SJIS", "auto");
 $url   = $item[link];
 echo "<li><a href=\"$url\">$title</a></li>\n";
 }
 echo "</ul>\n";
 ?>

(3) Bサーバ のMTの管理画面「デザイン」の最新記事のフィードのatom.xmlを見てみます。
「<title><$mt:EntryTitle remove_html="1" encode_xml="1"$></title>」
という記述があります。

この<title>○×○×○</title>の中身を、(2)のphpプログラム内上から5行目
「$title = $rss->channel['title'];」で引っ張ってくる命令をだしているわけです。

ではたとえばタイトルじゃなくて、キーワードをひっぱてきてリスト表示したい場合は
 Bサーバ のブログのatom.xmlファイル内に以下の記述を入れておきます。

<Keywords><$MTEntryKeywords$></Keywords>

※最初と最後の<>は2バイト文字なので、半角英数に変換して使ってください。

次に(2)のPHP内のtitleのところを全部Keywordsに変えます。これでばっちり。

カテゴリーページでも全エントリーリストを表示する。

作成したMTのサイトを確認していて、おや?っと思った。
全ページのサイドバーに、全エントリーの新着を載せているのですが、
カテゴリーアーカイブテンプレートで生成されたページのサイドバーには、そのカテゴリの新着順しか表示されてません。

ふうん。そんな落とし穴があるんだ。と思って即検索すると、さすが藤本さん。(ああ!まるで知り合いのような表現。図々しいぞ私)こちらのページに詳しく載っていました。

ブログの全ページに最新記事のリストを出力する裏ワザ


<mt:BlogID setvar="blog_id">
<mt:Blogs include_blogs="$blog_id" ignore_archive_context="1">
    <mt:Entries include_blogs="$blog_id" lastn="○○">
        個々のブログ記事の情報を出力するテンプレートタグ
    </mt:Entries>
</mt:Blogs>

※最初の<は全角になっていますので、半角に直してコピーして下さいね。
※1行目のblog_idには実際のidナンバーが入ります。

ばっちり。(*^^)v

ページ分割プラグイン「PageBute」のページ送りの記述

分割後の最後のページの取得が簡単に出来たのに感動したので、覚書まで。

スカイアーク
静的ページ用ページ分割プラグイン:PageBute
http://www.skyarc.co.jp/engineerblog/entry/2642.html

okuri.gif
---------------------
<ul>
<MTIfPageFirst><$MTPageFirst delim="&lt;&lt;最初のページ"$></MTIfPageFirst>
<mt:IfPageBefore>


<$mt:PageBefore delim="&lt;&lt;前の10件"$>
</mt:IfPageBefore>
<$mt:PageLists delim="" link_start="<li>" link_close="</li>"$>
<mt:IfPageNext>
<$mt:PageNext delim="次の10件&gt;&gt;"$>

</mt:IfPageNext>
<MT:IfPageLast>
<$MTPageLast delim="最後のページ&gt;&gt;"$>
</MT:IfPageLast>

</ul>
------------
※注意:直接コピペできません。(<は全角です。お使いになる場合は修正してさい。)
※スタイルシートは別途設定してください。

最終ページの取得は

<MT:IfPageLast>
<$MTPageLast delim="LAST&gt;&gt;"$>
</MT:IfPageLast>

の部分です。

検索結果を分割するプラグイン「DivPages 」のMT5対応

前述の「DivPages」ですが、
藤本 壱さんの「MTOS活用テクニック」で書かれているのはMT4対応のようで、
MT5で動作させると、再構築中は何も起きませんが、検索ボタンを押したときに以下のようなエラーがでます。

---------
再構築に失敗しました。 : Can't locate object method "_hdlr_entries" via package "MT::Template::Context" at /home/ドメイン/www/mt/plugins/RealtimeRebuild/../../plugins/DivPages/DivPages.pl line 165.
---------

どうも
plugins/DivPages/DivPages.pl
の165行目あたりが問題のようです。

なので、「DivPages.pl エラー」で検索をかけたところ、以下の記事を見つけました。

http://50.lilulela.com/blog/archives/plug-in/index.php

---------------

165行目の
$res = $ctx->_hdlr_entries($args, $cond);を
$res = $ctx->invoke_handler('entries', $args, $cond);と書き換え、
433行目の
return 'http://' . $ctx->_hdlr_blog_host($args) . $uri;を
return 'http://' . $ctx->invoke_handler('bloghost', $args) . $uri;と書き換えれば5.0では動くそうなので・・・・


---------------

管理者の方はうまくいかなかったようですが、だめもとで上記の修正を行ってみたところ、うまくいきました!!!!
よかった~。


他にも別のプラグインを使う方法もあるらしいです。
試してませんが参考まで。

ArchivePage
http://www.boundless-ocean.ne.jp/2007/02/archivepage.html

特定のカテゴリの記事だけをページに表示させる

アーカイブテンプレートの「カテゴリ別ブログ記事リスト」の他に、カテゴリページを作りたい場合。 

というのは、PC版とiPhone版とを同じMT内に作ってたのですが、カテゴリ別ブログ記事リストのテンプレートを複製して、そこに表示させるのがなんか難しいんです。 
なにか、考え方やコツがあるんだと思うんですが。。。 

で作業時間も限られていたので、インデックステンプレートにiPhone用の各カテゴリページをつくって対応したわけですが。 

 <MTEntries category="カテゴリA OR カテゴリB OR カテゴリC">

 ~ 記事 ~ 

 </MTEntries> 

 これでABC三つのカテゴリのどれかを含むカテゴリを表示します。
 OR は大文字で。 
AND なんかの組み合わせも可能です。

 タグリファレンスはこちら 
http://www.movabletype.jp/documentation/appendices/tags/entries.html

プラグイン「PostTweet」でtwitter連動

PostTweetの導入方法はこちらをご覧ください。
http://m-logic.co.jp/mt-plugins/posttweet/docs/1.0.3/posttweet.html

結構簡単に、組み込めるプラグインです。

ディフォルトだと、ツイッターにはタイトルとURLしか表示されません。
そこに、カテゴリと、カスタムフィールドのテキストを表示するよう、カスタマイズしてみました。

FTPで、mtルートのpluginsフォルダ内、「PostTweet/tmpl/message_format.tmpl」をエディタで開きます。

**デフォルトでは、以下です。**

------------------------
<mt:setvar name="title_len" value="140" />

<mt:setvarblock name="title"><mt:entrytitle remove_html="1" /></mt:setvarblock>

<mt:setvarblock name="link"> - <mt:entryshortenedpermalink /></mt:setvarblock>

<mt:setvarblock name="link_len"><mt:var name="link" count_characters="1" />
</mt:setvarblock>

<mt:setvar name="title_len" op="-" value="$link_len" />

<mt:var name="title" trim_to="$title_len" /><mt:var name="link" />
------------------------



**カテゴリと<$mt:Entry006$>を表示できるようにしたのが以下です。
<$mt:Entry006$>は40文字以降は...で省略します。**

------------------------
<mt:setvar name="title_len" value="100" />

<mt:setvarblock name="title"><mt:entrytitle remove_html="1" /></mt:setvarblock>

<mt:setvar name="category_len" value="100" />

<mt:setvarblock name="category"><$mt:CategoryLabel></mt:setvarblock>

<mt:setvarblock name="link"> | <mt:entryshortenedpermalink /></mt:setvarblock>

<mt:setvarblock name="link_len"><mt:var name="link" count_characters="1" /></mt:setvarblock>

<mt:setvar name="entry006_len" value="50" />

<mt:setvarblock name="entry006"> | <$mt:Entry006$></mt:setvarblock>

<mt:setvar name="title_len" op="|" value="$link_len" />

<mt:var name="title" trim_to="$title_len" /><mt:var name="category" /><mt:var name="link" /><mt:var name="entry006" trim_to="40"$>...
------------------------



**カテゴリと<$mt:Entry006$>か<$mt:Entry001$>を表示できるようにしたのが以下です。
<$mt:Entry00n$>は40文字以降は...で省略します。
カテゴリは頭に3けたの連番をつけてソートしているので、その番号を消して表示します。**

------------------------
<mt:setvar name="title_len" value="100" />

<mt:setvarblock name="title"><mt:entrytitle remove_html="1" /></mt:setvarblock>

<mt:setvar name="category_len" value="100" />

<mt:setvarblock name="category"><$mt:CategoryLabel cutfirstchar="3"$></mt:setvarblock>

<mt:setvarblock name="link"> | <mt:entryshortenedpermalink /></mt:setvarblock>

<mt:setvarblock name="link_len"><mt:var name="link" count_characters="1" /></mt:setvarblock>

<mt:setvar name="entry006_len" value="50" />

<mt:setvarblock name="entry006"> | <$mt:Entry006 blog_id="6"$></mt:setvarblock>

<mt:setvar name="entry001_len" value="50" />

<mt:setvarblock name="entry001"><$mt:Entry001 blog_id="5"$></mt:setvarblock>

<mt:setvar name="title_len" op="|" value="$link_len" />

<mt:var name="title" trim_to="$title_len" /><mt:var name="category" /><mt:var name="link" /><mt:var name="entry006" trim_to="40"$><mt:var name="entry001" trim_to="40"$>...
------------------------
上記は、MTの中に複数のブログが入っていて、同じツイッターに連動させる時にこのような設定をします。

ツイッターに記事が現れると、最初めっちゃ感動します。


一つ置きに記事のスタイルシートを変えてみる

div class="styleA<MTIf name="__even__">  styleB</MTIf>">
以下でもOKです。
<div class="<mt:if name="__even__">styleA</mt:if><mt:if name="__odd__">styleB</mt:if>">

画像を一つ置きに変えるなどの応用にも。
<MTIf name="__odd__"><img src="/img/imageA.gif" alt="" /></MTIf>
<MTIf name="__even__"><img src="/img/imageB.gif" alt="" /></MTIf>


覚書までに。

__first__
初回の繰り返しであれば1

__last__
最後の繰り返しであれば1

__odd__
奇数回の繰り返しであれば1

__even__
偶数回の繰り返しであれば1

__counter__
現在の繰り返し回数

<mt:Entries>で最新記事を除いて表示する

<mt:Entries offset="1">

offsetモディファを使います。
"0"は全件表示になります。
lastnモディファと組み合わせて使えます。

<mt:Entries lastn="10" offset="1">

最新記事1件を除いて、10件まで表示、
というようなふうに。

べんり。

ブログの振り分け~PC版とモバイル版~

プラグインやサービスを使う手もありますが、PC版のページと携帯版のページを作るのが面倒でないなら、それぞれのテンプレートを作るのもシンプルで良いです。

<1>携帯版インデックスページを作る
MTで「インデックステンプレートを複製」(ファイル名の左側のチェックボックスを入れて、アクションのプルダウンからテンプレートの複製を選択)します。
Dreamweaverなどでざっとhtml組んで(手打ちでももちろんいいですが)複製したインデックステンプレートにコピーペーストし、テンプレートの設定画面でファイル名をPC版とは別の名前にしたあと、保存・再構築をかけます。

<2>携帯版のブログ記事ページを作る。
以下のサイトを参照しました。
http://webdesigner.hikonet.net/mt/20090110.php
アーカイブテンプレートで、PCのブログ記事のテンプレートを複製します。
テンプレートの設定で新しいアーカイブマッピングを作成にし、種類を「ブログ記事」パスのところは私は「m/%y/%m/%d-%s%x」としました。最初のm/はmディレクトリに携帯関係のファイルを入れる決まりにしたからです。
保存をクリックします。

携帯インデックスページに戻り、プログ記事へのリンクを
<a href="<$mtBlogURL$>m/<$MTEntryDate format="%Y/%m/%d-%S"$>.html"><$mt:EntryTitle$></a>
と設定します。再構築をかけます。
これで、携帯版ブログ記事が
http://ドメイン/m/2011/08/12-09.html
などのように生成されます。

<3>同じ要領で携帯月別ブログ記事リストを作成する
月別ブログ記事を複製し、アーカイブマッピングは「m/%y-month/%m/%d-%s%x」、種類が月別、インデックスページじ記述するリンクは、
<a href="<$mt:BlogURL$>m/<$MTArchiveDate format="%Y-month/%m/%d-%S"$>.html"><$mt:ArchiveTitle$>(<$mt:ArchiveCount$>)</a>
にしました。

これで、各プログ記事と、月別記事のページが生成されます。

さて、うまく行かなかったのが、カテゴリ別ブログ記事のページです。
考え方は同じはずなのに、何がいけないのか、ページ生成されないし。
この仕事にいつまでもかかりっきりになってる訳にもいかないし。
そこで。

いや、大したことしてません。すみませんもったいぶって。
カテゴリ用にMT新規で作りました。別のMTにカテゴリ関係だけ飛ばして、記事はインクルードで対応しました。
長くなってしまったので、詳しくは、次回にて。m(_~_)m

MTOSで、カテゴリに画像を割り当てる

カテゴリごとに画像を割り当てます。
正確に言うと、カテゴリの管理画面に、カスタムフィールドを追加します。
カテゴリと対になるもので、テキスト入力出来るものを作ります。ここに画像のファイル名を入力して、テンプレート側で画像が表示できるHTMLタグを設定しておきます。

参照ページはこちらです。(感謝)
Under the Bridge
MT4.1:プラグイン作成におけるDBへのフィールド追加について(カテゴリ編)
http://www.apstars.com/blog/215/mt41db_1.php


具体的には以下です。

<1>プラグイン作成
---------------------------
package MT::Plugin::SubitemCat;
use base 'MT::Plugin';

use strict;

use MT;
use MT::Plugin;
use MT::Template::Context;
use MT::Entry;

# register plugin
my $plugin = __PACKAGE__->new({
    name => 'SubitemCat',
    key => 'SubitemCat',
    version => '1.00',
    author_name => 'your name',
    description => 'Sub item of Cat',
    schema_version => '1.00',
});
MT->add_plugin($plugin);

# initialize registry
sub init_registry
{
    my $plugin = shift;
    $plugin->registry({
        object_types => {
           'category' => {
              'sort_index_custom' => 'string(255)',
           },
        },
        tags => {
            function => {
                'CategorySortIndex' => sub{&_hdlr_sort_index_custom;},
            },
        },
    });
    
}

sub _hdlr_sort_index_custom {
    my ($ctx, $args) = @_;
    my $tag = 'CategoryIndexAdd';
    (my $category = $ctx->stash('category')) || return $ctx->_no_category_error('MT' . $tag);
    return $category->sort_index_custom || '';
}

1;
-----------------------------

これで CategorySortIndex というMTタグが存在するようになります。
SubitemCat.plとして、mtフォルダ直下「plugins」ディレクトリに入れます。
任意で「SubitemCat」などの名前のフォルダに入れます。

次に管理画面にカスタムフィールドを表示させるためのファイルを作ります。
mt直下「tmpl」内「cms」内の「edit_category.tmpl」をダウンロード、以下ソースを追加します。


------------------------------
(省略)
    <fieldset>
        <h3><__trans phrase="Outbound TrackBacks"></h3>
<mtapp:setting
    id="ping_urls"
    label="<__trans phrase="Trackback URLs">"
    hint="<__trans phrase="Enter the URL(s) of the websites that you would like to send a TrackBack to each time you create an entry in this category. (Separate URLs with a carriage return.)">"
    help_page="categories"
    help_section="categories_urls_to_ping">
    <textarea name="ping_urls" id="ping_urls" cols="" rows="" class="full-width short"><mt:var name="ping_urls" escape="html"></textarea>
</mtapp:setting>
    </fieldset>



<!-- ここから追加部所 Category Sort Add -->
    <fieldset>
    <h3>Input Category Sort Index</h3>
<mtapp:setting
    id="sort_index_custom"
    label="Category Sort Index Input">
    <div class="textarea-wrapper">
        <input name="sort_index_custom" id="sort_index_custom" class="full-width" maxlength="100" value="<mt:var name="sort_index_custom" escape="html">" class="wide" />
    </div>
</mtapp:setting>
    </fieldset>
<!-- ここまで追加部所 Category Sort Add -->







<mt:setvarblock name="action_buttons">
    <button
        type="submit"
        accesskey="s"
        title="<__trans phrase="Save changes to this category (s)">"
        class="save action primary-button"
        ><__trans phrase="Save Changes"></button>
</mt:setvarblock>
<mt:include name="include/actions_bar.tmpl" bar_position="bottom" hide_pager="1" settings_bar="1">
</form>

</div>
<mt:include name="include/footer.tmpl">

------------------------------

保存したら、mt直下「alt-tmpl」内「cms」内にアップします。そうすると、MTが優先的にそちらを読みに行きます。

管理画面「.../mt/mt.cgi」に再度サインインすると、バージョンアップを知らせる画面が現れると思います。そうしたらまずは成功。
カテゴリの管理画面を見てみると「Category Sort Index Input」というタイトルのカスタムフィールドが新しくあると思います。

テキストも入力できますが、今回は画像のファイル名を入力しておきます。
画像もアイテムやFTPを使ってアップしておきます。

最後にテンプレートのカテゴリ表示に以下のようなHTMLタグを追加します。。
--------------------------------

<mt:Entries>

<mt:IfNonEmpty tag="EntryCategories">
<mt:EntryCategories>

<img src="<$mt:BlogURL$>/img/<$mt:CategorySortIndex$>" alt="<$mt:CategoryLabel$>" />

</mt:EntryCategories>
</mt:IfNonEmpty>
                            
</mt:Entries>

--------------------------------

上記で、指定した画像にカテゴリ名のaltが入って表示されます。

利用方法としては、カテゴリのリスト表示などで個別のアイコン画像を頭につけたりとか、リスト自体を画像で組んだり出来ますね。

長くなってすみません。

別ブログの特定のカテゴリをインクルード

別のブログの、あるカテゴリだけ表示したい。

以下の要領で組みます。
-------
<mt:Entries include_blogs="ブログID" category="表示したいカテゴリ">

<$mt:EntryTitle$>
<$mt:EntryBody$>
などの内容

</mt:Entries>
--------
大元のページでは</mt:Entries>をh2にしてたけど、インクルードのページでは別のカスタムフィールドをh2で表示、なんてこともできますね。

MultiBlogブロックタグで他のブログの最近の記事リストを表示

他のブログと相互に情報を表示させたい時に便利です。

<mt:MultiBlog mode="loop" include_blogs="ブログID">

<mt:ArchiveList archive_type="Individual" lastn="表示数">
<mt:ArchiveListHeader><ul></mt:ArchiveListHeader>
<li><a href="<$mt:ArchiveLink$>"><$mt:EntryTitle$>・<mt:EntryCategories>
</a></li>
<mt:ArchiveListFooter></ul></mt:ArchiveListFooter>
</mt:ArchiveList>
</mt:MultiBlog>

最近、他のブログ記事を表示させる技も、使いました。
また、紹介します

特定のタグのエントリーを表示

管理画面のタグのところに任意のタグを入力します。

テンプレートのソースで、

<MT:Entries tag="任意のタグ">
 任意のタグの記事
</mt:Entries>

でそのタグだけピックアップさせて表示できるのですが、

今回仕事で、「おすすめ記事を選んでランキング形式で表示させたい」との要望あり、タグフィールドに「ranking01」~「ranking05」までのタグをそれぞれの記事に入れ、

<MT:Entries tag="ranking01">
ranking01のタグの記事
</mt:Entries>

<MT:Entries tag="ranking02">
ranking02のタグの記事
</mt:Entries>

<MT:Entries tag="ranking03">
ranking03のタグの記事
</mt:Entries>

<MT:Entries tag="ranking04">
ranking04のタグの記事
</mt:Entries>

<MT:Entries tag="ranking05">
ranking05のタグの記事
</mt:Entries>

と言う感じで表示させました。

なんかソート的な方法はないか、かなり調べましたが。よくわかんない。

カテゴリ一覧表示で、特定のカテゴリを非表示

中古車販売のサイトで、メーカーと車種のカテゴリを作りました。

トップページでメーカーで選べるエリアと、車種で選べるエリアと作りたかったので、カテゴリ表示の表示・非表示を設定できるプラグインをさがしましたが、サイトのリンクが切れていてダウンロードできません。

いろいろ調べたら、MTタグに書き込める方法もあったので、試したらうまく行きました。

以下です。

------------------

<mt:TopLevelCategories>
<mt:SubCatIsFirst><ul></mt:SubCatIsFirst>
      <mt:SetVarBlock name="catname">
      <$MT:CategoryLabel$>
      </mt:SetVarBlock>
      <mt:Unless name="catname" like="カテゴリ名">


<li>
<mt:IfNonZero tag="CategoryCount">
<a href="<$mt:CategoryArchiveLink$>"><$mt:CategoryLabel$>
</a>
<mt:Else>
<$mt:CategoryLabel$>
</mt:Else>
</mt:IfNonZero>
<$mt:SubCatsRecurse$>
</li>
      </mt:Unless>
<mt:SubCatIsLast></ul></mt:SubCatIsLast>
</mt:TopLevelCategories>
-----------------

これは、使えます!

複数のカテゴリを非表示にしたいときは

<mt:Unless name="catname" like="カテゴリA|カテゴリB|カテゴリC">

| で区切って書きます。

ページを分割するプラグイン

PageButeというプラグインで、ページを分割して表示させました。

pagebute.jpg

これはずっと標準搭載の機能だと思っていましたが、プラグインが必要だったんですね。

ダウンロードページはこちらです。

スカイアークシステム
http://www.skyarc.co.jp/engineerblog/entry/2642.html

導入方法は、
解凍ファイルPageBute.pl を plugins ディレクトリにアップロードします。

システムのプラグインに「PageBute」が表示されていれば大丈夫です。

次にテンプレートソースを書き換えます。
私は以下のように書き換えました。

---------------

<mt:pageContents count="5">
<mt:Entries>

~ブログ記事(省略)~

<mt:pageSeparator />

</mt:Entries>

</mt:pageContents>

<div class="content-nav">
<mt:ifPageBefore>
  <span><$MTPageBefore delim="&#65308;"$></span>
</mt:ifPageBefore>
<mt:pageLists />
<mt:ifPageNext>
  <span><mt:pageNext delim="&#65310;" /></span>
</mt:ifPageNext>
</div>

---------------

5件づつ区切ってます。

また、ページ分割の表示は11件づつがデフォルトで、表示数を変えるなら

<mt:pageContents count="5" navi_count="6"> ~ </mt:PageContents>

で6件ずつになります。

注意点は、<mt:Entries>にlasten="n"を設定しないこと。
それと、ブログの設定で表示件数を設定しないことです。