ブログ記事/ウェブページ混在のエントリーのリスティングを行うテンプレートの実装例をご紹介します(Power CMS for MTのインストールされていない環境でも動作します)。

これを実現するにはMTテンプレートの「ハッシュ」を活用します。keyに日付をセットし(重複する可能性があるので、entry_idを末尾につけています)、 mt:entriesmt:pages のループの中でフィードの中身をvalueとしてハッシュにセットし、keyでソートして mt:loop で取り出します。

下記の例ではatom.xmlテンプレートにブログ記事+ウェブページを混在して表示させます。

<$mt:HTTPContentType type="application/atom+xml"$><?xml version="1.0" encoding="<$mt:PublishCharset$>"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title><$mt:BlogName remove_html="1" encode_xml="1"$></title>
    <link rel="alternate" type="text/html" href="<$mt:BlogURL encode_xml="1"$>" />
    <link rel="self" type="application/atom+xml" href="<$mt:Link template="feed_recent"$>" />
    <id>tag:<$mt:BlogHost exclude_port="1" encode_xml="1"$>,<$mt:TemplateCreatedOn format="%Y-%m-%d"$>:<$mt:BlogRelativeURL encode_xml="1"$>/<$mt:BlogID$></id>
    <updated><mt:Entries lastn="1"><$mt:EntryModifiedDate utc="1" format="%Y-%m-%dT%H:%M:%SZ"$></mt:Entries></updated>
    <mt:If tag="BlogDescription"><subtitle><$mt:BlogDescription remove_html="1" encode_xml="1"$></subtitle></mt:If>
    <generator uri="http://www.sixapart.com/movabletype/"><$mt:ProductName version="1"$></generator>

<$mt:SetVar name="lastn" value="15"$>
<$mt:SetVar name="entries" function="undef"$>

<mt:Entries lastn="$lastn">
<mt:SetVarBlock name="key"><mt:EntryDate format_name="iso8601">-<mt:EntryID></mt:SetVarBlock>
<mt:SetVarBlock name="entries" key="$key">
<entry>
    <title><$mt:EntryTitle remove_html="1" encode_xml="1"$></title>
    <link rel="alternate" type="text/html" href="<$mt:EntryPermalink encode_xml="1"$>" />
    <id><$mt:EntryAtomID$></id>

    <published><$mt:EntryDate utc="1" format="%Y-%m-%dT%H:%M:%SZ"$></published>
    <updated><$mt:EntryModifiedDate utc="1" format="%Y-%m-%dT%H:%M:%SZ"$></updated>

    <summary><$mt:EntryExcerpt remove_html="1" encode_xml="1"$></summary>
    <author>
        <name><$mt:EntryAuthorDisplayName encode_xml="1"$></name>
        <mt:If tag="EntryAuthorURL"><uri><$mt:EntryAuthorURL encode_xml="1"$></uri></mt:If>
    </author>
    <mt:EntryCategories>
        <category term="<$mt:CategoryLabel encode_xml="1"$>" scheme="http://www.sixapart.com/ns/types#category" />
    </mt:EntryCategories>
    <mt:EntryIfTagged><mt:EntryTags><category term="<$mt:TagName normalize="1" encode_xml="1"$>" label="<$mt:TagName encode_xml="1"$>" scheme="http://www.sixapart.com/ns/types#tag" />
    </mt:EntryTags></mt:EntryIfTagged>
    <content type="html" xml:lang="<$mt:BlogLanguage ietf="1"$>" xml:base="<$mt:BlogURL encode_xml="1"$>">
        <$mt:EntryBody encode_xml="1"$>
        <$mt:EntryMore encode_xml="1"$>
    </content>
</entry>
</mt:SetVarBlock>
</mt:Entries>

<mt:Pages lastn="$lastn">
<mt:SetVarBlock name="key"><mt:PageDate format_name="iso8601">-<mt:PageID></mt:SetVarBlock>
<mt:SetVarBlock name="entries" key="$key">
<entry>
    <title><$mt:PageTitle remove_html="1" encode_xml="1"$></title>
    <link rel="alternate" type="text/html" href="<$mt:PagePermalink encode_xml="1"$>" />
    <id><$mt:EntryAtomID$></id>

    <published><$mt:PageDate utc="1" format="%Y-%m-%dT%H:%M:%SZ"$></published>
    <updated><$mt:PageModifiedDate utc="1" format="%Y-%m-%dT%H:%M:%SZ"$></updated>

    <summary><$mt:PageExcerpt remove_html="1" encode_xml="1"$></summary>
    <author>
        <name><$mt:PageAuthorDisplayName encode_xml="1"$></name>
        <mt:If tag="PageAuthorURL"><uri><$mt:PageAuthorURL encode_xml="1"$></uri></mt:If>
    </author>
    <mt:PageFolder>
        <category term="<$mt:FolderLabel encode_xml="1"$>" scheme="http://www.sixapart.com/ns/types#category" />
    </mt:PageFolder>
    <mt:PageIfTagged><mt:PageTags><category term="<$mt:TagName normalize="1" encode_xml="1"$>" label="<$mt:TagName encode_xml="1"$>" scheme="http://www.sixapart.com/ns/types#tag" />
    </mt:PageTags></mt:PageIfTagged>
    <content type="html" xml:lang="<$mt:BlogLanguage ietf="1"$>" xml:base="<$mt:BlogURL encode_xml="1"$>">
        <$mt:PageBody encode_xml="1"$>
        <$mt:PageMore encode_xml="1"$>
    </content>
</entry>
</mt:SetVarBlock>
</mt:Pages>

<$mt:SetVar name="i" value="0"$>
<mt:Loop name="entries" sort_by="key reverse">
<$mt:SetVar name="i" op="++"$>
<mt:If name="i" le="$lastn">
<$mt:GetVar name="__value__"$>
</mt:If>
</mt:Loop>

</feed>

Power CMS for MTのサポートへお問い合わせいただいた際にプラグインを書くと言う方法を検討したのですが、標準のテンプレートタグで出来るという話がスタッフからあがり、このテンプレートを作成しました。かなりプログラミングライクなことがMTMLで出来ることがおわかりいただけると思います。

カテゴリー:テンプレート作成Tips

エントリー(ブログ記事/ウェブページ)やカテゴリ、ブログをグループ化するPower CMS for MTのグループ機能を利用して、カテゴリアーカイブに表示する項目と表示順を自在にカスタマイズする設定及びテンプレートについてご紹介します。 この設定については、導入いただいている複数のお客さまからのご要望で製品にマージされた機能です。

エントリーグループ機能のインターフェイス

設定手順は下記の通りです。

  • カテゴリー名と同名のエントリーグループを作成する
  • カテゴリーアーカイブに表示させたいエントリーをDrag & Dropでグループに登録する
  • グループの設定で「新しく追加されるブログ記事を末尾(又は先頭)に追加する 条件:カテゴリーが[カテゴリ名]」を指定する
  • ブログのCategoryGroupSyncプラグイン設定で「カテゴリ保存時に同名のグループを保存する」チェックボックスにチェックを入れて保存する

グループの設定

各カテゴリー名と同名のグループを作成したら、カテゴリーアーカイブのエントリー一覧のテンプレートのMTEntriesにあたる部分を下記のように変更します。

<$MTCategoryLabel setvar="category_label"$>
<MTItemGroupEntries group="$category_label">
    <MTItemGroupEntriesHeader>
    <ul>
    </MTItemGroupEntriesHeader>
        <MTIf tag="EntryClass" eq="page">
            <li><a href="<$MTPagePermalink escape="html"$>"><$MTPageTitle escape="html"$></a></li>
            <MTElse>
            <li><a href="<$MTEntryPermalink escape="html"$>"><$MTEntryTitle escape="html"$></a></li>
            </MTElse>
        </MTIf>
    <MTItemGroupEntriesFooter>
    </ul>
    </MTItemGroupEntriesFooter>
</MTItemGroupEntries>

最後に当該のブログのプラグイン設定で「CategoryGroupSync」プラグインの設定で「カテゴリー保存時に同名のグループを保存する」チェックボックスにチェックを入れ、グループの設定項目を指定して設定を保存します。

プラグイン設定画面(CategoryGroupSync)

これで、カテゴリーが新しく作成された時に同名のグループが指定した設定で自動的に生成されるようになり、カテゴリアーカイブの表示項目、表示順をグループ機能のDrag & Dropで自在に設定できるようになります。

カテゴリアカイブの表示項目を柔軟に設定したいとお考えの方は是非お試しください。

カテゴリー:テンプレート作成Tips

このウェブサイトはMovable Type Enterprise + Power CMS for MTで構築・運用されていますが、先ほどこのブログ(Power CMS for MT ブログ)の右サイドバーの内容を修正しました。このカスタマイズについてご紹介します。

アクセスの多いエントリーのリスト

アクセスの多いブログ記事のリストを表示する

Power CMS for MTにはページビューを管理画面で確認できるアクセス解析機能が実装されています。ページビューの確認だけで流入経路等は確認できませんので Google Analytics 等を導入している方も多いのですが、Power CMS for MTのアクセス解析機能には次のような活用方法があります。

  • アクセスの状況をテンプレートタグで出力できる(ホットな話題をサイトに表示することができます)。
  • サイト内検索キーワードやクリックされたタグの状況が確認できる(検索にヒットした件数も把握できるので、サイト内検索のキーワードの状況を見ながら 検索結果に類似キーワードを表示する ようなカスタマイズを施すことができます)。
  • タグクラウドを利用している場合は良くクリックされるタグをテンプレートタグで出力することができます。

下記の例は、直近7日間のアクセスの多いブログ記事を出力する例です。MTHotEntryCountタグを使うことでアクセス数(ページビュー)を出力することも可能です。

<ul>
<MTHotEntries period="last7days" class="entry" lastn="5"> 
    <li><a href=”<$MTEntryPermalink$>”><$MTEntryTitle escape="html"$></a></li>
</MTHotEntries>
</ul>

アクセス解析画面

カテゴリの表示項目・表示順を指定する

カテゴリ「その他」を追加した際に「その他」が最上部に表示されてしまいましたので、MTCategoriesタグでの出力をやめ、Power CMS for MTのMTItemGroupタグによる出力に切り替えました。

Power CMS for MTの「グループ」機能ではカテゴリの表示順を指定するだけでなく、複数のグループを作成してモジュールのように扱えます。カテゴリの他、ブログ、エントリ、ブログ/カテゴリ/エントリの混在といった各種グループを作成することが出来ます。

下記はグループ名「カテゴリ」のグループを指定順に表示させるテンプレートの記述例です。

<MTItemGroupCategories group="カテゴリ">
    <MTIf tag="CategoryCount">
    <li><a href="<$MTCategoryArchiveLink$>"><$MTCategoryLabel escape="html"$></a></li>
    </MTIf>
</MTItemGroupCategories>

カテゴリーのソート指定

再構築の軽量化・高速化

このブログの右側のサイドバーは各アーカイブで共通ですから、この部分をファイルに出力してサーバーサイドでインクルードすることで軽量化・高速化を図ることが出来ますが、今回はPower CMS for MTのテンプレートキャッシュタグであるMTRequestCacheBlockタグを使うことで軽量化・高速化を図りました。

このテンプレートタグはkey,blog_idモディファイアでテンプレートの部分を識別して一度のリクエスト(mt.cgiへのリクエスト)で構築される各ページにおいて一度再構築したデータをメモリにキャッシュして2ページ目以降ではそのデータが使われるというものです(SQLのクエリ等は一切発行されないため、再構築の高速化が可能です)。

<MTRequestCacheBlock key="RightMenu">
    <!--右側サイドバーのテンプレート-->
</MTRequestCacheBlock>

これによって、約1分かかっていた再構築が30秒前後と倍速になりました。大規模サイト等で再構築に時間がかかるとお悩みの方は是非お試しください。

カテゴリー:テンプレート作成Tips

テキストの検索・置換が行えるReplacerプラグインを公開します(Power CMS for MTのインストールされていない環境でも動作します)。Movable Type 4 及び 5に対応しています。

Movable Typeでは標準で regex_replace モディファイアが利用できますが、このプラグインでは複数のテキストの検索・置換が行えるため、テンプレートをよりシンプルに記述することが可能になります。

特定の用語をリンクに置換したりabbr要素に置換する、表記の揺れを統一する等の用途が考えられるかと思います。

各ブログのプラグイン設定で検索・置換テーブルセパレータを指定します。

Replacerプラグインの設定画面

テンプレートの記述方法

適用したいMTタグにモディファイア replacerを指定します。

<mt:foo replacer="1">

プラグインのダウンロード

※ダイナミックパブリッシング対応しました。

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

カテゴリー:プラグイン

Movable Typeにユーザー情報を一括登録するプラグインを公開します(Power CMS for MTのインストールされていない環境でも動作します)。Movable Type 4 及び 5に対応しています(PerlモジュールText::CSV_XS又はText::CSVが必要です)。

CSVのフォーマット

ユーザー名,表示する名前,メールアドレス,言語,ステータス,パスワード,権限1,権限2...
user1,管理部長,foo@alfasado.jp,ja,1,password,0_システム管理者,
user2,総務課長,bar@alfasado.jp,ja,1,password,2_会員ページの閲覧,2_メールマガジンの購読

※1行目(項目名)は必要ありません。

権限はいくつでも登録できます。_で区切られた権限名の前の数字は登録するブログのIDです(「0_システム管理者」とするとシステム管理権限が設定されます)。

同一のユーザー名が存在する場合は上書きされますのでご注意ください。

ユーザーの一覧画面に追加されるボタン

プラグインのダウンロード

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

カテゴリー:プラグイン

※このリリースはPower CMS for MTユーザー様向けのβリリースです。

Movable Type 4 及び 5に対応したフォルダ/静的タグアーカイブを追加するプラグインです。ダイナミックパブリッシングには対応していません。

先日弊社で開催されたHack-A-Thonの時にフォルダアーカイブのベースを書いたのですが、細かな点を改良し新たに静的タグアーカイブを追加しました。

「フォルダアーカイブ」はウェブサイト|ブログともに「ウェブページアーカイブ」のマッピングに表示されます。「タグアーカイブ」はウェブサイトでは「ウェブページアーカイブ」のマッピングに、ブログではブログ記事リストのマッピングに表示されます。

アーカイブマッピングの選択(フォルダとタグが追加される)

フォルダアーカイブの記述例

<MTSetFolderContext>
<MTParentFolders glue="/" setvar="folder_path"><MTFolderLabel></MTParentFolders>
<h1><MTFolderLabel></h1>
<MTPages folder="$folder_path">
    <MTPageTitle>...
</MTPages>
</MTSetFolderContext>

タグアーカイブの記述例

<MTSetTagContext>
<h1><mt:var name="tag_name"></h1>
<MTEntries tag="$tag_name">
    <MTEntryTitle>...
</MTEntries>
</MTSetTagContext>

※MTSetFolderContext/MTSetTagContextタグはテンプレートのプレビューのためのタグです。

プラグインのダウンロード

(Power CMS for MTサポートサイトへのログインアカウントが必要です)

カテゴリー:プラグイン

Power CMS for MTにはMovable Type標準の検索以外に2種類の独自の検索のしくみを持っています。1つはすべてのエディションに標準で付属しているPHPを利用したSQL検索(AltSearch)、もうひとつはEnterpriseエディションに付属しているPowerSearchです。

AltSearchではカテゴリや日付による検索結果の絞り込み、表示順の指定、ページ送りなど、PowerSearchではPDFやMS Officeドキュメントを含む全文検索が可能です。

これらの検索のしくみを使って『「もしかして」検索』と呼ばれる類似キーワードの表示や特定キーワードの検索リクエストに対して特定のページへの導線(リンクやバナー等)を表示させることが可能です。

以下の例はPowerCMSテンプレートセットをインストール済みの環境で、各テンプレートに対して記述する方法です。ここでは、検索ワード「MT」で検索された結果に「Movable Type」を類似語として表示させる例をご紹介します。

『「もしかして」検索』の類似キーワードの表示例

AltSearch(「検索結果(ダイナミック)」テンプレート)での記述例

<mt:altsearchquery setvar="search_query">
<mt:if name="search_query" eq="MT">
<p>
もしかして
<a href="<MTAltSearchurl>?query=Movable%20Type">
「Movable Type」
</a>?
</p>
</mt:if>

LogViewerプラグインのアクセスログ表示では、サイト内検索の検索語とマッチした件数の統計が確認できますので、検索にマッチしなかった語に対する代替検索語を提供したり、特定の検索語での検索リクエストに対してランディングページへのリンクやバナーを表示することでサイトのユーザビリティを上げることが可能です。

PowerSearch(「Hyper Estraier 検索結果」テンプレート)での記述例*

* MTEstraierMetaブロックタグ内に記述する必要があります。Enterprise版のみで利用可能。

<mt:if name="__qurey__" eq="MT">
<p>
もしかして
<a href="<$MTCGIRelativeURL$><$MTEstraierScript$>?query=Movable%20Type&amp;blog_id=<$MTBlogID$>&amp;[...other parameter]">
「Movable Type」
</a>?
</p>
</mt:if>

likeモディファイアの正規表現によるマッチングを活用すれば、より柔軟にカスタマイズが可能になります。是非ご活用ください。

カテゴリー:テンプレート作成Tips技術情報

Power CMS for MTの強力なグループ機能を利用すれば、ブログ記事/ウェブページ/カテゴリ/フォルダ/ブログ(あるいはそれらの混在)をドラッグ&ドロップでグループ化し、表示順を自由に指定できます。

オブジェクト・グループの編集画面(クリックで拡大)

この機能をさらに活かすために、登録されているグループを順番に取得するブロックタグ(プラグイン)を作成しましたので公開します(Power CMS for MTが必要です)。

※現在のところスタティック・パブリッシング専用です

インストール

OptionPluginsの中のObjectGroupプラグインをインストールして有効にし、ObjectGroupプラグインまたはPowerCMSプラグインディレクトリにダウンロードしたObjectGroupsプラグインを設置してください。

テンプレートタグ

各グループを取り出すブロック・タグ
  • MTEntryGroups(エントリーグループ(MTItemGroupEntries))
  • MTCategoryGroups(カテゴリーグループ(MTItemGroupCategories))
  • MTBlogGroups(ブログ・グループ(MTItemGroupBlogs))
  • MTObjectGroups(オブジェクトグループ(MTObjectGroupItems))
各ブロック・タグで指定できるモディファイア
  • blog_id('0'を指定するとシステムメニューで作成したグループを、'*'を指定するとすべてのブログを対象にします)
  • blog_ids(カンマ区切り)
  • lastn(出力件数)
  • sort_by(ソート順/デフォルトではID)
  • sort_order(ascend-昇順/descend-降順)
各ループの最初/最後を判別するブロック・タグ
  • MTEntryGroupsHeader(MTEntryGroupsFooter)
  • MTCategoryGroupsHeader(MTCategoryGroupsFooter)
  • MTBlogGroupsHeader(MTBlogGroupsFooter)
  • MTObjectGroupsHeader(MTObjectGroupsFooter)
各ループの中でグループの情報を取得するファンクション・タグ
  • MTGroupName(グループの名称)
  • MTItemCount(グループに登録されているアイテム数)

テンプレート

以下のテンプレートでは、ObjectGroupの名前とアイテム数を出力します。

<MTObjectGroups blog_ids="1,3">
<MTObjectGroupsHeader>
<table border="1">
    </MTObjectGroupsHeader>
    <tr>
        <td>
            <$MTGroupName$></td>
        <td>
            <$MTItemCount$></td>
    </tr>
    <MTObjectGroupsFooter>
</table>
</MTObjectGroupsFooter>
</MTObjectGroups>

具体的には、以下のようにすることで各グループのループを順番に取り出すことができます。取得したグループ名をSetVarしてグループを特定します。こちらもObjectGroupの例です。

<MTObjectGroups blog_ids="1,3">
    <$MTGroupName setvar="GroupName"$>
    <MTObjectGroupItems name="$GroupName">
        グループのアイテムを順番に出力...
    </MTObjectGroupItems>
</MTObjectGroups>

カテゴリー:テンプレート作成Tipsプラグイン

※2010年3月10日 セミナーレポートを追加しました。

ウェブ制作会社様などにご利用いただける提案用資料や導入事例、パンフレット、セミナー資料などをまとめました。ご提案などの営業活動や検討用資料としてご活用ください。

パンフレットデータのダウンロード

提案書用PPT素材のダウンロード

導入事例

レビュー記事

セミナーレポート

その他の事例や導入サイトの情報などにつきましては、お気軽にお問合せください。

カテゴリー:その他

ブログのサイトマップを表示するSiteMapプラグインを作成しましたので公開します。Power CMS for MTのインストールされたMTでのみ動作します(β版につき、サポート対象外となりますのでご了承ください)。

プラグインをインストールすると各ブログのメニュー「Power CMS」に「サイトマップを表示」というメニューが追加されます。メニューを選択することでサイトマップを表示します。

サイトマップ

カテゴリー:プラグイン

  • Alfasado
Alfasado