まとめ ブログ ダウンロード 掲示板 メール

れぶろぐ

< 2006-05-31 (水) 2006-06-03 (土) > 最新


2006-06-02 (金)

Ethna のテンプレートエンジンに Simplate を使う

Ethna のテンプレートエンジンに、 Simplate を使えないか試してみる。

Ethna.php の以下の行をコメントアウト。

include_once('Smarty/Smarty.class.php');

class/Ethna_Controller.php の $smarty =& new Smarty(); の部分を 以下のように変更。

$smarty =& new simplate();
$smarty->left_delimiter  = '{';
$smarty->right_delimiter = '}';

これだけだと、 Smarty で使えて Simplate で使えない関数の部分でエラーが出るので、 さらに以下の箇所を修正。

  • class/Ethna_Controller.php の中で、register_modifier(), register_function(), register_block() を呼んでいる箇所を全てコメントアウト
  • class/Ethna_ViewClass.php の中で、assign_by_ref() を呼んでいる箇所を全て assign() に変更

これで、デフォルトの index.php は表示できた。


次に、Ethna のチュートリアルのサンプルを、 テンプレートを修正して動くようにしてみる。

まず、以下の箇所がひっかかる。

{foreach from=$errors item=error}
  <li>{$error}</li>
{/foreach}

Simplate では foreach 文は使えないようなので、 代わりに section 文を使って以下のように書く。

{section name=i loop=$errors}
  <li>{$errors[i]}</li>
{/section}

次に、以下の箇所でひっかかる。

{message name="password"}

こういう Smarty 関数の呼び出しは Simplate ではできないので、 とりあえずこの部分は削除する。

以上の修正で、チュートリアルのサンプルも動かすことができた。

Tags: Ethna Simplate | このエントリを含む del.icio.us | このエントリを含むはてなブックマーク | このエントリを含む livedoor クリップ | Permalink

Ethna のテンプレートエンジンに Simplate を使う (2)

{message name="password"} と Smarty 関数を使っているところを、 PHP の関数の直接呼び出しにしたら動くんじゃないかと思い、 以下のように書き換えてみた、

{smarty_function_message('password')}

ところが、以下のようなエラーが出る。

Sample[747](WARNING): global.smarty_function_message(/tmp/login.tpl:17): [PHP] E_WARNING: Missing argument 2 for smarty_function_message(), called in /home/revulo/Ethna/sample/tmp/login.tpl on line 17 and defined in /usr/share/php/Ethna/class/Ethna_SmartyPlugin.php on line 417
Sample[747](WARNING): global.extract(class/Ethna_SmartyPlugin.php:421): [PHP] E_WARNING: extract() [function.extract]: First argument should be an array in /usr/share/php/Ethna/class/Ethna_SmartyPlugin.php on line 421

なに? 配列をよこせだと? おまけにもう1つ引数が必要?? どういう関数になっているのか見てみる。

function smarty_function_message($params, &$smarty)
{
    $c =& Ethna_Controller::getInstance();
    extract($params);
    $action_error =& $c->getActionError();
    print htmlspecialchars($action_error->getMessage($name));
}

ということは、 array('name' => 'password') みたいな連想配列を引数に取るということか? あと、2番目の引数が必須になっているが、その割に使われていない。 これは、内部で smarty_function_message() を呼び出すような 別の関数を作らないとダメかな。

Tags: Ethna Simplate | このエントリを含む del.icio.us | このエントリを含むはてなブックマーク | このエントリを含む livedoor クリップ | Permalink
本日のリンク元

編集