【PHP】 Smarty 隔離スレ 【テンプレート】 at PHP
[2ch|▼Menu]
[前50を表示]
500:nobodyさん
09/07/10 17:06:18
お前は何を言ってるんだ

501:nobodyさん
09/07/10 17:19:26
「そこまでこだわるべきなのか」 ←言いたいこと
「でも、そこまで言うぐらいだから、こだわらないと困るのか」 ←疑問

502:nobodyさん
09/07/10 17:21:09
>>499
>>496に「とらわれすぎると」って書いてあるだろ、
場合によってはMVCの枠組みに落とし込む事がデメリットになるって話。

例えば、数行で済む使い回し不要のコードの為にモデルを量産すると
管理が面倒だし、他との依存関係が不透明になるからロジック変更の時に面倒だよね。
そういう場合はCなりに埋め込んでしまう方がいいんじゃね?

って話。

503:nobodyさん
09/07/10 18:13:16 aQw5S2vU
そんなのコメントしとけば依存関係は不透明にならんだろ。ただの怠慢でMVCのせいにすんな。

504:nobodyさん
09/07/10 18:17:06
コメントで他のコードのどこから参照されてるか、全て把握かつ保証出来るんだ?
503さん、まじパねぇっす!

505:nobodyさん
09/07/10 19:29:24
503さんはエスパーなんです!

506:nobodyさん
09/07/17 01:42:54
>>494
サーバ専用処理って。。。
逆にクライアント処理をPHPで書いてもらいたいな

507:nobodyさん
09/07/17 12:08:33
>>506
入力も出力もなく
サーバ内で完結する処理という意味だろうけどね。

508:nobodyさん
09/07/17 12:24:47
>>506

大丈夫か?
頭打ったろ!

ザックリした説明に一々噛み付く馬鹿!
夏はイロイロ湧いてくるなぁ


509:nobodyさん
09/07/17 19:58:03
自分の頭に無い解釈=不正解

だというプログラマーが多すぎです

510:nobodyさん
09/07/20 22:58:34 KgRJffi+
勘違いしていたかも知れないんだけど、Smarty自体がMVCフレームワークだよね?
Modelは関数の処理で
Viewの部分がdisplayやfetchでテンプレ表示で
Controllerが最初のクラス実行で

自作フレームワーク+Smartyを作ってるんだが、
考えたらMVCすべてSmartyだけでもいい気がしてきた

511:nobodyさん
09/07/20 23:16:35
それSmatyじゃなくて
PHP+Smartyじゃん

512:nobodyさん
09/07/20 23:28:34
まあ、あながち間違ってはいないがな。

513:nobodyさん
09/07/21 10:38:01
いや、間違ってるだろw
その理論だと世の中全てのPHPコードがMVC実装されてる事になる。

514:nobodyさん
09/07/21 10:47:00
いや、それは「PHPでMVCを書いた」って事で
Smartyみたいに元から実装されている分けじゃないんでは?

515:nobodyさん
09/07/22 00:47:18
Smartyhajimemasita

516:nobodyさん
09/07/22 08:22:08
Hello! Smarty

517:nobodyさん
09/07/24 20:52:45 kF0trrBu
で、お前らキャッシュ機能って使ってる?

518:nobodyさん
09/07/24 22:28:00
キャッシュって使うもんなの?
Smartyだと使わされるもんだと思ってたよ。

519:nobodyさん
09/07/24 22:42:57
>>518
コンパイル済みテンプレートとキャッシュを混同してるだろw


俺は使ってない。
本当にキャッシュが必要なページはrenderしたものを自前で静的htmlファイル生成化してるわ。
1時間に一回再生成するようなページで使えば楽んだろうけど、レアケースだよね。

520:nobodyさん
09/07/25 00:10:16
>>519
批判じゃなくて興味本位だが、
なぜSmartyのキャッシュじゃなくて、自前なの?
Smartyで同じ事出来るよね?

521:nobodyさん
09/07/25 01:34:19
キャッシュ使うとテンプレートの更新が反映されないんだが
更新したらキャッシュ切らないとだめなの?

522:519
09/07/25 05:09:32
>>520
Smartyのキャッシュって、
PHP呼び出し → Smartyインスタンス生成 → キャッシュ確認 → 出力
という処理が入るから、生成されたHTMLファイルに直接アクセスする場合と比べると負荷はかかるんだよね。

519にも書いたように定期的に自動で再生成するような場合は楽だけどさ。
自分のやってるシステムでは、管理者が任意のタイミングで再生成するのがほとんどだから、自前で実装している。

DBからのデータを差し込みつつ、出力をキャッシュするってページはあまり無いからなぁ…。

523:nobodyさん
09/07/25 11:35:37
>>521
テンプレートを更新したらキャッシュを削除するのが、
一番手っ取り早いし、確実だと思うよ。
>>522
なるほど。俺は、テンプレート(ヘッダーフッターなど)を
DBで管理しているんだが、
テンプレート内にもSmartyタグを使ってるから、
自前のキャッシュファイル生成だとそれらが反映されずに困るんだよな

524:nobodyさん
09/07/26 02:40:29
>>523
ん?DBから動的に書き出す(+Smartyタグを処理する)場合ってキャッシュは使えないよね?
コンパイル済みテンプレートの事?

俺の中では
キャッシュ … DBデータ等の差し込み済み出力結果を静的に保存する。
コンパイル済 … SmartyテンプレートをPHPコードとしてキャッシュする。
って定義なんだ。
これが正しいかはわからない。誰が偉い人まとめて!

525:nobodyさん
09/07/26 03:26:35
じゃDBデータがあるサイトの場合は
その都度キャッシュのon/offを切り替えて使えということ?
あるいはインスタンスを分けるとか?

526:nobodyさん
09/07/26 04:04:17
キャッシュするなキャッシュ自体に期限を設けるのが一般的かな、
毎回DBからデータを持ってくるのであれば、
それは事実上キャッシュは不可能。

コンパイル済テンプレートのキャッシュは常に有効にしておいて良いと思うよ。

527:nobodyさん
09/07/27 11:12:36
テンプレート自体をDBに格納してるって話じゃないの?

528:nobodyさん
09/07/27 11:30:56
え?

529:nobodyさん
09/07/27 12:48:51
へ?

530:nobodyさん
09/07/27 17:40:06
>>525 の意味がいまいちわからんのだが…
キャッシュの有効期限とかどうしてるの?
設定してあれば on / offしなくても自動でキャッシュ更新されるし、
設定していないのであれば、キャッシュは生成されないだろうし。

上にもある通り、キャッシュとコンパイル済テンプレートの認識が混ざってないかい?

531:nobodyさん
09/07/27 22:41:03
え?

532:nobodyさん
09/07/28 10:37:13
テンプレートってDBとかに格納しておけるの?
できるならすごい便利なんだが

533:nobodyさん
09/07/28 14:22:43
>>532
できなくはないでしょ

534:nobodyさん
09/07/28 15:09:38
>>532
Smartyヘルプのリソースプラグイン読んでごらん。
まんまDBからテンプレート取得するコード書いてあるから。

535:nobodyさん
09/07/28 16:09:45
できなくないのは分かるけど
いまいちどういう時に使いたいのかわからん。
ファイル名でマッピングしておくのと何が違うんだろ?

536:nobodyさん
09/07/28 17:56:09
>>535
updateコマンドで一括変更したり、日にちでサイトをガラッと変えたりするんじゃね

537:nobodyさん
09/07/28 20:41:09
>>535
CMSとか作る場合には良いんじゃないかね。
管理画面からの検索や更新、バックアップが取りやすい。
あとはWEBサーバが冗長化されていて、リソースを一箇所に纏めたい場合とかかね。


制作の手間暇考えたら、メリットは薄いと思うけど。

538:nobodyさん
09/07/29 22:00:38
>>535
ファイルをDBで管理すると、WEB上から更新できるならな。
しかし、複数アカウントを発行して利用するシステム(MTなど
の場合は、システム毎にテンプレートを編集できるので
ファイルで管理するより便利。メリットは絶大だと思う。

539:nobodyさん
09/07/30 00:20:18
いや、その用途なら普通にファイル編集orアップローダのが楽だろ…

540:nobodyさん
09/07/30 12:07:42
>>539
DB分かってる人ならDB使うのがラクだと思えるよ。
ファイルはすぐ腐る。

541:nobodyさん
09/07/30 12:13:33
少し腐ったぐらいが美味しい...

542:nobodyさん
09/07/30 12:16:56
ファイルは数が増えるとどんどん大変になるんだよな

543:nobodyさん
09/07/30 16:35:27
システム作る側は楽かもね。

デザイナの大半はローカル環境でコーディング、一括でアップロードを望んでいる。
またテンプレート自体がバージョン管理下に置かれている事も多々ある。
運営する上でDBに流し込み作業が発生するのは楽ではない。

544:nobodyさん
09/07/30 16:40:57
ディレクトリ分けもせずに700個のHTMLと格闘してる奴を見てるとホント馬鹿だと思えてくる

545:nobodyさん
09/07/30 17:12:18
そんな奴いねーよw

546:nobodyさん
09/07/30 18:40:48
700個のHTMLって時点でテンプレートを活かしてない感じが…

547:nobodyさん
09/07/30 18:50:56
テンプレどころかCSSすら使ってないんですわ、マジで。

548:nobodyさん
09/07/30 18:58:17
でも場末のウェブ制作屋ってほんとひどいからね。
ちょっとかじった中学生か、ってレベルのおっさんが
見てて頭痛くなってくるような非効率的な作業環境で、
素人騙して金貰ってるようなとこいっぱいあるぞ。

549:nobodyさん
09/07/30 21:03:15
>>543
流し込み作業をプログラムですれば良いだけだろ
一括アップロードと変わらん

550:nobodyさん
09/07/30 22:46:24
>>549
それやってしまうとファイル管理のメリットも、DB使うメリットも薄れてしまう気がするんだが。

551:nobodyさん
09/07/30 23:54:04
というかDBなんてある意味ファイル管理をラップしたようなもんだから
DBでできてファイル直弄りでできんことはないだろ。
せっかくキャッシュとか使ってるのに
変なとこでDB使うとパフォーマンスのボトルネックにもなりかねんし
DBじゃなきゃ開発コストパフォーマンスの点でよっぽど差がでる
って場合じゃなきゃ下手にDB化なんかせんよ。

そういう奴は画像ファイルとかもカラムに突っこんでるタイプだろ。

552:nobodyさん
09/07/31 00:03:20
どちらにしろデータとして記録するんだからファイルで置こうがDBに突っ込もうが大して変わらんだろ

553:nobodyさん
09/07/31 01:55:56
Smarty使って、DBではなくファイルで管理しているWEBアプリってあるか?


って思ったけど、OpenPNEがそうだな。追加で編集する場合はDB使うけど

554:nobodyさん
09/07/31 02:04:43
>>552
制作、運用、実行コスト、全てが大きく変わるわw

検索するとか、システム一括で何かしたいとか、特別な理由が無い限りDBにテンプレートつっこむのはナンセンス。

555:nobodyさん
09/07/31 02:43:31
ナンセンスってほどでも無いっしょ
ファイルシステムだって名称を唯一のキーとしたDBみたいな物だし

556:nobodyさん
09/07/31 03:11:10
PCのスペックが上がりまくったせいで、恐ろしいほどのヘマをしない限りは
DBで記録しようがファイルで置こうがボトルネックと呼べるレベルのものは出ない

むしろ、恐ろしいほどに数が増えて人的に整理が大変になったほうがボトルネック

557:nobodyさん
09/07/31 03:49:06
>>555
だからこそナンセンスなんだよw
ファイルシステムの実装はDBそのものなんだから、DBにつっこむ必要が無いものをつっこむ必要は無い。

>>556
にわかSEにありがちな発想ですね(^^
人的整理はDBやSmarty以前のバージョン管理、運用の問題。

558:nobodyさん
09/07/31 04:25:59
>>557
ほう、ではDBとFSで実装した場合の違いを定量的に示してくれ

559:nobodyさん
09/07/31 04:42:31
>>558
FSじゃなきゃ出来ない事、FSなら標準で出来る事は多々あるだろう。

 ・DBコネクション等の負荷が無い
 ・当然PHP側のコードもシンプル
 ・SVN等のバージョン管理システムが使える
 ・使い慣れたエディタで直接編集が可能
 ・使い慣れたソフトでアップロード/ダウンロード/バックアックも自由自在
 ・当然複雑な管理画面も不要になる為実装コストは激減

これらはFSなら特別な実装は不要。
君はDBで実装出来るか?

検索したいとか、DBサーバで集中管理したいとか、特別な要件が無い限りテンプレートのDB化はしない。

逆にDBを疑似ファイルシステムとして使うメリットとその実装コストを教えて欲しい。
オープン系CMSを引き合いに出すのであれば、同等の管理画面等を作るコストも入れてくれよな。

560:nobodyさん
09/07/31 05:22:21
定量的の意味知ってるか?

561:nobodyさん
09/07/31 05:56:21
定量的って言葉使いたいだけですか?w
>>559 に答えられたら答えてやんよ。

562:nobodyさん
09/07/31 10:54:30
まぁ、喧嘩するなや。
第三者からみたら、有益な討論してるように感じるんだから。

563:nobodyさん
09/07/31 11:13:51
>>561
低学歴乙

564:nobodyさん
09/07/31 11:35:24
>>562
有益かはともかくSmartyの議論ではなさそうだな。

565:nobodyさん
09/07/31 12:20:19
>>564
Smartyの使い方に関する議論だろ

566:nobodyさん
09/07/31 15:05:22
smartyってHTMLだけしか知らないデザイナーに読みやすくするためだけの技術だろ

567:nobodyさん
09/07/31 16:10:10
逆だと思うが。PHPを使えるプログラマー用の技術だろ。

568:nobodyさん
09/07/31 18:56:10
>>563
答えられない質問には煽る…典型的な厨ですね。

定量的も何も、FSの場合は >>559の 実装コストはほぼゼロ。
DBで作った場合のコストは?低学歴な僕には検討もつきません><おしえてください。

569:nobodyさん
09/07/31 19:46:53
>>568
俺も低学歴だけど頑張ってみる
XOOPSみたく、ベースはファイルで、そっからDB突っ込む奴で考えてみた


> ・DBコネクション等の負荷が無い
キャッシュファイル使えばテンプレ本体がDBにあっても関係ない

> ・当然PHP側のコードもシンプル
プラグインで済むから同じ

> ・SVN等のバージョン管理システムが使える
ベースのテンプレートをファイルにすれば同じ

> ・使い慣れたエディタで直接編集が可能
コピペすれば一緒かと

> ・使い慣れたソフトでアップロード/ダウンロード/バックアックも自由自在
phpMyAdminは使い慣れたソフトってことで

> ・当然複雑な管理画面も不要になる為実装コストは激減
テキストボックスで十分じゃん

> 同等の管理画面等を作るコストも入れてくれよな。
phpMyAdminで十分


テンプレートがDBに入ってて便利なのは、
出先とかでftp,シェルが使えない環境でもブラウザで更新出来るに尽きるんじゃないかと
頑張れば携帯でも更新出来るし。。。

570:nobodyさん
09/07/31 19:49:07
ファイル操作用のPHPコードと
DB操作用のSQLでは、後者の方が自由度高いと思うけどな

571:nobodyさん
09/07/31 20:49:32
>>568
煽ったのはお前だろカスが
最初に質問したのは俺だが何故答えないの?

572:nobodyさん
09/07/31 20:58:48
また「全部自分でやるから実行速度は早い」とかえらそうにしてる馬鹿が騒いでるのか

573:nobodyさん
09/07/31 21:21:59
>>571
「俺だが」ってIDも出していない奴をどうやって判断する?
俺たちはエスパーじゃないぞ?

574:nobodyさん
09/07/31 23:21:12
>>569
> キャッシュファイル使えばテンプレ本体がDBにあっても関係ない
テンプレート更新確認の為に、DB接続されるよ。

> プラグインで済むから同じ
プラグイン作成、テストの工数がかかるよ。

> ベースのテンプレートをファイルにすれば同じ
一括でコミットしたり、指定リビジョンにロールバックしたい場合とか困るよね。

> コピペすれば一緒かと
エディタで編集→管理画面を開く→コピペ→DBにコミット→確認が、直接編集と同じ手間と?

> phpMyAdminは使い慣れたソフトってことで
ファイルやディレクトリ単位での権限管理はどうするの?
例えば一時的にディレクトリ名を変えてバックアップ取りたい場合とか、運営者にSQLを書かせるの?

> テキストボックスで十分じゃん
見た目上はそうかもしれないが、内部実装は相応のコストがかかると思うよ。
複数ファイル同時に更新しなきゃいけない場合とかもあるしさ。

> phpMyAdminで十分
上に同じ。

> テンプレートがDBに入ってて便利なのは、
> 出先とかでftp,シェルが使えない環境でもブラウザで更新出来るに尽きるんじゃないかと
> 頑張れば携帯でも更新出来るし。。。
これはDBかFSかは関係無くね?制作者的にはSQL回す方が楽ではあるだろうけど。

>>571
>>568 で答えてるよ。FSならコストゼロ、DB実装なら相応。要件次第。
高学歴の君に、DBで同等の実装をした場合のコストを教えて欲しいな。

575:nobodyさん
09/08/01 01:20:41
だから、いちいち煽り入れるなって
お前がせっかく書いたレスも陳腐な物になるぞ

576:nobodyさん
09/08/01 23:36:43
>>571はどこいっちゃったの?

577:nobodyさん
09/08/02 01:41:46
お前がいい加減にしろ

578:nobodyさん
09/08/02 01:48:38
>>571はどこいっちゃったの?

579:nobodyさん
09/08/02 03:05:41
まぁ普通はDBを使うメリットなんて無いって事さ
DB憶えたての頃は俺も無闇にDB化したがったものだ

580:nobodyさん
09/08/03 01:13:56
じゃ、大手ポータルサイト(ブログとか)って
テンプレートをDBに入れずにファイルで読み書きしてるのかな?

581:nobodyさん
09/08/03 03:29:39
そんな極少数の大規模案件を例えに出されてもなぁ・・・
使ってるところは使ってるだろう(ハテナとか、スケーラビリティか何かを考慮してDBをファイル置き場に使ってるとか)

要件次第なんじゃない?
それなりの資金と開発期間があり、WEBベースで不特定多数が編集するシステム開発
とかだったらDB化した方が遙かに楽だろう。

582:nobodyさん
09/08/03 09:46:29
>>581
DB使うメリットないとか言っといて
結局要件しだいかよw


583:nobodyさん
09/08/03 10:57:19
>>581
つまり、結局は「DB化した方が遥かに楽」なケースが”ある”ということですね

584:nobodyさん
09/08/03 17:52:34
>>582-583
最初から『意味も無く』FSをDBに置き換えるのがナンセンスと書いてるじゃないかw

揚げ足取りはいいから、具体的なメリットデメリットを提示してくれよ、
大手が使ってるとか、Open系CMSが使ってるからでは話にならん。

585:nobodyさん
09/08/03 18:04:36
っていうか大手CMSサイトってPHP+Smartyなの?その時点でその話は破綻している。

586:nobodyさん
09/08/03 18:24:53


どちらも都合のいいように解釈しすぎで、この話はいつまで経っても平行線。

587:nobodyさん
09/08/03 18:59:14
平行線にすらなっていない。
DB厨がファビョっているだけだ。

588:nobodyさん
09/08/03 20:12:30
ファビョってるのはむしろお前だろ?1人で戦っているつもりだろうがw

589:nobodyさん
09/08/03 21:44:15
いちいち煽りに反応しなくていいからw 

とりあえず君のすばらしい経験談と、DB捌きっぷりをこのスレに轟かせれば、
もう少しましな流れになるんじゃないかな?

(^o^)でーたべーす は すごく すごい!・・・なぜなら、すごいから!
(^o^)でーたべーす の すごさがわからないやつは すごくない!

590:nobodyさん
09/08/03 22:23:10
「要件次第でDB使う」でみんな納得。
丸く納まってよかった。


591:nobodyさん
09/08/03 22:34:30
以下Smarty3を語るスレになりました。
開発ペース遅すぎるよね。

592:nobodyさん
09/08/04 00:10:08
htmltemplate.php で十分だしー

593:nobodyさん
09/08/04 00:13:10
>>590
すまんけどどういう要件ならDB、FSを使うべきかまとめてくれないか?

594:nobodyさん
09/08/04 01:04:56
>>593
大規模案件ならDB でいいんじゃないか。

595:nobodyさん
09/08/04 01:51:48
>>593
基本的にはFSじゃないかね。
DBは使う必要があれば使えばいい。
あまり思い浮かばないし、実例も聞かないけどね。

596:nobodyさん
09/08/04 02:01:18
すまん
結局>>581が結論でいいんじゃないかと言いたかった。

597:nobodyさん
09/08/04 09:05:44
OK


598:nobodyさん
09/08/04 11:09:38
>>591
ぜひ参画してくださいよ

599:nobodyさん
09/08/04 11:24:56
大規模案件にはJAVAという逆説。

600:nobodyさん
09/08/10 18:05:18 euq/7Zv+
すみません、質問です
テンプレートファイル内で、{php}〜{/php}って形で、phpのプログラムを実行出来ますが、
この「〜」の部分で、assignされた変数を操作することは出来ないでしょうか

{php}
//ここで{$name}の中身を変更したり、{$name}をキーにして画像を出力する関数を実行したい
{/php}

私の名前は{$name}です

こんな感じで…
よろしくお願いします。

601:nobodyさん
09/08/10 18:19:27
そのロジックはテンプレートじゃなくて、呼び出し元に書くべきでは・・・

やった事ないけど、Smartyインスタンスをなんらかの形で参照すれば出来るんじゃない?
グローバル変数にするとか、シングルトン使うとか、etc

602:nobodyさん
09/08/10 18:26:43 euq/7Zv+
>>601
ありがとうございます、やっぱり呼び出し元でやるべきなんでしょうか?
いまassignされて引き渡されるデータが配列一つなので、それを元にテンプレートでやった方がスマートなんですよね
呼び出し元で各値の条件分岐分やるとassign assign assign…とassignだらけになってしまうので
テンプレ長くする方が問題かなぁ

603:nobodyさん
09/08/10 18:35:23
>>602
もしかしてこんな感じで解決しない?

if(...) {
$a=1;
} else {
$a=2;
}
$smarty->assign('a',$a);


604:nobodyさん
09/08/10 18:43:35 euq/7Zv+
>>603
ありがとうございます、そうですねー、確かにassign段階で書くとそんな感じですよね
決めました。そうします。
テンプレかアクションかどっちかが絶対ゴチャゴチャするなら一緒ですねもう。
いや、テンプレ変更する時のデメリットの方が大きそうだし。。
アドバイスありがとうございました!

605:nobodyさん
09/08/10 19:16:08
>>604
条件分岐やるとassignが増えるってどういうこと?
配列をそのまま使えば?

606:nobodyさん
09/08/10 19:21:31
>テンプレかアクションかどっちかが絶対ゴチャゴチャするなら一緒ですねもう。
テンプレートとロジックの切り分けは、そのゴチャゴチャを纏める事にあるんだよw

アクションとテンプレ両方で値を編集しちゃうと、
どこでバグが発生したか突き止められなくなっちゃうでせう。

607:nobodyさん
09/08/10 19:38:15
>>605
例えば、入力任意のファックス番号とかあったとして、必須入力だったら確かにテンプレでは配列そのまま使って
FAX:{$ary.faxNum} で済むけど、必須じゃないんでその前段階のアクションで
if($ary['faxNum'];){$faxNum = $ary['faxNum'];}
else{$faxNum = "-";}
//assign処理
ってやる必要あるじゃないですか。それが嫌だったんですよ。
必須入力じゃない項目の数だけassignしまくらなきゃいけない。めんどくさいなぁと。
そこでphpかsmartyの構文で、テンプレの中で{if}とかしようと思ったんだけど…

でも、確かに>>606の言う通り、あっちこっちにまたがって値を編集しちゃダメですね。
smarty構文はデザインとか見た目(まさにテンプレート)を自動生成するためだけに使わなきゃなぁと
ようやく結論づきました。

608:nobodyさん
09/08/10 20:32:12
>>607
if(!isset($ary['faxNum'])) ($ary['faxNum'] = "-";

って書いて、$ary変数だけassignすればいいんじゃない?


その程度の表示分岐処理なら、テンプレート側でもOKかと思う。

{$ary.faxNum|default:"-"}

でいけない?

609:nobodyさん
09/08/10 20:50:18
値未入力であることを示すのに、何を表示するのかはview側の仕様だわな。

ひょっとしたら先々仕様変更で「入ってまへんで、へよへよ」と表示するようになるかもしれん。
そのとき内部データにそんな値(内容)入れたくないだろ?
608の後半みたいにテンプレ側でやった方がいいよ。

610:nobodyさん
09/08/10 22:51:30
>>608-609
うーん、そうか。
ケースバイケースでどうやるべきかじっくり考えてやってみるね
ありがとう

611:nobodyさん
09/08/10 23:13:31
度々申し訳ない
{if}--{/if}の中で、smarty変数を生成できないの? assignと同じことをしたいんだけど
{if $var eq "hoge"}
$newVar = "hogeでした";
{/if}
みたいな…

612:nobodyさん
09/08/10 23:15:44
assignでなんでだめなの?

613:nobodyさん
09/08/10 23:42:39
>>612
assignはphp側の処理ですよね、テンプレ側で値を割り当てたいので。。

614:nobodyさん
09/08/11 01:09:27
{assign} タグ使えば?

615:nobodyさん
09/08/11 03:32:24
>>614
ありがとう! こんなのがあったのか。助かりました!

616:nobodyさん
09/08/11 03:33:31
assignassign言うから当然テンプレート側のこと言ってると思ったら
assignタグすら知らんかったのか。

617:nobodyさん
09/08/11 12:14:27
だからphpタグなんぞで処理したかったのか・・・。

618:nobodyさん
09/08/12 05:56:44
$hogeAry = Array (
[0] => Array ( [id] => 7 [uId] => 10237 [uType] => hoge [photo_text] => 写真の説明1 [photoName] => galleryPic7 [photo_on] => 1 )
[1] => Array ( [id] => 9 [uId] => 10237 [uType] => hoge [photo_text] => 写真の説明2 [photoName] => galleryPic9 [photo_on] => 1 )
[2] => Array ( [id] => 10 [uId] => 10237 [uType] => hoge [photo_text] => 写真の説明4 [photoName] => galleryPic10 [photo_on] => 1 )
)

という配列があります。
これのphotoNameを引き出したくて以下のものを実行してますがうまくいきません。何が原因でしょうか?
{foreach from=$hogeAry item=varAry}
名前は:{$varAry.photoName}<br />
{/foreach}

{$hogeAry.0.photoName} なら、ちゃんとgalleryPic7が出力されます

619:nobodyさん
09/08/12 06:23:13
varAryの中を見てみたら?

620:nobodyさん
09/08/12 08:01:33
ループは回ってる?「名前は:」って文字は出力されてる?

{foreach from=$hogeAry item=varAry}
{foreach from=$varAry item=item key=key}
{$key}={$item}<br>
{/foreach}
{/foreach}

で中身表示テストしてみ。

621:nobodyさん
09/08/12 10:23:00 u9+iooGY
>>620
0=z
0=z
0=z
とだけ出力して終わってます。。ループ自体はしてるってことですよね?
なんでだろ? 配列じゃないのかな。
上で書いた配列は、以下の実行結果です。(zendFWを使った、クエリの結果)

function gallery($uType,$uId){
$table = $this->_config->table->gallery;
$stt = $this->_db->fetchAll("SELECT * FROM {$table} WHERE `uType`=? AND `uId`=? AND `photo_on`=1 ORDER BY `id` LIMIT 10", array($uType,$uId));
return $stt;
}

$this->view->hogeAry = $this->_db->gallery('spot',$uId);


622:nobodyさん
09/08/12 10:32:56
>>621
Smarty側に正常にassign出来てない可能性大。

1. hogeAryが正常な配列か確認。
var_dump($this->view->hogeAry);

2. hogeAryがSmartyにassignされてるか確認。

623:nobodyさん
09/08/12 11:18:13 u9+iooGY
>>622
var_dump($this->view->hogeAry); の結果は
$hogeAry = Array (
[0] => Array ( [id] => 7 [uId] => 10237 [uType] => hoge [photo_text] => 写真の説明1 [photoName] => galleryPic7 [photo_on] => 1 )
[1] => Array ( [id] => 9 [uId] => 10237 [uType] => hoge [photo_text] => 写真の説明2 [photoName] => galleryPic9 [photo_on] => 1 )
[2] => Array ( [id] => 10 [uId] => 10237 [uType] => hoge [photo_text] => 写真の説明4 [photoName] => galleryPic10 [photo_on] => 1 )
)

.tplでの
{$hogeAry|@var_dump} の結果は
Array ( [0] => [1] => [2] => ) 1

{$hogeAry.0.photoName} の結果は
galleryPic7

ちゃんとテンプレートまでassignされてきてるってことですよね?
foreachだけがうまくいかないってことかなー

624:nobodyさん
09/08/12 11:41:14
619はシカトですかそうですか

625:nobodyさん
09/08/12 12:16:00 u9+iooGY
>>624
すみません、varAryの中身のチェックの方法がわからなかったもので。。

{foreach item=varAry from=$hogeAry}
{$varAry|@var_dump}<br />
{/foreach}
とりあえず思いつく限りで上記をやったら
string(0) ""
string(0) ""
string(0) ""
が返ってきます

{foreach item=varAry from=$hogeAry}
{$varAry.photoName}<br />
{/foreach}
だと何も返ってきません(改行3つだけです)

ほんとに済みませんでした

626:nobodyさん
09/08/12 12:34:49
原因切り分けてみたら?
本当にDBから値は取れてるのか、違う関数コールしてないか、
ただの配列なら表示できるのか、などなど。
可能だったら再現するコードも貼って。

627:nobodyさん
09/08/12 13:54:35
{debug} タグでassignされてる変数確認してみ。

628:nobodyさん
09/08/12 17:19:17 u9+iooGY
>>626-627
どうもありがとうございます
普通の配列なら大丈夫です。同じDBから同様の手続きで取得してるクエリ結果(通常の配列)があるんですが、
それはforeachで解析できています。
{debug}はdisplay形式じゃないとダメみたいで、僕のやり方がそうじゃないので動きませんでした。

それで、今ループ処理をsection形式で試してみたんですが、section なら二次元配列の処理大丈夫でした。(以下が動きました。)
{section name=varAry loop=$hogeAry}
{$smarty.section.counter.total}<br> (このカウンターは動きませんでした)
要素: {$hogeAry[varAry].id}<br>
要素: {$hogeAry[varAry].photoName}<br>
要素: {$hogeAry[varAry].photo_text}<br>
{/section}
とりあえず、お騒がせして申し訳なかったですが、foreachは諦めてこっちで極力対応したいです。

629:nobodyさん
09/08/13 16:40:28
結局原因は何なの?

630:nobodyさん
09/08/21 13:05:34 WhelcFIU
質問させてください。
テンプレート中の {$hoge}って変数に対してphpのクラス中のメソッドを実行するって可能でしょうか?
これまでは、php中で
$hoge=$instance->method($hoge1,引数1,引数2);
として、適切な値を返してたんですが、同じ事をテンプレートの中でやりたいと思います。
{$hogetext|nl2br}などでphp関数を実行できるのは知ってるんですが、調べたところメソッドの実行は
見つけられませんでした。無理なんでしょうか?
assign 前に実行すべき?

631:nobodyさん
09/08/21 14:42:48
修飾子プラグインの中でメソッド呼べばよいのでは

632:nobodyさん
09/08/21 18:37:07
>>631
どうもありがとうございます
修飾子プラグイン、知りませんでした! 勉強になります、ありがとう

633:nobodyさん
09/08/21 22:16:33
プラグインの中で他のプラグインの機能を呼び出すことってできますか?

634:nobodyさん
09/08/21 22:16:56
できるよ

635:nobodyさん
09/08/22 00:43:33 qs0RE9DR
修飾子プラグインの勉強始めたんですが、引数を2つもたせる方法がわかりません。
{$num}というsmarty変数に対して、

function smarty_modifier_NUMtoTEXT($num,$aryName){
 return $allAry[$aryName][$num];
}
というプラグインを実行したいんですがどう書いたら良いんでしょうか?
{NUMtoTEXT:$num:"boyAry"}とかやってみたんですがうまくいきません。

636:nobodyさん
09/08/22 00:59:28
>>635
URLリンク(www.smarty.net)

637:nobodyさん
09/08/22 05:08:49
>>634
kwsk

638:nobodyさん
09/08/22 12:26:11
>>637
ggrks

639:nobodyさん
09/08/22 23:19:02
>>636
返事遅れました。うまくいきました、ありがとう

640:nobodyさん
09/08/25 00:15:56
foreach だの sectionだのって、なんで素直にfor文用意してくれないんだろね
php用テンプレートなのにわざわざ特殊な書式だし、頭に入らなくてしょっちゅうマニュアル見てる
頭悪くて悲しいな

641:nobodyさん
09/08/25 06:09:04
>>640
Smarty3で追加される

642:nobodyさん
09/08/25 13:55:26
>>641
ほんとに? 情報ありがとう、気分が楽になったよw
そういう情報を仕入れる前向きさがないとイカンなぁ

643:nobodyさん
09/08/26 12:19:29
キャッシュしてできたファイルの中にSmartyタグって入れられないよね?

検索フォームがあったとして
<input name="keyword" type="text" value="{$smarty.post.keyword}">

として検索後にデフォルト値を入れてるんだけど、
キャッシュしたらこういう事が出来ないと思って。

644:nobodyさん
09/08/26 13:37:23
>>643
insertタグで出来るんじゃね?

あと検索結果画面だと思うけど、それってキャッシュするべきじゃなくね?w
するにしてもSmarty側でするもんじゃないと思う。

645:nobodyさん
09/08/26 14:37:50
そのキーワード毎にキャッシュしたいのならば、それをキャッシュIDにすれば。

646:nobodyさん
09/08/26 23:01:41
>>644-645
ページのサイドバーをキャッシュしているんだが、
その箇所に検索フォームやログインフォームが入っているんだよ。
確かにキャッシュするべきじゃないが、
部分毎にわかるとキャッシュする意味がないかな?とも思ったり。

やっぱり、設計に問題あるかも・・。

647:nobodyさん
09/08/28 14:54:05 45fY5t7E
サイドバーの質問が出てるので聞きます
dbの返り値次第でサイドバーのデザインが数パターンに変わる場合、smartyのif文で書き分けするしかないのかな?
正直{if}に限らず醜いんで多用したくないんですよね…

部分的にデザインパターンを読み込むなど、他の解決方法はないですか?

648:nobodyさん
09/08/28 15:03:05
コントローラ側で制御すれば?

649:nobodyさん
09/08/28 15:25:18
テンプレートを数パターン用意すれば?

650:nobodyさん
09/08/28 16:29:28 45fY5t7E
>>648−648
そうですね、それがいいですね
ありがとうございました

651:nobodyさん
09/08/28 16:30:15 45fY5t7E
>>648-649でした
ありがとう

652:nobodyさん
09/08/28 17:53:20 MIAE9vSw
Smartyテンプレif文条件式で、自作のSmartyプラグイン関数を
呼び出すことはできないのでしょうか?



653:nobodyさん
09/08/28 19:07:18
できるんじゃね?

654:nobodyさん
09/09/02 05:34:35 55UeyG/q
{assign}の中で、修飾子プラグインをvalueにもたせることできますか?

{assign var=uType value=$resultAry.uType|NumToText} みたいなことをしたいんですが
試してみてもタグがモロ出しになって修飾子が実行されてないようです。
仕様でしょうか?
書き方が変だとしたら、対処法を教えてください。よろしくお願いします。

655:nobodyさん
09/09/02 09:19:59
タグがモロ出し の意味がわからない。

656:nobodyさん
09/09/02 09:35:13
>>654
capture

657:nobodyさん
09/09/03 08:24:48
>>655,656
ありがとうございました

658:nobodyさん
09/09/06 21:25:22
負荷テストで調べたんだが、キャッシュって結構効いてるな
1000アクセスある場合を想定してテストしたんだが、
約10〜15%ほどページの読み込みが早かった

659:nobodyさん
09/09/07 08:07:01
なにをいまさら・・

660:nobodyさん
09/09/07 22:10:32
>>659
まあ、実感するのはなかなか難しいからな。

661:nobodyさん
09/09/07 23:17:57 K7GASBY+
二次元配列を出力しようとすると、
Warning: htmlspecialchars() expects parameter 1 to be string, array given in パス modifier.escape.php on line 26
というエラーが出ます。
調べたところ、色々なサイトで同じ問題を扱ってるのを見つけました。
URLリンク(questionbox.jp.msn.com)
URLリンク(pcmemorogu.blog14.fc2.com) など

が、これらでの答えの通り、FOREACHする配列全てに $ary|smarty:nodefaults としてみたんですが
まだ完全に上記のエラーが消えません。
他にどんな可能性があるでしょうか?
配列だけでなく、通常のassignされた変数に対しても文字列でなければセットすべきなのでしょうか?
とりあえずやっていますが、変化がありません

662:nobodyさん
09/09/07 23:25:11
アウトプットフィルタにhtmlspecialcharsが指定されてるんじゃないの?

つか二次元配列を出力しなければならない例が思いつかないけど

663:nobodyさん
09/09/07 23:49:42 K7GASBY+
>>662
ありがとうございます
すいません、お礼書きつつ修正重ねてたら上手くいきました
foreachやsectionの中の配列だけでなく、ifの条件節部分でも配列に対しては|smarty:nodefaultsする必要があったようです。

if($testAry|count >0) を
if($testAry||smarty:nodefaults|count >0) にしたら治りました

お騒がせしました。ありがとうございました

664:nobodyさん
09/09/08 00:19:32
modifier.escape.phpを修正する方が早いよ

665:nobodyさん
09/09/08 00:25:48 qSoCHGpf
>>664さんはそうしてますか?
どう修正したらいいのやら、、と、調べたらありました。

URLリンク(blog.asial.co.jp)
-----
# function smarty_modifier_escape($string, $esc_type = 'html', $char_set = 'ISO-8859-1')
# {
# // 配列が渡ってきたら何もせずにreturn
# if (is_array($string)) return $string;
# switch ($esc_type) {
# case 'html':

たしかにこれでよさそう。
664さんが別の方法で対応してるなら教えてもらえると嬉しいです。比べつつ勉強したいので。
自分で弄る自信はまだないんですよね、知らないところで悪影響でそうで…

666:nobodyさん
09/09/08 00:43:09
>>665
if (is_array($string)) return $string; 
で運用してるけど特に問題は無いよ。
配列が来た場合は、全ての要素を再帰的に処理するとかも試したけど、何か不都合があって止めた記憶・・・。

plugins_fix ディレクトリを作り、modifier.escape.php をコピーして修正を施す。
$smarty->plugins_dirの先頭にplugins_fixディレクトリを追加する。
って方法で修正を当てている。
default_modifiers使うと{debug}にも影響が出るから、同様に修正を当てたファイルをplugins_fixディレクトリに置いてる。

667:nobodyさん
09/09/08 00:47:00 qSoCHGpf
>>666
詳しい説明ほんとにありがとうございました
debugってまだやったことないのでそっちはわからないですが、参考にさせてもらいます
ありがとうございました。

668:nobodyさん
09/09/20 18:33:32
だれか公式以外でsmartyダウンロードできるところ知らない?
クソ公式落ちまくっててDLできないんだけど
URLリンク(www.smarty.net)
だれかソースくらいは分散しとけって忠告してやれよ

669:nobodyさん
09/09/20 18:55:26
落とせるじゃん

670:nobodyさん
09/09/20 19:52:57
復旧した

671:nobodyさん
09/09/24 18:00:24
初心者なのであまり良く分からないのですが、テンプレートエンジンはSmarty以外に別のテンプレートも同時使用出来るのでしょうか?
JavaScriptのライブラリのように互いに干渉してしまったりするのでしょうか?

また、調べてみると、何かテンプレートを扱う為にはPHPを学んでいても1〜数週間は馴れるまでかかると書いてありました
ですのでまず最初に一つテンプレートを使用してみようと思っているのですが、やはりSmartyが一番良いのでしょうか?

672:nobodyさん
09/09/24 18:07:40
まずテンプレート抜きでPHPを身に付けたほうがいいかと

673:nobodyさん
09/09/25 14:31:20
SmartyってPHP習得した後にやろうとするとハッキリ言って困惑するよな
何だコレ?って感じ
今までPHP学習してきたのってあんま意味無いじゃんって思ったよ
例えばforeachとかさ
HTML?っても最初思った



674:nobodyさん
09/09/25 14:34:03
PHP習得した後にやらないでいつやるんだよ

675:nobodyさん
09/09/25 15:24:47
誰もが通る道さ・・・
それを不毛と感じるか、テンプレートエンジンの利点に気がつけるかでPGとしての資質がわかる。

676:nobodyさん
09/09/25 15:39:52
いや普通につくればphpのforeachもsmartyのforeachも必要だろ。


677:nobodyさん
09/09/25 21:46:51
そういう事言ってるんじゃないだろ。

678:nobodyさん
09/09/25 21:47:21
じゃどういうことよ

679:nobodyさん
09/09/25 22:57:18
同じforeachでも書き方が違って、最初戸惑うってことだろ?

680:nobodyさん
09/09/25 22:59:20
えっ

681:nobodyさん
09/09/25 23:47:30
ちゅう

682:nobodyさん
09/09/26 02:10:40
Smarty 3 is almost here!
[24-Sep-2009] Yes, yes I know. The Smarty 3 beta is taking much longer than expected, but we wanted to be sure we had everything right.
Our preliminary performance tests are already showing us very promising speed improvements over Smarty 2 (2-5x on average), and we're not done! To recap,
Smarty 3 is a 100% rewrite from the ground up, and it is PHP 5 only. We will be getting a feature list up with the Beta, but let me give a quick summary:

683:nobodyさん
09/09/26 04:04:41
早くなるのはいいな。でも、100%書き直したとなると、いろいろ仕様変わってるのかな。

684:nobodyさん
09/09/26 09:50:48
100パー書き直したのと、仕様が変わるかどうかは直結しない話でしょう。
むしろ直結するのはバグ率。

685:nobodyさん
09/09/26 15:22:15
3触ったけどまだ重くて使い物にならないよ。パーサがまともになったせいだろうけど、レンダリングがかなり遅い。
まだかなりバギーだし仕様も固まり切ってないみたいだし、正式リリースは来年末くらいじゃね。

686:nobodyさん
09/09/28 02:57:25
>>684
直結はしないがPHP周辺ではよくある話だな。
関数を修正してみたら引数の書き方が変わったでござるの巻

687:nobodyさん
09/09/28 17:38:33
Smarty以外で他にいいテンプレートって何?

688:nobodyさん
09/09/28 19:12:27
>>687
URLリンク(www.mimoi.com)

689:nobodyさん
09/09/29 19:25:53
一応技術板なんだしせめてこのぐらいは・・・
URLリンク(www.j-tsugawa.com)

690:nobodyさん
09/09/29 19:36:34
プラスチックが乾いてて、持ち上げようとしただけで割れてしまいそうだ・・・

691:nobodyさん
09/10/01 12:03:22
流れ図記号は全部○を使っているのは俺だけだろうか。

692:nobodyさん
09/10/01 18:28:48 KASc2bqu
//PHP側
$list[0]["text"] = '{ImageBox file="test.jpg"}';

//テンプレート側
{foreach from=$list item="data"}
{$data.text}
{/foreach}

独自関数「ImageBox」で指定したファイルが表示されるようにしたいと思い、
配列をforeachで出力させようとしました。
しかし、{ImageBox}の箇所が変換されずにそのまま文字として出力されます。

指定方法が間違っているのでしょうか?
わかりづらいかと思いますが、アドバイスいただければ助かります。

693:nobodyさん
09/10/01 20:50:56
PHP側では展開されません。

694:nobodyさん
09/10/01 21:02:54
そりゃ$list[0]["text"]の内容を書き出してるだけだからな。

phpなら可変関数使うところだが
Smartyはプラグインで可変関数の実装を作らないとダメかも。

695:692
09/10/02 00:20:33
>>694
foreachで出力される時に、
変数内のSmarty関数も変換されると思ったのですが、
どうやら違うみたいなんですね・・。

プラグインで実装させるとか、難しそうだ・・・

696:nobodyさん
09/10/02 00:35:40
そのImageBOXで出力されるものを$out_ImageBOXとか変数に入れ込んでおけば?

697:柏アラフォーパパン& ◆.d6LNJ2fbM.9
09/10/02 15:06:34 bCUcRsfE
dsd

698:nobodyさん
09/10/03 17:55:56
文字列をテンプレート処理出来るメソッドでも作ればいいんじゃないかね。
$list[0]["text"] = $smarty->fetchFromString('{ImageBox file="test.jpg"}');

699:nobodyさん
09/10/03 17:57:12
$list[0]["text"] = 'test.jp';

{foreach from=$list item="data"}
{ImageBox file=`$data.text`}
{/foreach}

じゃ駄目なのか?

700:nobodyさん
09/10/03 18:51:58
よほど特殊な処理をさせたいのでなければ>>699に落ち着くと思う。
まあそういうのはやはりPHPでやるべきだろうな。
smartyは最終出力だけにしておこう。


701:692
09/10/04 00:06:35
>>699-700
その方法だと$listに必ず「ImageBox」が無いと駄目です。
ブログみたいに他のタグも挿入したい場合使えないので、
変数(というか配列に入れた値)に、Smartyタグを入れる事を思いつきました。

それで698さんが掻かれているようなプラグインを作って
一旦Smartyタグを処理させてから配列に入れれば、
foreachで出力しても表示されます。
しかし、当然ながらコンパイルファイルが作成されるので
その分ページの生成に時間がかかることになってしまいました・・。
(キャッシュを使えば良いだけですが、なんか気になりました

702:692
09/10/04 00:08:43
ちなみに以下のサイトを参考にしました。
URLリンク(d.hatena.ne.jp)

>>698さんのソースを頼りに検索したらヒットしました。
凄く参考になりました。ありがとうございます。


703:nobodyさん
09/10/11 13:15:33 gYB28ahJ
すみません、質問です
smartyで{if}の中で出力したりすると、このsmartyタグのせいで発生した改行やらスペースやらが
HTMLにもモロに出てしまって美しくありません
どうにかする方法ないでしょうか?

704:nobodyさん
09/10/11 14:25:24
{strip}{/strip}
で囲うべし。

705:nobodyさん
09/10/11 15:23:00
>>704
かっこわるいです。次の方お願いします。

706:nobodyさん
09/10/11 15:43:55
反論ではないけど、
おれはHTMLの頭から終わりまでstripで囲ってるよ。
改行、空白によるブラウザの変なバグにも遭遇しないし、
何より若干ではあるものの軽くなる。
かっこいいかどうかで言えば、おれは改行なしのほうがかっこいいと思う。

707:nobodyさん
09/10/11 16:11:57
意図した改行を入れたい場合はどうしてるん?
<textarea>の中身とか

708:nobodyさん
09/10/11 17:59:26
>>704
おおー、そうだそれがありました
ありがとうございました

>>707
<textarea><$hoge|nl2br></textarea>じゃ対処できないもの?

709:nobodyさん
09/10/11 18:22:54
改行を残したい箇所を
逆にliteralで囲う。

710:nobodyさん
09/10/12 00:52:20
JavaScriptとか、改行に意味を持つ言語が混在する可能性を考えると一括して{strip}するのは得策じゃない気がする。

711:nobodyさん
09/10/13 01:13:00
>>703
そこまで気にするなら
{if}
{assign var="hoge"}
{else}
{assign var="hoge"}
{/if}
<textarea>
{$hoge}
</textarea>

712:nobodyさん
09/10/13 23:52:48 B+0jNtpm
Smarty3期待アゲ

713:nobodyさん
09/10/14 00:10:46 k/3ZY/k4
質問です。

↓の、アンパサンドって何の意味があるのでしょうか?

$smarty =& new Smarty;




714:nobodyさん
09/10/14 00:27:06
参照代入

715:nobodyさん
09/10/14 00:36:04
>>713
ないよ。

PHP4でも5でもnewはリファレンスを返すんだけど、
PHP5でそれが明言されるまではnewを=するとnewなオブジェクトがコピーされるという迷信があった。
だから=&と書いてるところがたまにあるけど、Smartyマニュアルでも普通に=だ。
要するに、単なる誤解が生んだもの。

716:nobodyさん
09/10/14 00:47:30
>>715
ほんとに? 俺も参照代入だよって説明どこかで読んだなぁ
あの解説ウソついたのかしら?

717:nobodyさん
09/10/14 01:06:18
4なら意味あると思うが

718:nobodyさん
09/10/14 01:30:24
>>715
URLリンク(jp2.php.net)
どこでそんな嘘をきいたん?

ちなみに5でも代入で変数のコピーが行われるのは同じ。
違うのはオブジェクトのコピー時の内部動作がハッシュテーブルの複製から
オブジェクトの実体の参照カウンタ操作になっている点。(zvalの参照カウンタとは別ね)


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

4988日前に更新/245 KB
担当:undef