Movable Type 備忘録

 

 cron 使ってテンプレートを切り替える

こんばんわ^^

わたしのサイトでやってるテンプレートの切り替えの方法について訪問者さんから質問があったので、この場をお借りしてお答えします。

テンプレートの切り替えは、今は cron を使ってます。
cron とはサーバの機能の 1 つでして、さくらインターネットや引っ越したばっかりの CORESERVER で提供されているサービスの 1 つです。

具体的には、cron を使って複数の CSS のディレクトリ先を定期的に変更することで、テンプレートが切り替わるしくみです。

ディレクトリ先を動的に変更するには、以前こちらのシンボリックリンクでMovableType3.32アップグレードでご紹介したことのある、シンボリックリンクを使用します。
シンボリックリンクとは、ファイルやディレクトリへのリンクファイルを作成することができる Linux 系サーバのコマンドです。

わたしのサイトでは、右図のように http://bizcaz.com/css/theme/ というディレクトリは実在せず、theme/ のリンク先を、以下のスクリプトを cron で実行させて変更しているわけです ( ̄∇ ̄)b

styles_switcher.php

  1. <?php
  2.     // スタイルを格納しているディレクトリ名称の配列
  3.     $styles = array('bladesilver', 'gryffindor', 'ralph', 'stingray');
  4.     // 配列のインデックス
  5.     $idx = 0;
  6.     // スタイル変更後のインデックス格納ログファイル
  7.     $file = 'styles_switcher.log';
  8.  
  9.     // 強制切り替えオプションが指定されたか否かをチェックします
  10.     if (isset($_REQUEST['force'])) {
  11.         // 指定インデックスを取得します
  12.         $idx = $_REQUEST['force'];
  13.     }
  14.     else {
  15.         // ログファイルの存在チェックします
  16.         if (file_exists($file)) {
  17.             // ログファイルから前回のインデックスを取得します
  18.             $fp = @fopen($file, 'r');
  19.             flock($fp, LOCK_EX);
  20.             $idx = fgets($fp);
  21.             fclose($fp);
  22.         }
  23.  
  24.         // インデックスをカウントアップします
  25.         $idx++;
  26.     }
  27.  
  28.     $idx = $idx & 3;
  29.     // theme/ のリンク先を今回適用するスタイルのディレクトリに変更します
  30.     $cmd = sprintf('rm theme; ln -s %s/ theme', $styles[$idx]);
  31.     $last = system($cmd, $retval);
  32.  
  33.     // 適用後のインデックスをログファイルに保存します
  34.     $fp = @fopen($file, 'w+');
  35.     flock($fp, LOCK_EX);
  36.     fputs($fp, $idx);
  37.     fclose($fp);
  38.  
  39.     echo $idx;
  40. ?>

カンタンに説明すると、

  1. ディレクトリ別に適用したいスタイルを作成します。
    その中には、スタイルシートやイメージファイルなどを事前に格納しておきます。

  2. 3 行目の記述に各スタイルのディレクトリ名称を記述します。
    わたしのサイトを例にすると以下のようなディレクトリ構成になります。

    http://bizcaz.com/css/
    |
    +-- bladesilver/ <-- テーマ1
    +-- gryffindor/  <-- テーマ2
    +-- ralph/       <-- テーマ3
    +-- stingray/    <-- テーマ4
    
  3. そして、16 行目あたりで前回(現在)表示したスタイルのインデックスをログファイルから取得します。

  4. そのインデックスをカウントアップして次のスタイルのインデックスを取得しているのが 25 行目になります。

  5. 30、31 行目で今回適用するスタイルのディレクトリを、シンボリックリンクを使って theme/ のリンク先に変更します。
    シンボリックリンクは以下のようなコマンドになります。

    # ln -s [リンク先ディレクトリ名称] [リンク名]
    
  6. 最後に 34 行目あたりで適用したスタイルのインデックスをログファイルに保存します。

以上が上記スクリプトのカンタンな説明です。
以下のスクリプトは、実際に cron で処理させるためのものです。

styles_switcher.sh

  1. cd ~/public_html/css
  2. php styles_switcher.php

以上がわたしのサイトで実際に使っている、テンプレートの切り替えの方法になります。

ざっくりと説明しましたがわかっていただけましたか!?
分からないことがありましたらご連絡ください ( ̄∇ ̄)/

最後に、テンプレート内に記述するスタイルシートの記述は、各スタイルのディレクトリ先が変更されても以下のように固定されます。

<link rel="stylesheet" href="http://bizcaz.com/css/theme/theme.css" type="text/css" />

 Trackback Pings(0)

No trackbacks found.

 Comments(0)

No comments found.

 Post a Comment

コメント用フィード