smartyでin_array

2011/01/31 | Smarty

せっかくsmartyを使うんだから、極力テンプレートにはロジックを記述したくない。しかしifやforeachなどの構文はどうしても必要になってくる。今回if構文内で配列内に値が存在するかどうかをチェックしたかったのだが・・・。

{if in_array($value,$myArray)}

こんな記述はできない。だったsmartyはPHPで記述されているが、PHPではないからだ。さてどう記述するか。

{if $value|in_array:$myArray}

修飾子を使えばよかったのか。勉強になりました。

Smartyで配列のキーが配列の時

2010/04/18 | Smarty

Smartyで配列を処理するときはこんな具合に書く。

PHP内でこんなとき・・・$vars[‘hoge’]
{$vars.hoge}

PHP内でこんなとき・・・$vars[$hoge]
{$vars.$hoge}

PHP内でこんなとき・・・$vars[‘hoge’][$fuga]
{$vars.hoge.$fuga}

さして難しいわけではないけれど、配列のキーが配列になる場合の記述がわからなかった

PHP内でこんなとき・・・$vars[$hoge[‘fuga’]]

答えはこんな感じ

{$vars[$hoge.fuga]}

Spreadsheet_Excel_Reader

2010/01/26 | PHPライブラリ

仕事でSpreadsheet_Excel_Readerを使ったんだけど、どうも腑に落ちない症状が発生する。エクセルファイルを読み込む際にメモリが足りないとエラーが出る。その値がいつも「67108864」になるのだ。つまり64MB。いつでも64MBなのだ。

memory_limitを4MBにしても128MBにしても同じ数字が出る。なぜだ。

ライブラリ内にもmemory_limitの記述がないのだが、どこかに何らかの記述があってそれが影響しているのだろうけど、でもそれがなんだかわからない。調べる時間もない。

とりあえずすぐに手を付けることは出来ないけれど、そのうち時間が取れたらPHPExcelで試してみることにする。いずれにしても情報は少なそうだけど。

Smartyの最新版でも大丈夫

2009/11/10 | Smarty

以前調べたSmartyのエラーの件、解決策が古いバージョンに戻すという方法をとったが、現行の最新バージョン2.6.26でも大丈夫なことを確認できた。こんな感じのエラー。

PHP Warning: preg_match() [<a href=’function.preg-match’>function.preg-match</a>]: Compilation failed: repeated subpattern is too long at offset 18454 in /library/smarty/Smarty_Compiler.class.php on line 454

2.6.20から2.6.26までのSmartyの変遷を追うと勉強になりそう。やらないけど。

Smartyでpreg_matchエラー

Smartyを使っていてこんなエラーが出た。

PHP Warning: preg_match() [<a href=’function.preg-match’>function.preg-match</a>]: Compilation failed: repeated subpattern is too long at offset 18454 in /library/smarty/Smarty_Compiler.class.php on line 454

たしか以前もこんなエラーに出くわしたことがある。確か、そのときは「PHPのバージョンが古いとpcre関連でバグがある」というような理解で終わったと記憶していた。そのときの解決策までは思い出せないが、エラーメッセージを見る限りでは正規表現のパターンの長すぎが原因のようだ。

しかし困ったのは、このエラーがSmarty内部で発生しているということ。ライブラリの中身なんて修正したくない(だって他のところでは動作しているのだから)。よくよく調べたらこのエラー、Smartyのバージョンを落とすことによって回避できるらしい。きっとバージョンが新しくなり、正規表現で記述していたパターンが長くなってエラーが出たのだろう。

エラーが出たバージョンは2.6.21だった。調べた結果によると、2.6.20と2.6.21がちょうど天と地の境目のようだ。早速2.6.20をダウンロードしてみたら見事解決した。よかった。ていうか、レンタルサーバ会社のPHPのバージョンが低いせいだよね、きっと。


守谷市(まちの情報ポータル) 無料アンケートレンタルjpForm.net