->
Smartyで通貨などの数値を出力する時に、
1,234,567
などとカンマをつけて出力したい時に一番簡単な方法は、PHPのnumber_format関数を使うことです。
SmartyはPHPの関数をそのまま修飾子に使えますので、
[smarty]
{$num|number_format}
[/smarty]
これでOKです!
->
Smartyで通貨などの数値を出力する時に、
1,234,567
などとカンマをつけて出力したい時に一番簡単な方法は、PHPのnumber_format関数を使うことです。
SmartyはPHPの関数をそのまま修飾子に使えますので、
[smarty]
{$num|number_format}
[/smarty]
これでOKです!
Smarty初心者に最適なIBMのPHP アプリケーションの表示形式と機能を Smarty で分離する。Smartyって何が便利なの? Smartyってどう使えばいいの? という方にオススメの記事です。
Smartyマニュアル を紐解くと、
{$smarty.const}
PHP 定数の値に直接アクセスできます。smarty 定数 も参照してください。
// php で定義されている定数
define('MY_CONST_VAL','CHERRIES');
?>定数を出力するテンプレート
{$smarty.const.MY_CONST_VAL}
とあります。メモメモっと。
世に色々なJavascriptツールチップライブラリがありますが、Smartyを使っている方ならとても簡単にポップアップが出せちゃいます。
とはいいつつも、Javascriptライブラリを使用するんですケド。
上記のoverLIBを使用します。
ポップアップを使いたいSmartyテンプレートで
[smarty]
{popup_init src=”/scripts/overlib.js”}
[/smarty]
overlib.jsを呼び出して、
使いたいHTMLタグに付ける属性のような感じで{popup text=”"}を記入します。
[smarty]
this
[/smarty]
これなら気軽にポップアップを使用できますね。
とっても簡単なのでさくっと出来たサンプルを置いておきます。
[smarty]
this
sticky=true
caption="PHP-SeeD"
text="
”
snapx=10
snapy=10}>PHP-SeeD
[/smarty]
Smartyマニュアルにデザインの変え方など詳しい情報が載っていますのでより詳しく知りたい方はそちらをどうぞ。
Zend Framework 1.0でSmartyを使用する
Smarty用のView_Helperですが、getScriptPathsがArrayを返すようにしないと、エラーが出てしまいますね。
[php]
/**
* 現在のテンプレートディレクトリを取得します
*
* @return string
*/
public function getScriptPaths()
{
return $this->_smarty->template_dir;
}
[/php]
これを、
[php]
/**
* 現在のテンプレートディレクトリを取得します
*
* @return array
*/
public function getScriptPaths()
{
return array($this->_smarty->template_dir);
}
[/php]
Arrayを返すように変更しておきましょう。
ソースを追ってみると、Zend_Controller_Action_Helper_ViewRendererのinit_view()メソッドで、getScriptPaths()を呼び出してます。
[php]
// Determine if this path has already been registered
$currentPaths = $this->view->getScriptPaths();
$path = str_replace(array(‘/’, ‘\\’), DIRECTORY_SEPARATOR, $path);
$pathExists = false;
foreach ($currentPaths as $tmpPath) {
if (strstr($tmpPath, $path)) {
$pathExists = true;
break;
}
}
if (!$pathExists) {
$this->view->addBasePath($path, $prefix);
}
[/php]
foreachに使うのでArrayじゃないと駄目みたいです。まあメソッド名が、getScriptPathsですし。Zend Frameworkでは、templateディレクトリを配列で複数管理することができるのですね。
もちろん使用する、というのはView_Helperとして。楽ちんですからね。2007/07/20の最新バージョンである1.0.0で動作を確認しています。
Smarty用のZendViewはマニュアルに載っています。
これを保存して、
(ドキュメント上ではZend_View_Smartyとなっていますが、
Common_View_Smartyと変更しています)
起動ファイルで
[php]
require_once ‘Common/View/Smarty.php’;
require_once ‘Zend/Controller/Action/Helper/ViewRenderer.php’;
require_once ‘Zend/Controller/Action/HelperBroker.php’;
$extraParams = array(
‘compile_dir’ => APPLICATION_PATH. ‘/views/templates_c’,
/* 他色々なSmartyオプション */
);
$view = new Common_View_Smarty(null, $extraParams);
$viewRenderer = new Zend_Controller_Action_Helper_ViewRenderer($view);
$viewRenderer->setViewBasePathSpec(APPLICATION_PATH . ‘/views/templates’)
->setViewScriptPathSpec(‘:controller/:action.:suffix’)
->setViewScriptPathNoControllerSpec(‘:action.:suffix’)
->setViewSuffix(‘tpl’);
Zend_Controller_Action_HelperBroker::addHelper($viewRenderer);
[/php]
としてやれば、ViewHelperとして動作します。
#上記APPLICATION_PATH . ‘/views/templates’はお使いのtemplate階層に合わせてください。
表題の通りなのですが、Smartyでオブジェクトのプロパティを配列の添え字に使用できません。
#実は私がやり方を知らないだけ、という可能性は多分にありますが。
どういうことかと言うと、
[smarty]
{foreach from=$list item=val}
{$hogeList[$val->id]->name|escape}
{/foreach}
[/smarty]
というようにオブジェクト($val)のプロパティ($val->id)を添え字に使用するとエラーが出てしまいます。
このような場合は
[smarty]
{foreach from=$list item=val}
{assign var=”id” value=$val->id}
{$hogeList[$id]->name|escape}
{/foreach}
[/smarty]
とすると、問題無く動作します。何かあったらAssignしてやれ、という感じで使っていますが、どうなのですかね。。
PHP構文ライクにSmartyでもfor文を使いたくなりますよね。
最近は
[code]
{section name=cnt start=0 loop=10}{assign var="i" value=$smarty.section.cnt.index}
{/section}[/code]
のような感じで使っています。カウンタを$iにassignすることで視覚的にも分かりやすくなると思います。処理的には無駄ですが、可読性は大事ということで。
#コードのハイライトで使っているiG:SyntaxHiliterがSmartyのassignを上手く処理できない?んですよね。
[smarty]
{assign var=”i” value=1}
[/smarty]
参考URL
Smartyで表示の為の条件判定が多岐にわたってくると、HTML部分から判定処理を抜き出したくなってしまいます。
可読性が悪くなりますからね。
と思って、Smartyの処理をサブルーチン化できないかなと、色々調べてみたのですが、出来ないっぽい・・?ですか?
まあ、テンプレートなのだから呼ぶ側で処理するのが正しいんですケド。
とりあえず簡単な条件判定ぐらいなら
[smarty]
{capture name=”hoge_value”}
{if isset($hoge)}
value=”{$hoge}”
{/if}
{/capture}
最近のコメント