MTの最近のブログ記事

UTF-8を強制的にSJISへ変換

phpファイルの先頭に

 

 <?php
header("Content-Type: text/html; charset=Shift_JIS");
ob_start();
?>

 

を記述し、

phpファイルの最後に

 

<?php
$out = ob_get_clean();
$out = mb_convert_kana($out, "rak", "UTF-8");
$out = mb_convert_encoding($out, "SJIS", "UTF-8");
echo $out;
?>

と記述する。

 

つまり上記2つの記述で囲めばよい。

Movable Type 4.2でRSS 2.0を配信する。

RSS 2.0のテンプレートの作成

デザイン > テンプレート > インデックステンプレートから新規インデックステンプレートを作成する。

以下のソースをテンプレートのテキストエリアに挿入、出力ファイル名は拡張子xmlのファイル名(今回はrss20..xml)を。
タイトルは分かりやすいお好きな物で。(今回ははRSS2.0)

<$MTHTTPContentType type="application/rss+xml"$><?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
<MTEncodeText from="euc" to="utf8">
        <title><$MTBlogName remove_html="1" encode_xml="1"$></title>
        <link><$MTBlogURL$></link>
        <description><$MTBlogDescription remove_html="1" encode_xml="1"$></description>
        <language><$MTBlogLanguage ietf="1"$></language>
        <copyright>Copyright <$MTDate format="%Y"$></copyright>
        <lastBuildDate><MTEntries lastn="1"><$MTEntryDate format_name="rfc822"$></MTEntries></lastBuildDate>
        <generator>http://www.sixapart.com/movabletype/</generator>
        <docs>http://www.rssboard.org/rss-specification</docs>
        <MTEntries lastn="15">
        <item>
            <title><$MTEntryTitle remove_html="1" encode_xml="1"$></title>
            <description><$MTEntryBody encode_xml="1"$></description>
            <link><$MTEntryPermalink encode_xml="1"$></link>
            <guid><$MTEntryPermalink encode_xml="1"$></guid>
            <MTEntryCategories>
                <category domain="http://www.sixapart.com/ns/types#category"><$MTCategoryLabel remove_html="1" encode_xml="1"$></category>
            </MTEntryCategories>
            <MTEntryIfTagged><MTEntryTags>
                <category domain="http://www.sixapart.com/ns/types#tag"><$MTTagName remove_html="1" encode_xml="1"$></category>
            </MTEntryTags></MTEntryIfTagged>
            <pubDate><$MTEntryDate format_name="rfc822"$></pubDate>
        </item>
        </MTEntries>
</MTEncodeText>
    </channel>
</rss>

ここで注意点

Movable Typeの運用がEUC-JPだと、通常、RSS関連もEUC-JPで吐き出してしまう。

RSS(XML)は、ほとんどUTF-8がデフォルトで、それ以外だと読まないこともあるのでRSS2.0のテンプレートで以下のようにしています。

<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<MTEncodeText from="euc" to="utf8">


(省略)


</MTEncodeText>
</channel>
</rss>

 

終わったら保存をクリック。
次にテンプレートモジュールのHTMLヘッダーに以下を追加。

<link rel="alternate" type="application/rss+xml" title="RSS" href="<$mt:BlogURL$>index.xml" />

終わったら保存をクリック。

次にデザイン > ウィジェットの購読に、RSS2.0のリンクを追加。

<a href="<$mt:BlogURL$>index.xml">RSS 2.0</a>

 

 保存をクリックし、再構築して終了。

 

 

カスタムフィールドの設定

 

1.ブログメニューの [設定] より [カスタムフィールド] を選択します。
2.カスタムフィールド管理画面で [フィールドを作成] をクリックします。

 

custom_field_create-01.png

3.ブログ記事にフィールドを追加するので [システムオブジェクト] から [ブログ記事] を選択します。

 

custom_field_create-02.png

4.名前や説明、テンプレートタグは任意のものを入力してください。このサンプルでは以下のように設定しました。

 

custom_field_create-03.pngのサムネール画像

4.[保存] ボタンをクリックして、フィールドの追加作業は完了です。ブログ記事の管理画面をチェックしてみましょう。

 

フィールドの設定で [フィールドに値は必須ですか?] をチェックしていない場合、ブログ記事作成・編集画面の [表示オプション] で設定するようにします。

 

作成したフィールドは、以下のタグで値を出力することができます。ブログ記事に追加したので、MTEntries のコンテキスト内 (MTEntries, ブログ記事アーカイブテンプレート内) で使用する必要があります。

<$MTEntryTemplate$>

 

テンプレートを選択する仕組み

 

ブログ記事ごとにテンプレートを選択するフィールドが用意できたら、テンプレートも対応させます。テンプレートを選択できるようにするには、いくつもの方法が考えられますが、今回は簡単な方法で実現してみます。仕組みはこのようになります。

 

3つのテンプレートモジュール

■テンプレート A

<p>テンプレート A を使用して『<$MTEntryTitle$>』を出力しました。</p>

 

■テンプレート B

<p>テンプレート B を使用して『<$MTEntryTitle$>』を出力しました。</p>

 

 ■テンプレート C

<p>テンプレート C を使用して『<$MTEntryTitle$>』を出力しました。</p>

 

テンプレートの内容は単純ですが、どのテンプレートを利用して出力したのかがわかるようにしています。

 

 

ブログ記事テンプレート

 

<MTSetVarBlock name="entry_template_name"><$MTEntryTemplate$></MTSetVarBlock>

<MTIf name="entry_template_name" eq="テンプレート A">
<MTInclude module="テンプレート A">
<MTElseIf eq="テンプレート B">
    <MTInclude module="テンプレート B">
    <MTElse>
        <MTInclude module="テンプレート C">
</MTIf>

ただし、私の環境では「MTElseIf」がきかなかったため

今回急場しのぎですが、

<MTSetVarBlock name="entry_template_name"><$MTEntryTemplate$></MTSetVarBlock>

<MTIf name="entry_template_name" eq="テンプレート A">
<MTInclude module="テンプレート A">
</MTIf>

<MTIf name="entry_template_name" eq="テンプレート B">
<MTInclude module="テンプレート B">
</MTIf>

<MTIf name="entry_template_name" eq="テンプレート C">
<MTInclude module="テンプレート C">
</MTIf>

と書きました。

 

1  2  3