0byt3m1n1
Path:
/
data
/
0
/
0
/
69
/
155
/
69155
/
user
/
70391
/
cgi-bin
/
movabletype
/
docs
/
[
Home
]
File: mtmanual_dynamic.html
<html> <head><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8"></META> <title>ダイナミック・パブリッシング</title> <link rel="stylesheet" href="doc-styles.css" type="text/css"> </head> <body> <h3>Movable Typeユーザー・マニュアル: ダイナミック・パブリッシング</h3> <p><a href="mtmanual.html">≪ 目次</a></p> <a name="__index__"></a> <ul> <li><a href="#dynamic publishing">ダイナミック・パブリッシング</a></li> <ul> <li><a href="#installation and requirements">インストールおよび必要条件</a></li> <ul> <li><a href="#requirements">必要条件</a></li> <li><a href="#enabling dynamic publishing">ダイナミック・パブリッシングのオン</a></li> </ul> <li><a href="#advantages of dynamic publishing">ダイナミック・パブリッシングの利点</a></li> <li><a href="#combining static and dynamic publishing">スタティック・パブリッシングとダイナミック・パブリッシングの組み合わせ</a></li> <li><a href="#optimizing your dynamic pages">ダイナミック・ページの最適化</a></li> <ul> <li><a href="#pagelevel caching">ページ・レベルのキャッシング</a></li> <li><a href="#conditional requests">条件付きリクエスト</a></li> </ul> <li><a href="#php plugin api">PHPプラグインAPI</a></li> </ul> </ul> <hr size="1" color="#CCCCCC"> <p> <h1><a name="dynamic publishing"></a>ダイナミック・パブリッシング</h1> <p>Movable Type 3.1のダイナミック・パブリッシングによって、テンプレートごとに、スタティック・ページをダイナミック・ページと組み合わせて作成することができます。 そして、ウェブログのパブリッシングとトラフィックのバランスを取ることができます。 サイトのインデックスやフィードのように頻繁にリクエストされるページでは、スタティック・ページの生成をオンにし、月ごとに更新するページや、個人的なページ、アーカイブのページなどには、ダイナミック・ページを使うといったことが可能になります。 この機能は、手動でファイルを再構築する手間を完全に省きます。たとえば、アーカイブ・テンプレートのデザインを更新する際に、サイトのデザインは、あなた自身が再構築しなくても、直ちに更新されるようになります。</p> <p> <h2><a name="installation and requirements"></a>インストールおよび必要条件</h2> <p> <h3><a name="requirements"></a>必要条件</h3> <p>Movable Typeの必要条件に加えて、ダイナミック・パブリッシング・オプションには、以下の要件が必要です。</p> <ul> <li><strong><a name="item_A_MySQL_database"></a>MySQLデータベース</strong><br>ダイナミック・パブリッシングには、リレーショナル・データベースの処理速度と即応性を必要とします。 したがって、Berkeley DBはサポートされません。 (PostgreSQLおよびSQLiteのサポートを予定していますが、3.1ではまだ未対応です。) <p></p> <li><strong><a name="item_later"></a>PHP 4.0.6以降(注: バージョンをよく確認してください。)</strong><br>さらに、インストールするPHPは、あなたのデータベースと連携するようにコンパイルされている必要があります。 <p></p> <li><strong><a name="item_Server"></a>Apache HTTPサーバーまたはマイクロソフトのInternet Information Server (IIS)</strong><br>Apache を利用する場合、 mod_rewrite モジュールの利用を推奨しますが、必須ではありません。 <p></p></ul> <p> <h3><a name="enabling dynamic publishing"></a>ダイナミック・パブリッシングを利用するには</h3> <ol> <li><strong><a name="item_Turn_on_the_dynamic_page_option_in_Movable_Type%2E"></a>Movable Typeのダイナミック・ページ・オプションを有効にする</strong><br>Movable Typeの「テンプレート」パネルに行き、「テンプレート構築の設定」メニューから、「アーカイブ・テンプレートだけをダイナミックに構築する」または「テンプレートごとに構築の設定を指定する」を選択します。 後者を選択すると、必要な各テンプレートを編集して「このテンプレートのダイナミック構築をオンにする」を選択する必要があります。 <p></p> <li><strong><a name="item_Set_up_the_template_cache_directory%2E"></a>テンプレート・キャッシュ・ディレクトリを設ける</strong><br>ウェブログのルート・ディレクトリにtemplates_cという名前で新しいサブディレクトリを作成します。 ディレクトリに777のパーミッションを設定します。 <p></p> <li><strong><a name="item_For_Apache_web_servers%3A_set_up_your_%2Ehtaccess_"></a>Apacheウェブサーバーのために、.htaccessファイルを設定する</strong><br> ウェブログ・ルート・ディレクトリに、ダイナミック・ページのリクエストを扱う.htaccessファイルを作成する必要があります。 このファイルは以下のような内容です。 <pre># Disable fancy indexes, so mtview.php gets a chance... Options -Indexes <IfModule mod_rewrite.c> # The mod_rewrite solution is the preferred way to invoke # dynamic pages, because of its flexibility. # Add mtview.php to the list of DirectoryIndex options, listing it last, # so it is invoked only if the common choices aren't present... <IfModule mod_dir.c> DirectoryIndex index.php index.html index.htm default.htm default.html default.asp /mtview.php </IfModule> RewriteEngine on # don't serve mtview.php if the request is for a real directory # (allows the DirectoryIndex lookup to function) RewriteCond %{REQUEST_FILENAME} !-d # don't serve mtview.php if the request is for a real file # (allows the actual file to be served) RewriteCond %{REQUEST_FILENAME} !-f # anything else is handed to mtview.php for resolution RewriteRule ^(.*)$ /mtview.php [L,QSA] </IfModule> <IfModule !mod_rewrite.c> # if mod_rewrite is unavailable, we forward any missing page # or unresolved directory index requests to mtview # if mtview.php can resolve the request, it returns a 200 # result code which prevents any 4xx error code from going # to the server's access logs. However, an error will be # reported in the error log file. If this is your only choice, # and you want to suppress these messages, adding a "LogLevel crit" # directive within your VirtualHost or root configuration for # Apache will turn them off. ErrorDocument 404 /mtview.php ErrorDocument 403 /mtview.php </IfModule> </pre><p>(.htaccessファイルがある場合は、その最後に上記のコードを加えてください。)</p> <p>上述の``mtview.php''スクリプトは、一度、新しい「ダイナミック・サイト起動用スクリプト」インデックス・テンプレートを再構築すると、作成されます。 ウェブログ・ルートがサイトのサブディレクトリにある場合は、``mtview.php''スクリプトへのパスを実際の場所になるよう、上記の .htaccess の設定を変更してください(例えば、ウェブログ・ルートが``weblog''ディレクトリにある場合、パスは``/weblog/mtview.php''に修正します)。</p> <p></p> <li><strong><a name="item_For_Microsoft_IIS_web_servers%2C_customize_your_er"></a>マイクロソフトIISウェブサーバーに対しては、エラー・ハンドラをカスタマイズする</strong><br>Internet Information Serverをお使いの場合は、``mtview.php''スクリプトをカスタムのエラー・ドキュメントとして使うように、ウェブ・ディレクトリを設定する必要があります。 その際は、403と404のエラーに対して使ってください。 <p></p></ol> <p> <h2><a name="advantages of dynamic publishing"></a>ダイナミック・パブリッシングの利点</h2> <ul> <li><strong><a name="item_Dynamic_pages_reflect_template_changes_immediately"></a>ダイナミック・ページではテンプレートの変更が直ちに反映されます。</strong><br> <li><strong><a name="item_Rebuild_times_are_substantially_reduced%2C_regardl"></a>再構築時間が、ウェブログの収容する投稿数に関係なく、大幅に減ります。</strong><br> <li><strong><a name="item_Comment_and_trackback_pings_made_to_your_weblog_ar"></a>アーカイブがダイナミックであれば、ウェブログに送られるコメントとトラックバックpingsも、早く処理されるようになります。</strong><br> <li><strong><a name="item_All_trackback_pings_are_listed_on_your_dynamic_arc"></a>トラックバックpingは、投稿されるとすぐに、ダイナミック・アーカーブ・ページに表示されます。</strong><br> <li><strong><a name="item_You_save_a_lot_of_disk_space_by_not_building_all_t"></a>スタティック・ファイルを再構築せずにすむことで、かなりのディスク・スペースを節約できます。</strong><br> <li><strong><a name="item_You_can_have_any_number_of_presentations_of_your_s"></a>また、ディスク・スペースの制限を心配することなく、様々なインデックス/アーカイブ・テンプレートを作成し、望んだ数だけ違うテンプレート使ってサイトを構築することができます。</strong><br> </ul> <p> <h2><a name="combining static and dynamic publishing"></a>スタティック・パブリッシングとダイナミック・パブリッシングの組み合わせ</h2> <p>Movable Type では、従来のスタティック・パブリッシングに加え、ダイナミック・パブリッシングをオプションとして加えました。 どちらか一方だけを選択する必要はありません。両方混在して使えます。</p> <p>例えば、インデックスやアーカーブ・テンプレートにはダイナミック・パブリッシングを使い、そのほかのページにはスタティック・パブリッシングを使うことができます。 これは、サイトのパブリッシングの方法に柔軟性を与えてくれます。 インデックスとAtom/RSS/RDFフィードのページにかなりのトラフィックがあるようなサイトでは、こうしたページだけをスタティックに公開する、などを実現できます。</p> <p>アーカイブ・ページは、トラフィック量が少なく、かつ、最も大きなディスク・スペースを占めるので、通常、ダイナミック・パブリッシングに適しています。</p> <p> <h2><a name="optimizing your dynamic pages"></a>ダイナミック・ページの最適化</h2> <p>ダイナミック・パブリッシングを使うと、キャッシュされない各ページのビューには、そのページを構築するため、多くのデータベース・クエリー(問い合わせ)が発生します。 ウェブサーバーの性能とテンプレートの複雑度によって異なりますが、1秒もかからないこともあれば、数秒かかる場合もあります。 以下は、ダイナミック・ページの処理速度を最適化するのに、役立つヒントです。</p> <ul> <li><strong><a name="item_For_your_main_index%2C_consider_reducing_the_numbe"></a>メイン・インデックスで、表示するエントリーの数を減らしてみましょう。 デフォルトで設定されている、過去数日分の投稿を表示する代わりに、以下のような一定数の投稿を表示する方法を使います。</strong><br> <pre><MTEntries lastn="10"> </pre><p>このパラメータは任意の値に調整できます。</p> <li><strong><a name="item_speed"></a>タグの中にはほかのタグに比べ、実行時間がより長くかかるものがあります(コンテンツを生成するクエリーは、通常、より時間がかかりまます)。 ``MTArchiveList''や``MTSubCategories''などです。</strong><br> </ul> <p> <h3><a name="pagelevel caching"></a>ページ・レベルのキャッシング</h3> <p><i>注</i>: これは実験的な機能であり、環境によってはうまく動作しないこともあります。</p> <p>ダイナミック・パブリッシングを最適化する別の方法は、ページ・レベルのキャッシングをオンにすることです。 この機能によって、ダイナミック・ページは、1つのリクエストから次のリクエストに移行する間、ファイル・システムにキャッシュされるので、スタティック・ページに近いスピードが得られます。 長期的に見ると、これはディスク・スペースをより多く消費しますが、性能上の利点がそれに勝るかもしれません。</p> <p>ページ・レベルのキャッシングをオンにするには、ウェブログのルート・ディレクトリに``cache''サブディレクトリを作成する必要があります。 さらに、777のパーミッションを与える必要があります。 次に、「ダイナミック・サイト起動用スクリプト」インデックス・テンプレートに次の行を加えます。</p> <pre>$mt->caching = true; </pre><p>この行は``$mt->view();''の行の上に加えてください。 この行を削除すると、キャッシング・オプションが無効になります。</p> <p>これを設定すると、ダイナミック・ページを表示するときに、作成したキャッシュ・ディレクトリ内にキャッシュするようになります。 キャッシュされた後は、ウェブログ・コンテンツがそのキャッシュされたページより新しい場合、またはリクエストを受けた場合に限り、1ページずつ再構築されます</p> <p> <h3><a name="conditional requests"></a>条件付きリクエスト</h3> <p>ダイナミック・ページに、条件付きリクエスト(HTTP 304応答)を設定できます。 通常、ページがダイナミックに生成される場合、ページは条件なしで生成されます。 中にはこうした状態が適しているケースがあるため、条件付きリクエストはデフォルトでオフになっています。 条件付きリクエストは``mtview.php''スクリプトに以下の行を加えると有効になります。</p> <pre>$mt->conditional = true; </pre><p>この行は``$mt->view();''の行の上に加えてください。 条件付きリクエストに関連付けられたタイムスタンプは、ウェブログが最後に変更された時間です。変更とは、コメント、トラックバックping、テンプレートなど、ウェブログのどの部分に対しての変更も意味します。</p> <p>さらに機能をアップして、条件付き動作を条件付きで設定できます。 以下はフィードのページで、この機能をオンにするコードです。</p> <pre>if (preg_match('/(index|atom)\.(rss|xml|rdf)/', $_SERVER['REQUEST_URI'])) { $mt->conditional = true; } </pre><p> <h2><a name="php plugin api"></a>PHPプラグインAPI</h2> <p>Movable Typeのダイナミック・パブリッシング・モードはプラグインもサポートします。 これまでの Perl のプラグインと比べると、アーキテクチャは異なりますが、似ている点もあります。</p> <p>PHPベースのダイナミック・パブリッシング・エンジンの2つの主要なコンポーネントは、Smarty テンプレート・パッケージ(http://smarty.php.net/)とJustin VincentのezSQLライブラリ(http://php.justinvincent.com/)です。</p> <p>Movable Typeのメイン・ディレクトリにある``php''サブディレクトリには、ダイナミック・パブリッシング・エンジンに関連するすべてのファイルとリソースがあります。</p> <pre>mt/php/ lib/ MT標準のタグとモジュール extlib/ サードパーティ・パッケージ(ezSQLとSmarty) plugins/ サードパーティMT/PHPプラグイン </pre><p>プラグインのファイルは、`plugins''ディレクトリの中に入れてください。 MT/PHPプラグインを開発するには、Smarty用のプラグインを作成する方法に精通している必要があります。 MT/PHPプラグインにおいて、カスタムblockはコンテナ・タグを、カスタムfunctionは変数タグを、およびカスタムmodifierはグローバル・フィルターを加えるためのベースとなります。</p> <ul> <li><strong><a name="item_Variable_Tags"></a>変数タグ</strong><br>カスタム変数タグを実装するプラグイン例 <ul> <li><strong><a name="item_Save_the_following_in_a_file_named_%22function%2EM"></a>以下を、``function.MTServerUptime.php''という名前のファイルに保存します。</strong><br> <pre><?php function smarty_function_MTServerUptime($args, &$ctx) { $data = shell_exec('uptime'); return $data; } ?> </pre><li><strong><a name="item_Upload_function%2EMTServerUptime%2Ephp_into_the_%6"></a>function.MTServerUptime.phpを``php/plugins''サブディレクトリにアップロードします。</strong><br> <li><strong><a name="item_In_one_of_your_dynamic_templates%2C_add_the_follow"></a>ダイナミック・テンプレートの1つに、以下を加えます。</strong><br> <pre>Uptime: <$MTServerUptime$> </pre><li><strong><a name="item_After_saving_this_dynamic_template%2C_look_at_it_w"></a>このダイナミック・テンプレートを保存した後、ブラウザにそれを表示します。 システムのuptimeコマンドからの出力が表示されているはずです。</strong><br> </ul> <li><strong><a name="item_Container_Tags"></a>コンテナ・タグ</strong><br> コンテナ・タグは変数タグよりもやや複雑です。 以下が一例です。 ``php/plugins/block.MTLoop.php''を作成します。 <pre><?php function smarty_block_MTLoop($args, $content, &$ctx, &$repeat) { if (!isset($content)) { $i = 1; } else { $i = $ctx->stash('i_value') + 1; } if ($i <= 5) { $repeat = true; } else { $repeat = false; } $ctx->stash('i_value', $i); return $content; } ?> </pre><p>次に``php/plugins/function.MTLoopIValue.php''を作成します。</p> <pre><?php function smarty_function_MTLoopIValue($args, &$ctx) { return $ctx->stash('i_value'); } ?> </pre><p></p> <li><strong><a name="item_Conditional_Tags"></a>条件タグ</strong><br> 条件タグは、コンテナ・タグの一種です。 以下に簡単な例を示します(``php/plugins/block.MTEntryIfTitle.php''に保存します)。 <pre><?php function smarty_block_MTEntryIfTitle($args, $content, &$ctx, &$repeat) { if (!isset($content)) { $e = $ctx->stash('entry'); $title = $e['entry_title']; return $ctx->_hdlr_if($args, $content, $ctx, $repeat, trim($title) != ''); } else { return $ctx->_hdlr_if($args, $content, $ctx, $repeat); } } ?> </pre><p>なお、条件タグは、そのタグ名に``If''を含め、<MTElse>コンテナ・タグと共に正しく機能するようにする必要があります。</p> <p></p> <li><strong><a name="item_Global_Filters"></a>グローバル・フィルター</strong><br> グローバル・フィルターは、Smartyの用語では、``modifier''(修飾子)と呼ばれています。 ``modifier''は簡単に作成できます(このファイルを``php/plugins/modifier.rot13.php''として保存します)。 <pre><?php function smarty_modifier_rot13($s, $arg) { // str_rot13はPHP 4.2.0以降で使用可能です。 return str_rot13($s); } ?> </pre><p>このフィルターは以下のように使います。</p> <pre><$MTEntryTitle rot13="1"$> </pre><p>$ctx変数へアクセスする必要がある場合は、グローバルの``$mt''変数を通してアクセスできます。``$mt''変数は、テンプレート・コンテキスト(Smartyオブジェクト)を返すメソッド名の付いたコンテキストを持ちます。</p> <p></p></ul> <p>Smartyルーチンの書き方についての詳細は、Smartyのウェブサイト(英語)を参照してください。 <a href="http://smarty.php.net/manual/en/plugins.php">http://smarty.php.net/manual/en/plugins.php</a></p> <hr size="1" color="#CCCCCC"> <span class="copyright">Copyright (c) 2001-2004 Six Apart. All Rights Reserved.</span> </body> </html>