読者です 読者をやめる 読者になる 読者になる

ヌッ

適当

Smartyのdisplay()でテンプレート表示されない問題

MVCモデルで設計したPHPの話です.

 

Viewにあたる部分をSmartyを使っていたのですが

真っ白い画面しか出てこない!と嘆いて数日間戦ってました.

結局今日あっさり解決したのでハマりそうなポイントをまとめときます.

 

パーミッションのミス

多分一番多いであろうミス

Smarty側のディレクト

Smarty.class.php

SmartyBC.class.php

debug.tpl

plugins

sysplugin

Viewのディレクト

templates

templates_c

configs

cache

ここらへんを読み込み,書き込みが出来るようにします.

特にtemplates_cはコンパイルされたテンプレートファイルとかが

書き込まれたりするので書き込み権限を与えましょう.

これだけだとまだ表示されなかったのでとりあえずパーミッションは全部777にしました.

セキュリティの問題もあるため非推奨です.実際は自分の環境に合わせて替えましょう.

あと管理者とグループは統一しました.

僕はvagrantでやってたので全部vagrantに.

コードの中でtestInstall()を使えばちゃんと参照できてるかどうか分かります.

 

画像入ってない

当たり前って感じですが人のコードを引っ張ってきて,

画像の所在の指定によってはこういうことも…

ここも確認しましょう.

 

バージョンに依る関数の違い

テンプレート読み込めて無いのではと思って

template_exists()を使ってたのだけど,

これがそもそも現在のバージョン(2014.9.1現在ver3.1.19が最新)だと対応してなかった.

今はtemplateExists()が正しい.

アンダースコア使う書き方は前のバージョンの時なんすかね?

で,このような存在しない関数とかで実行が止まるらしく

それ以降の命令は実行しないっぽい.

上記の問題を修正してこの関数を消したら表示されました.

ちなみにデバッキングコンソールはそこら辺のエラー返さなかった模様.

 

 

すっげえ遠回りした感あるけどバグが何処にあるかとか

色んなコード辿ってくうちに全体の構造について把握してきた.

そもそもPHPの事よく分かってなかったけど

少しでも知見が深まったかと.

以上です.