Category Archives: Smarty

デザイナーとの協業でのSmarty

デザイナーとの協業での工夫 Smartyプリフィルタの活用法 – maru.cc@はてな

ということで、Smartyで色々やられていますが、

http<->httpsに絶対パスで書かなくても動くようにする

というのが、参考になりましたね。

htmlを作るうえで、環境依存になりがちなのが、http領域とSSL領域を行き来するリンクです。URLに http または https から書かねばならず、絶対パスになってしまうので環境依存になります。こちらも Smartyのプリフィルタを使用して置換処理をしてしまいます。

ふむふむ。

htdocs   <-http領域のドキュメントルート htdocs.ssl <- https領域のドキュメントルート

として、

http://example.com/index.html -> https://example.com/form.html へのリンク
リンク

こんな感じでかく、と。なるほどー。
参考になりまっす。

Smartyのテンプレート内でjavascriptを使う

Smartyのテンプレート内でjavascriptを使う – パンプキンスパイスラテ

Smartyでページを構築してたら、どうしてもjavascriptの部分でエラーになってしまう。しかもSmartyのエラー。悩んで調べてみたら、どうやらSmarty内でjavascriptを使うには、<中略>{literal}~{/literal}で囲まなければならないらしい。

Smartyのテンプレート内ではそのまま使えませんね。
leteralで囲むのも良いのですが、私はよく

[php]
$config = array(
‘left_delimiter’ => ‘<{', 'right_delimiter' => ‘}>’,
);
$smaty = new Smarty($config);
[/php]

のように、オプションでデリミタを変えてしまいます。少し可読性は落ちますが、Javascriptを組むときに楽です。

SmartyでShift-jis 出力

LAMPのテクメモ: Smarty Shift-jis 出力
携帯サイトでSmartyを使っている時はやはり出力時にShift-jisに変換したいです。
できれば機種依存文字もざざっと片付けたいですね。

Zend FrameworkでSpeedy

Zend Framework/自作コンポーネント/Speedy – Revulo’s Laboratory

Zend FrameworkのテンプレートはSmartyを組み込んでしまう私ですが、Speedyを組み込んじゃおうというライブラリ。Smarty重いぜっという時に使ってみようと思います。

Smartyでこんなメソッドがあった

Smartyでこんなメソッドがあった – mtonaiの日記 – ノッキングオングループ

[smary]
{html_select_date}
[/smarty]

日付のフォームをどどっと出してくれる便利メソッドですが、使ってなかったです。
なんかイマイチ使いでが悪かったというかカスタマイズしにくかったというか。
でもコメント欄にもある、

http://www.phppro.jp/phptips/archives/vol23/#1

{html_select_date field_order=”YMD” month_format=”%m月”}

と記述すると、01月~09月となってしまい、頭に不要な0がついてしまいます。php内部で処理するための値であればそこまで気にならないかもしれませんが、表示部分で気にする人がいてダメ出しされる場合もあるでしょう。

そこで、month_format=”%m月”の「%m」の部分を「%-m」に書き換えてみましょう。これで頭の不要な0を取り除く事が出来ます。

と例を出してもらうと、何が出来るのか分かりやすいですね。

Smarty でvar_dumpとかprint_rのようにdump

Smarty でvar_dumpとかprint_rみたいに。 (こまちドーナツ)

[php]
{$array|@debug_print_var}
[/php]

ふむふむ。これは便利ですね。でもちょっと表示数が少ないような気もしますが。

Smartyで日本語などのマルチバイト文字をmb_strimwidthで丸める時の注意。

PHPの種 ブログ » Smartyで日本語などのマルチバイト文字の丸め。文字数で表示を制限する。
で、書いたmb_strimwidthを用いた方法ですが、内部エンコーディングに左右されるてしまうので、きちんと文字コードを設定しておいたほうが良いですね。まあ、mb系では内部エンコーディングに注意!なのはいつものことなのですが、mb_strimwidthはエンコードが違っても多少ちゃんと動いてしまうので見逃しやすいんですよね。

[smarty]
{$hoge|mb_strimwidth:0:16:”…”:’UTF-8’|escape}
[/smarty]

と、いうことでお気をつけくださいませ。

Smartyで文字を連結する -> cat

ふと、Smartyで文字列を連結したくなりましたが、やり方がわかりませんでした。
{$hoge + $huga}
とか?

いやいや、

cat
与えられた変数に値を連結します。

[smarty]
{$articleTitle|cat:” yesterday.”}
[/smarty]

という方法で連結します。簡単ですね。

Zend FrameworkでSmarty使用時に修正子プラグインを使うには。

Zend FrameworkのViewHelperとしてSmartyを使用している場合に、Smartyの修正子プラグインを使う時、みなさんどのように組み込んでいますか?
とりあえずや、そのコントローラ内でしか使用しない修正子の場合は、コントローラのメソッドとして書き込み、

[php]
class IndexController extends Zend_Controller_Action
{
public function indexAction()
{
$this->view->getEngine()->register_modifier(
“hoge”,
array($this, ‘smarty_modifier_hoge’)
);
}

public function smarty_modifier_hoge($string)
{
return $string . ” and hoge.”;
}
[/php]

あるいは、

[php]
$this->view->getEngine()->register_modifier(
“hoge”,
array(‘IndexController’,’smarty_modifier_hoge’)
);
[/php]

のように組み込みんだりします。

Smartyで日本語などのマルチバイト文字の丸め。

Smartyで文字を丸める時は、truncate修飾子などを使いますが、残念ながら日本語などのマルチバイトに対応していません。
ですが、PHPの関数をそのまま使用できるので、マルチバイト対応のmb_strimwidthを使ってみてはどうでしょうか。

[smarty]
{$hoge|mb_strimwidth:0:15:”…”|escape}
[/smarty]

無事丸められましたでしょうか。

mb_strlenのような文字数と勘違いしてましたが、mb_strwidthで得られるのと同じ、文字なんですよね。

自分でオリジナルの修飾子を作るのも良いと思います。