テスト環境に設置したMovable Typeのアイテム管理に関するTips

Movable Type(以下MT)をテスト環境に設置。URLは本番環境のURLを設定しているものとする。


上記の場合、出力するパスをルート相対にすれば概ね問題ないが、アイテム管理画面は本番環境のファイルを取得しようとするのでエラーとなる。そこで、mt.cgiからのアクセスの場合はURLをリライトして対応するもの。


.htaccessの設定(本番環境)


# BEGIN MT for Staging Server
RewriteCond %{HTTP_REFERER} http://[your_id].smartrelease.jp/path/to/mt/[your_admin_script].cgi
RewriteCond %{REQUEST_URI} ^.*\.(gif|jpg|png|svg|ico)$
RewriteRule ^.*$ http://[your_id].smartrelease.jp%{REQUEST_URI} [L]
# END MT

画像をアセットのアップロードで変更可能にする

任意のタグが付けられた画像の中で最新の画像が表示されるようになる。


MTML


<div class="image">
<mt:MultiBlog blog_ids="5"><mt:Assets tag="@home_kv" sort_by="created_on" sort_order="descend" lastn="1"><img src="<$mt:AssetURL abs2rel="1"$>" alt=""></mt:Assets></mt:MultiBlog>
</div><!-- /.image -->

アーカイブリストで最近のブログ記事を表示

アーカイブリストのコンテキストを解除し、どのページでも最近のブログ記事を表示する方法。Movable Type 6.0.2以上で対応。


MTML


<h2>最近のブログ記事</h2>
<ul>
<$mt:BlogID setvar="blog_id"$>  
<mt:Blogs include_blogs="$blog_id" ignore_archive_context="1"> 
<mt:Entries lastn="10">
<li><a href="<$mt:EntryPermalink abs2rel="1"$>"><$mt:EntryTitle$></a></li>
</mt:Entries>
</mt:Blogs>
</ul>

静的出力と動的出力併用時のページネーション

MovableType.org – MT5 Documentation: Paginating the Main Index Templateを参考にした。メインインデックスだけでなく、アーカイブでも利用可能。


GetEntriesOnIndexプラグインを利用すれば、1ページ当たりのエントリー数を動的に取得できる。


ページネーションMTML


<mt:Ignore>1ページあたりのエントリー数…どちらかを選択</mt:Ignore>
<mt:Ignore><$mt:SetVar name="entries_per_page" value="10"$></mt:Ignore>
<mt:Ignore>1ページあたりのエントリー数を自作プラグインで「表示される記事数」を取得 https://www.anothersky.pw/skyward/archives/000131.html</mt:Ignore>
<mt:If name="entries_per_page" eq="">
    <$mt:EntriesOnIndex setvar="entries_per_page"$>
</mt:If>


<mt:Ignore>2ページ目以降を出力するスクリプトのパスなど</mt:Ignore>
<mt:SetVarBlock name="search_link">
    <$mt:CGIRelativeURL$><$mt:SearchScript$>?IncludeBlogs=<$mt:BlogID$>
    &amp;template_id=<$mt:BuildTemplateID$>
    &amp;limit=<$mt:Var name="entries_per_page"$>
    <mt:If name="main_index">
        &amp;archive_type=Index
    <mt:Else>
        &amp;archive_type=<$mt:ArchiveType$>
    </mt:If>
    <mt:Ignore><カテゴリ-年別などの場合は予約変数名を変更する</mt:Ignore>
    <mt:If name="category_archive">
        &amp;category=<$mt:CategoryID$>
    </mt:If>
    &amp;page=
</mt:SetVarBlock>

<mt:Ignore>スクリプトのパスをクリーンアップ</mt:Ignore>
<$mt:GetVar name="search_link" strip="" trim="1" setvar="search_link"$>

<mt:Ignore>総エントリー数集計(全エントリー数 or アーカイブ毎のエントリー数)</mt:Ignore>
<mt:If name="archive_template">
    <$mt:ArchiveCount setvar="total_entry_count"$>
<mt:Else>
    <$mt:BlogEntryCount setvar="total_entry_count"$>
</mt:If>

<mt:Ignore>総エントリー数が1ページあたりのエントリー数を上回っていたら、ナビゲーションを表示</mt:Ignore>
<mt:If name="total_entry_count" gt="$entries_per_page">
    <mt:If name="search_results">
        <mt:Ignore>mt-search用</mt:Ignore>
        <$mt:CurrentPage setvar="cur_page"$>
        <ul>
        <mt:IfPreviousResults>
            <li><a href="<$mt:PreviousLink$>" rel="prev">&lt; 前へ</a></li>
        </mt:IfPreviousResults>
        <mt:IfMoreResults>
            <li><a href="<$mt:NextLink$>" rel="next">次へ &gt;</a></li>
        </mt:IfMoreResults>
        </ul>
        <ol>
        <mt:PagerBlock>
            <mt:If name="__value__" eq="$cur_page">
                <li><em><$mt:GetVar name="__value__"$></em></li>
            <mt:Else>
                <li><a href="<$mt:PagerLink$>"><$mt:GetVar name="__value__"$></a></li>
            </mt:If>
        </mt:PagerBlock>
        </ol>
    <mt:Else>
        <mt:Ignore>スタティックページ用</mt:Ignore>
        <$mt:GetVar name="total_entry_count" setvar="page_count"$>    <mt:Ignore>e.g.) 52</mt:Ignore>
        <$mt:SetVar name="page_count" op="--"$>                       <mt:Ignore>e.g.) 51</mt:Ignore>
        <$mt:SetVar name="modulo" value="$page_count"$>               <mt:Ignore>e.g.) 51</mt:Ignore>
        <$mt:SetVar name="modulo" op="%" value="$entries_per_page"$>          <mt:Ignore>e.g.) 1</mt:Ignore>
        <$mt:SetVar name="page_count" op="-" value="$modulo"$>        <mt:Ignore>e.g.) 51</mt:Ignore>
        <$mt:SetVar name="page_count" op="/" value="$entries_per_page"$>      <mt:Ignore>e.g.) 5</mt:Ignore>
        <$mt:SetVar name="page_count" op="++"$>                       <mt:Ignore>e.g.) 6</mt:Ignore>
        <ul>
            <li><a href="<$mt:GetVar name="search_link">2" rel="next">次へ &gt;</a></li>
        </ul>
        <ol>
        <mt:For var="page_no" from="1" to="$page_count">
            <mt:If name="__first__">
                <li><em>1</em></li>
            <mt:Else>
                <li><a href="<$mt:GetVar name="search_link"><$mt:GetVar name="page_no"$>"><$mt:GetVar name="page_no"$></a></li>
            </mt:If>
        </mt:For>
        </ol>
    </mt:If>
</mt:If>

記事表示MTML


下記のようにmt:Entriesにモディファイアの設定が必要。


<mt:Ignore><$mt:SetVar name="entries_per_page" value="10"$></mt:Ignore>
<$mt:EntriesOnIndex setvar="entries_per_page"$>
<mt:Entries limit="$entries_per_page" search_results="1">
    <!-- Do something -->
</mt:Entries>

備考


「テンプレートはインデックスではないアーカイブタイプのブログ記事リストでなければなりません」のエラーが出た場合は、データベースの操作が必要。(「カテゴリ別記事リスト」テンプレートのページ送りエラーの対処法 - eigerで作るMovableType


MTでSSLページと非SSLページのリンク制御

フォームなどでSSLに遷移した場合、絶対URIでリンクを記述しない限りフォーム以外のページもSSLでページ遷移し続けてしまう。その解決策の案。


MTML(モジュール)


<mt:If name="ssl_on" value="1">
<mt:MultiBlog blog_ids="1">
<mt:SetVarBlock name="http_host_link"><$mt:BlogURL regex_replace="/\/$/",""$></mt:SetVarBlock>
</mt:MultiBlog>
<mt:Else>
<$mt:SetVar name="http_host_link" value=""$>
</mt:If>

MTML(ナビゲーションなどのテンプレート)


<$mt:SetVar name="ssl_on" value="0">
<$mt:Include module="SSLTest" parent="1"$>
<p><$mt:Var name="http_host_link"$>/test/index.html</p>

<$mt:SetVar name="ssl_on" value="1">
<$mt:Include module="SSLTest" parent="1"$>
<p><$mt:Var name="http_host_link"$>/test/index.html</p>

出力結果


/test/index.html

http://www.anothersky.pw/test/index.html