「WordPressで学ぶPHP(2)データ構造(配列・オブジェクト)編」を発売しました。
本書は「WordPressで学ぶPHP(1)変数・制御構造編」の続編にあたり、PHPの「データ構造」(配列とオブジェクト)について解説します。
配列やオブジェクトは、頭の中で考えるだけでは、イメージがつかみにくいです。本書では図を多用して、配列やオブジェクトをなるべく分かりやすく解説することを心がけました。
Kindle本で、定価250円です。
EntryCategoriesタグを改良するプラグイン(その3)
EntryCategoriesタグを拡張するプラグインでは、前日解説したように、ブログ記事が属するカテゴリのブログ記事一覧を出力したり、ウェブページが属するフォルダのウェブページ一覧を出力したりすることができます。
ただ、単純にテンプレートモジュールを組むだけだと、そのテンプレートモジュールの再構築時の処理時間が、ブログ記事数やウェブページ数の二乗に比例するようになります。
この問題を避けるために、Movable Type 4.2のキャッシュ機能を利用する方法を解説します。
1.ブログ記事が属するカテゴリのブログ記事一覧を出力する場合
ブログ記事が属するカテゴリのブログ記事一覧を出力する場合、そのためのテンプレートモジュール(もしくはウィジェット)は、以下のタイミングで無効にする必要があります。
- ブログ記事が編集された
- カテゴリが編集された
したがって、キャッシュの設定は以下のように設定します。
- 「モジュールのキャッシュ」で「作成または更新後に無効にする
- 「ブログ記事」と「カテゴリ」のチェックをオンにする
ただし、このテンプレートモジュール(またはウィジェット)は、カテゴリごとに別のキャッシュを出力する必要があります。
そこで、MTIncludeタグにkeyモディファイアを指定します。
例えば、テンプレートモジュールに「同一カテゴリブログ記事」という名前を付けた場合、テンプレートモジュールをインクルードする処理は、以下のように書きます。
<MTEntryIfPrimaryCategory> <MTSetVarBlock name="entry_cat_id"><MTEntryPrimaryCategory>entry_cat_<$MTCategoryID$></MTEntryPrimaryCategory></MTSetVarBlock> <MTInclude widget="同一カテゴリブログ記事" key="$entry_cat_id"> </MTEntryIfPrimaryCategory>
2.ウェブページが属するフォルダのウェブページ一覧を出力する場合
ウェブページが属するフォルダのウェブページ一覧を出力する場合、そのためのテンプレートモジュール(もしくはウィジェット)は、以下のタイミングで無効にする必要があります。
- ウェブページが編集された
- フォルダが編集された
したがって、キャッシュの設定は以下のように設定します。
- 「モジュールのキャッシュ」で「作成または更新後に無効にする
- 「ウェブページ」と「フォルダ」のチェックをオンにする
ただし、このテンプレートモジュール(またはウィジェット)は、フォルダごとに別のキャッシュを出力する必要があります。
そこで、MTIncludeタグにkeyモディファイアを指定します。
例えば、テンプレートモジュールに「同一フォルダウェブページ」という名前を付けた場合、テンプレートモジュールをインクルードする処理は、以下のように書きます。
<MTIfArchiveType archive_type="Page"> <MTPageIfFolder> <MTSetVarBlock name="page_folder_id"><MTPageFolderEx>page_folder_<$MTFolderID$></MTPageFolderEx></MTSetVarBlock> <MTInclude widget="同一フォルダウェブページ" key="$page_folder_id"> </MTPageIfFolder> </MTIfArchiveType>