smartyの最近のブログ記事

http://itime.tk/tag/smarty/

どうも上記のサイトがリンク切れなので、
内容をこちらに書くと、スマーティで暗黙的にPHPが使えるらしく、
私が良く使うstr_padの場合

・smarty
{$hoge_id|str_pad:3:"0":STR_PAD_LEFT}

・php
str_pad($hoge_id,3,"0",STR_PAD_LEFT);

最近になってようやく気が付いたのだが、
smartyで、配列のkeyに変数を入れるにはどうしたらよいのか?

ちょっと調べてみると、

smarty内で、配列内のkeyに変数を叩き込むには
{$x.$y}
でオッケーらしい

いつもようにmapleを使用しているので、
もしforeachやsection内で使用している場合にはうまくいかないことがある。
{$x.$v.hoge}などのケース

{foreach from=$action.DTO.hoge|smarty:nodefaults key=k item=v}
{assign var="y" value=$v.hoge}{$x.$y}
{/foreach}
でうまくいったっぽい

デフォルトのmodifierに、mb_truncateなんてないんだよねー。
ってことで、ここにおててます。
http://kawama.jp/archives/2006/02/smartymb_trunca.html

で、使用してみたのですが、
文字コードの指定がないとうまくいかない。
区切り文字付近が文字化けするもよう。

なので、mb_substr(,$lang);
追加。

function smarty_modifier_mb_truncate($string, $length = 80, $etc = '...',$break_words = false, $middle = false , $lang='EUC-JP')
{
    if ($length == 0)
        return '';

if (mb_strlen($string) > $length) {
$length -= mb_strlen($etc);
if (!$break_words && !$middle) {
$string = preg_replace('/\s+?(\S+)?$/', '', mb_substr($string, 0, $length+1,$lang));
}
if(!$middle) {
return mb_substr($string, 0, $length,$lang).$etc;
} else {
return mb_substr($string, 0, $length/2,$lang) . $etc . mb_substr($string, -$length/2,$lang);
}
} else {
return $string;
}
}


mapleだと定数から$langを引っ張ってきてもいいかも。

// 改行が含まれるときちんと表示されない模様。うーん。

このアーカイブについて

このページには、過去に書かれたブログ記事のうちsmartyカテゴリに属しているものが含まれています。

前のカテゴリはSEOです。

次のカテゴリはThunderbirdです。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。