【PHP】 Smarty 隔離スレ 【テンプレート】
レス数が1000を超えています。これ以上書き込みはできません。
0001nobodyさん
2008/02/02(土) 00:21:09ID:6cKcKeTp0002nobodyさん
2008/02/02(土) 00:31:36ID:???0003nobodyさん
2008/02/02(土) 01:01:34ID:???0004nobodyさん
2008/02/03(日) 10:44:03ID:???0005nobodyさん
2008/02/09(土) 22:07:45ID:c9Rr2KUaテンプレート使うくらいならPHPなんか使わずにPerlを使った方が効率が上がるのに。
0006nobodyさん
2008/02/12(火) 12:01:15ID:???0007nobodyさん
2008/02/20(水) 11:19:49ID:q0lktVll現状では、値が無い場合に0.0という表示が必ず出てしまいます。
defaultを先にしても後にしても同様です。
どなたかお願いします。
0008nobodyさん
2008/03/03(月) 05:14:04ID:???HTMLとPHPが混在した形とSmartとで表示速度が5倍以上違う(当然前者の方が速い)らしいのだけども
なんか他に高速なテンプレートエンジンってないの?
処理速度さえ高速なら機能は最低限でいいんだけど
0009nobodyさん
2008/03/03(月) 05:30:31ID:???0010nobodyさん
2008/03/03(月) 15:19:04ID:FhmTLeYh5倍も違うんだと、アクセス多いと如実に効いて来るよ。
0011nobodyさん
2008/03/10(月) 20:24:56ID:la5GJf3wパーミッションを0600にしたいのですが
smartyの設定でありますか?
0012nobodyさん
2008/03/11(火) 08:47:15ID:GwdF10l+umaskとかしとけばいいんじゃね?
0014nobodyさん
2008/03/11(火) 15:02:25ID:???↓
0015nobodyさん
2008/03/11(火) 17:15:12ID:???0016nobodyさん
2008/03/11(火) 21:41:50ID:???「できない」ってことを言えない人がいるよね。
0017nobodyさん
2008/03/12(水) 10:42:36ID:gvIujdzc0019nobodyさん
2008/03/14(金) 21:01:04ID:???0020nobodyさん
2008/03/14(金) 21:10:40ID:???0021nobodyさん
2008/03/14(金) 21:30:53ID:???0023nobodyさん
2008/03/15(土) 04:31:17ID:???0024nobodyさん
2008/03/15(土) 18:59:02ID:???SmartyはApacheで確認できないんですね
0025nobodyさん
2008/03/15(土) 19:03:04ID:???0026nobodyさん
2008/03/18(火) 12:21:04ID:YNr5gB9L例えば開始と終了日付がありリセットボタンが押された際にjavascrptが、動いて片方だけデフォルト値に戻る等
0027nobodyさん
2008/04/06(日) 21:01:07ID:???作ったやつらってあまり賢くないよなw
0029nobodyさん
2008/04/11(金) 13:33:17ID:lTuTwlT7ソースみたらリファレンスで返さなくちゃいけないのに
function &get($file_name, $section_name = NULL, $var_name = NULL)
リファレンスで返してない
return (array)$this->_config_data[$file_name]["vars"];
0030nobodyさん
2008/04/14(月) 01:03:25ID:iLkauD+Aみたいな事やるとなにがしかのエラーが出たと記憶していたのですが、
今試してみたらエラーが出ません。
どこかのバージョンから変更になったのでしょうか?
それとも元からが勘違いだったのでしょうか?
0031nobodyさん
2008/04/14(月) 05:42:53ID:/O4ED1WGDQN男の家族消えろ DQN男の親消えろ DQN男の友達消えろ DQN男の親戚消えろ
DQN男の家族消えろ DQN男の親消えろ DQN男の友達消えろ DQN男の親戚消えろ
DQN男の家族消えろ DQN男の親消えろ DQN男の友達消えろ DQN男の親戚消えろ
0032nobodyさん
2008/04/18(金) 06:04:17ID:uLMECrIl<textarea name="hoge">{$hoge|escape}</textarea>
というテンプレートで入力フォームを作りました。
入力フォームに値を入れて画面遷移するとデータベースに入力内容を入れて完了画面がでます。
同じ入力フォームでデータの更新をするページを作ると問題が発生しました。
タグ文字列は通過させながらもHTMLが壊されないようにしないといけないのですが、いい方法ないでしょうか。
0033nobodyさん
2008/04/18(金) 06:41:29ID:???0034nobodyさん
2008/04/18(金) 07:33:12ID:???0035nobodyさん
2008/04/18(金) 08:13:30ID:Kck9JNI8どのようにすればよいでしょうか。
display()する前に、phpのheader()を書くことで、
追加できてはいるのですがコードの流れ的に不自然というか・・
あと、例えばContent-lengthヘッダを追加したいとかなると、
ますますテンプレートと行き来することになり、ますます変な気がします。
Smartyでヘッダ追加の関数はあるんでしょうか。
0036nobodyさん
2008/04/19(土) 23:32:19ID:???0037nobodyさん
2008/04/19(土) 23:35:20ID:???0038nobodyさん
2008/04/20(日) 00:29:00ID:ui/WcxXdキャッシュとかカスタムプラグインとかいろいろ
0039nobodyさん
2008/04/20(日) 00:33:38ID:???0040nobodyさん
2008/04/20(日) 04:24:32ID:???変更判定をしっかりやって欲しい
0041nobodyさん
2008/04/22(火) 19:44:38ID:???複数のサーバで同じシステム使っているのだが
phpファイルの変更にはツール使って一発で全サーバ更新できるので便利。
デザインやリンク先の違いも全部吸収できる。
まあテンプレートエンジンならなんでもいいんだけど
速度よりメンテ性重視にするとSmartyになった。
0043nobodyさん
2008/04/23(水) 00:52:29ID:???PHPの<?php ?>でhtmlファイルをPHP化して埋めるのと、
あまり大差無いと思うんだが。
デザインとプログラムの分離としてしばらく勉強してきたけど、
Smarty専用のコードを覚える=プログラムを覚えることと同義な気がする。
0044nobodyさん
2008/04/23(水) 01:22:37ID:???0045nobodyさん
2008/04/23(水) 04:20:00ID:???誰かSmartyリファクタリングしてくんねーかなぁ、
default_modifiersバグや、キャッシュの反映チェックがぬるい等
便利機能がいまいち使いこなせないのが辛い。
0046nobodyさん
2008/04/23(水) 11:20:20ID:???それもあるんだよなw
一度デザイナーからhtmlを受け取ってシステム化した後、
修正が入る場合、画像作成とか以外では、PG側がしなきゃいけないもんな。
でも、それもデザイナーがSmartyのソースいじる可能性もあるし、
やっぱり同じ事のような気がする。だから厳密なデザインとプログラムの分離
とは行かないんだよな。
0047nobodyさん
2008/04/23(水) 15:25:42ID:pSFXKy0Fボタン1つで複数のサーバにsshアップロードする機能があるFSW。というか自作だけど。
以前はテンプレートエンジンなしでこのツール作ってたが1サイトだけマーキー入れてほしいとかいう要望に対しては
手作業で対応するしかなかった。
もちろんサイト間の差分なんか把握できるわけない・・・
>>46
>>44みたいな使い方もできるし、デザイナにもっと権限を与えることもできる、でいいんじゃないかなあ。
0048nobodyさん
2008/04/23(水) 16:01:50ID:???故意にPHPコードを書かない限りは、Smarty内で簡潔するので、安全っちゃ安全。
0049nobodyさん
2008/04/23(水) 19:51:43ID:rNbxu3m+yum install php-Smarty
がインストールできないのですが、なんで?
その前にインスコしておくものはありますか?
CENT OSなんですが....
0050nobodyさん
2008/04/23(水) 20:00:10ID:???005149です。
2008/04/23(水) 21:36:12ID:rNbxu3m+0052nobodyさん
2008/04/23(水) 23:04:45ID:???0053nobodyさん
2008/04/24(木) 15:44:39ID:???こういうのってパッケージ管理使う意味あるのかな。
0054nobodyさん
2008/04/24(木) 15:50:43ID:???0055nobodyさん
2008/04/24(木) 21:52:29ID:???0056nobodyさん
2008/04/26(土) 23:54:58ID:???sqlserverでカラム名が和名。
select 住所1 from 得意先マスタ
その和名のまま連想配列にしてテンプレートに渡すとエラーになる。
select 住所1 as zyuusyo1 from 得意先マスタ
これで渡すとzyuusyo1でちゃんと取得できる。
まあ、和名テーブルやらカラムを作るなって話だが、今あるからしかたない。
まだまだ、和名には弱いのかなぁ?実はパッチがあったりしますか?
あと、テンプレート側で、都道府県名と言う文字列を含めるとエラーになる。
県名にかえたらエラーでず。
んーーーー。不便。
0057nobodyさん
2008/04/27(日) 00:37:38ID:???0058nobodyさん
2008/04/27(日) 08:48:29ID:???0059nobodyさん
2008/04/27(日) 12:24:18ID:???MySmartyだと、何かダサイ気がしてならない
0060nobodyさん
2008/04/27(日) 14:53:43ID:???相手は死ぬ
0062nobodyさん
2008/04/28(月) 11:48:26ID:???SmartyMobile
SmartyWeb
SmartySitename
SmartyView
的な命名の方がよくね?
0063nobodyさん
2008/04/28(月) 12:11:28ID:???って考えるのが面倒くさいから、いつもMySmarty
0064nobodyさん
2008/04/28(月) 18:00:24ID:???0065nobodyさん
2008/04/28(月) 18:33:55ID:???0066ムームー
2008/05/02(金) 02:13:12ID:xWzxYhLM「このディレクトリをwebサーバのドキュメントルート下に置く事を推奨しません。」
と書いてあるんだけど、根拠がわかる人いる?
0067nobodyさん
2008/05/02(金) 02:14:59ID:???0068nobodyさん
2008/05/02(金) 02:26:22ID:???おまけに内部のデータ構造も推測できちゃう作りでしたとかやる奴がいるからだろう
0069ムームー
2008/05/02(金) 03:55:53ID:xWzxYhLM> 逆になぜ置く必要があるのか
テンプレートを別ディレクトリに配置すると、保守性が悪いから。
>>68
> httpdの設定ミスってテンプレートだだ漏れ
> おまけに内部のデータ構造も推測できちゃう作りでした
テンプレートが見られても、あんまり危険性がないと思うんだけどな。
escape し忘れて XSS される、ぐらいかな。
でも、そんなのはテンプレート見るまでもなく、
実際に入力してみれば escape していないことはすぐ分かるしさ。
0070nobodyさん
2008/05/02(金) 08:18:26ID:???もしくはせめてaccessでも使え
0072nobodyさん
2008/05/02(金) 13:35:15ID:???推奨であってドキュメントルート下だと動作しない訳じゃないんだし
俺はレンタルサーバとかでドキュメントルートにしか置けない場合を除いて別ディレクトリに置くけどな
0073nobodyさん
2008/05/02(金) 14:11:27ID:???0074nobodyさん
2008/05/02(金) 14:25:29ID:???0075nobodyさん
2008/05/02(金) 14:31:06ID:???ローカルで管理しづらいって、さっぱりわからんなあ
例えばドキュメントルートの一つ上の階層にテンプレートを置くとして
そこを基点に管理するだけの話だと思うんだが
0076nobodyさん
2008/05/02(金) 17:21:49ID:???0077nobodyさん
2008/05/02(金) 18:53:27ID:???HTMLコーディングしてる最中にプレビュー出来ないってのが面倒だって事だろ?
0079nobodyさん
2008/05/03(土) 19:44:56ID:???templates/index.html
htdocs/image.jpg
というファイル構成だと、
ローカルファイル上で画像チェックをする術が無いって事だよ。
これは、コーダー観点で見ると致命的に面倒。
htdocs以下をテンプレートディレクトリにする事で解消されるから、利便上htdocsに置く人達がいるわけだ。
templatesディレクトリに画像とか置いちゃう方法でもいいんだけど。
0080nobodyさん
2008/05/03(土) 20:00:42ID:???0081nobodyさん
2008/05/03(土) 21:44:08ID:K4MBJC9r0082jtb
2008/05/03(土) 21:57:29ID:???0083nobodyさん
2008/05/03(土) 22:08:53ID:???0084nobodyさん
2008/05/03(土) 23:29:36ID:???ローカル上のシステムって意味がわからんが。
ローカル鯖でも立てない限り、確認は無理。
コーダーに鯖立て強要(例えXAMPPでも)も厳しい。
OK?
0085nobodyさん
2008/05/03(土) 23:33:32ID:???0086nobodyさん
2008/05/03(土) 23:36:53ID:???0087nobodyさん
2008/05/04(日) 00:40:42ID:???この業界から消えていいよ。
0088nobodyさん
2008/05/04(日) 01:46:37ID:???まぁ、俺なら*.tpl(*.htmlを含んでもいい)をtemplateディレクトリに、残りをhtdocsに置くスクリプトを用意するけどね。
0089nobodyさん
2008/05/04(日) 02:21:16ID:???0090nobodyさん
2008/05/05(月) 19:52:01ID:???高校生バイトじゃあるまいし
0091nobodyさん
2008/05/06(火) 12:34:25ID:???何を使ってるの?
0092nobodyさん
2008/05/06(火) 15:53:08ID:???本番環境は手作業だなあ
0093nobodyさん
2008/05/06(火) 22:40:24ID:???0094nobodyさん
2008/05/07(水) 14:15:57ID:???それもやるけど、しかしコンソールに生のHTML、しかもオーサリングソフトで作ったような多重テーブルとスクリプトが含まれる
テキストはもはや人間の読むものではない。
0095nobodyさん
2008/05/09(金) 04:28:25ID:???0098モモ子
2008/05/09(金) 13:33:34ID:6V2WpTSb面倒だよねー?何かいい方法はないかなー?
0099nobodyさん
2008/05/09(金) 14:51:49ID:???0100nobodyさん
2008/05/09(金) 16:58:56ID:???・escape済の変数をassignする
・もしくはdefault_modifiersにescapeをいれとく
お好きなほうでどうぞ。
後者は特定の条件で不具合が発生するので、自力で修正する自信ないならお勧めしない。
0101nobodyさん
2008/05/10(土) 08:34:44ID:???日本とは感覚が違ってて必要とされてないのかな。
0102nobodyさん
2008/05/10(土) 09:46:22ID:???0103nobodyさん
2008/05/15(木) 19:11:15ID:ss9CEhce0104nobodyさん
2008/05/19(月) 00:22:26ID:???0105nobodyさん
2008/05/21(水) 08:04:10ID:???正規表現で独自タグを変数に置換して出力。
っていう古式ゆかしきCGI技じゃいかんの?
Smartyの3〜4倍は速いぞ。
0106nobodyさん
2008/05/21(水) 08:06:14ID:???0107nobodyさん
2008/05/21(水) 08:12:24ID:???ちゃんとロジックとデザイン分離できてるじゃん。
そもそもPerlとか他の言語のテンプレートエンジン全般に言えるけど、
こういうシンプルな目的だったのに、
万人の要望に応えるうちに無駄に富豪化して、
ムーアの法則頼りで突っ走ってるのが、今のテンプレートエンジンだろ。
0108nobodyさん
2008/05/21(水) 09:50:33ID:???デザインとロジックの分離レベルにもよるけど、
ビューで処理すべきロジックもあるって事だ。
if
foreach
include
|escape
あたりは最低限必須だろ。
0109nobodyさん
2008/05/21(水) 10:14:55ID:???>108がそう思ってるならその自分のやり方を貫けばいい
自分の考えを押し付けるのが一番うざい。
0110nobodyさん
2008/05/21(水) 12:49:26ID:???もっとも>>108の挙げてる機能くらいは無いと確かに困るというか
ロジック側でHTMLを吐く必要性が出てくるので嫌
0111nobodyさん
2008/05/21(水) 12:49:45ID:???実装の統一化は今後の開発効率を左右する重要な課題。
ただ、Smartyに何かが足りないのは確か。
結局どこかで独自に使い方を工夫しないといけない場合が出る。
特にescape。
0112nobodyさん
2008/05/21(水) 13:06:06ID:???統一すれば効率はいいだろうが、そんなツマラン世界は御免こうむる
0114nobodyさん
2008/05/22(木) 01:18:43ID:???//使うなって言われる噴飯モノの現場もあるしな
しかも理由が「/**/と入れ子にできちゃうから」という意味不明具合
0116nobodyさん
2008/05/22(木) 02:33:05ID:???いくらコード練っても、中/印/ベトナム経由の「安いだけの人材」がケツ噛み続ける時代
会社としてのポストがなくなる
「MFC超得意だからMSなくなるまでは困らん」と言ってた先輩が潰れて実家の本屋継いだぜ
「PHP? 新し物好きは迷惑だね。perlで一生食っていけるよ」と豪語してた
馬鹿女は、アルコールで精神病院を経て休職後、そのまま元彼と寿退社してリタイアだ。
一番頼れる仲間は某MTAのドキュメントにも名前を連ねる我が社の誇りだった人
今はビル屋上緑化を主とする企業のヒラ営業に転職しちまったぜ。
毎日PHPに限らずコード書かされてて思うが、
なんかそういうドロップアウトした筈の彼らがみんな幸せそうに見えるんだ
なんでなんだろう
なんの話だっけ
0117nobodyさん
2008/05/22(木) 12:54:15ID:???0118nobodyさん
2008/06/01(日) 12:02:10ID:hyBgIur50119nobodyさん
2008/06/01(日) 17:37:18ID:???0120nobodyさん
2008/06/01(日) 18:54:42ID:???0121nobodyさん
2008/06/02(月) 03:03:23ID:???0122nobodyさん
2008/06/02(月) 03:08:23ID:???0124nobodyさん
2008/06/02(月) 05:30:17ID:???0126nobodyさん
2008/06/02(月) 06:36:26ID:???再コンパイルするしかない訳ですね。
わかります。
0127nobodyさん
2008/06/02(月) 18:15:50ID:???0128nobodyさん
2008/06/03(火) 04:20:49ID:???どこで再配布してますか?
0129nobodyさん
2008/06/03(火) 08:16:30ID:???関連ファイルは全部削除しないとダメだよ
0130nobodyさん
2008/06/03(火) 14:28:35ID:???貴様らありがとう。
0131nobodyさん
2008/06/04(水) 22:39:07ID:???俺が来るまで何年もプログラミング初心者が入ってきては辞めての繰り返しだったみたいで、
機能つけたしが全てSmarty設置で実現されてるwww
サイトのいたるところにvarだのbinだのがあるwwww
勘弁してくれwwww
0132nobodyさん
2008/06/04(水) 22:53:01ID:???0133nobodyさん
2008/06/05(木) 12:25:23ID:???0135nobodyさん
2008/06/05(木) 14:50:40ID:???逆に趣味とかじゃ使いたくない。
0136nobodyさん
2008/06/05(木) 21:38:50ID:???俺は半年ほど休んでた時期に趣味で遊んだのはSchemeだけだった。
実務(共同作業)がSchemeでも進められるなら、迷わずこれを選ぶ。
しかし近年の現実はどいつもこいつもPerlすら宇宙語だからな。PHP一択にならざるをえない。
0137nobodyさん
2008/06/06(金) 13:01:48ID:???MovableType4.1 + αカスタマイズのCMSモドキの方が、お客には受けが良かった上に見積もりも良かった!
業務でSmartyを使うなら、隠れて使いたい
0138nobodyさん
2008/06/06(金) 21:00:18ID:???0139nobodyさん
2008/06/06(金) 22:14:37ID:???0140nobodyさん
2008/06/06(金) 23:39:38ID:???いや、判断材料としては操作感も重要だけど、使う側と作る側のロジックが違うから
どう考えても不条理な操作が要求されたりするんだよなあ。
もちろん使う人のために作るんだからお客様優先なわけだが、
将来コケるのが目に見えてるから困る。
0141nobodyさん
2008/06/06(金) 23:48:35ID:astBuURj・セールスレターテンプレート集(68通)
・売れるセールスレターの書き方
・ダイレクトメールワークシート
・穴埋め式Eメールテンプレート(14通)
・究極のセールスレターツールBOX
など、合計で500ページ近いパッケージとCDROMが
セットになっています。
ただ、この無料お試しはだいぶコストがかかるらしいので
500個の限定だそうです。
興味があればこちらをクリックしてください。
http://www.123marketing.jp/yanik/indextrial.php?jvcd=16797
0143nobodyさん
2008/07/10(木) 05:42:24ID:NxX5vAdg{$value + 3}など。
試してみたのですが、{$value}の値がそのまま出力されます
0144nobodyさん
2008/07/10(木) 09:09:32ID:???0145nobodyさん
2008/07/10(木) 21:23:41ID:???0146nobodyさん
2008/07/21(月) 01:40:20ID:8uak49aQ<?php
require_once("Smarty/Smarty.class.php");
classMySmartyextendsSmarty {
publicfunction__construct() {
$this->Smarty();
$this->template_dir="./data/templates";
$this->compile_dir="./data/templates_c";
}
}
?>
■ test.php(MySmarty.class.php と同じディレクトリ) → 正常に動作
<?php
require_once( './MySmarty.class.php' );
$o_smarty = new MySmarty();
$o_smarty->display( "main.tpl" );
?>
■ dir.php(MySmarty.class.php の直下のフォルダ) → エラー
Warning: Smarty error: unable to read resource: "main.tpl" in C:\hoge\Smarty\Smarty.class.php on line 1092
<?php
require_once( '../MySmarty.class.php' );
$o_smarty = new MySmarty();
$o_smarty->display( "main.tpl" );
?>
これは仕様なの?
0147146
2008/07/21(月) 01:41:40ID:8uak49aQ2chにコピペするときの変換ミスで、実際は正常に動いています。
0148nobodyさん
2008/07/21(月) 01:47:07ID:???0149146
2008/07/21(月) 01:52:13ID:???ええ!? マジすか……。
それじゃ、ディレクトリが多数ある場合は、
全てのディレクトリにMySmarty.class.phpが必要ってこと?
プラグイン自作してどうにかなる話じゃないですよ?w
0150nobodyさん
2008/07/21(月) 02:24:44ID:???0151nobodyさん
2008/07/21(月) 03:18:45ID:???いや、文字通り、Smarty.class.phpを継承した設定済みのMySmarty.class.phpを
直下以外のディレクトリに置くとtemplatesディレクトリの認識がしなくなるのが仕様だったら、
多数のディレクトリ分けしてると超大変だよね、って言ってるんだけど。
>>146が仕様で間違いないのなら、俺は何か間違ったこと言っているか?
0152nobodyさん
2008/07/21(月) 09:54:38ID:???dir.phpからみて
$this->template_dir="./data/templates";
$this->compile_dir="./data/templates_c";
このディレクトリはどこでしょう?
0153nobodyさん
2008/07/21(月) 12:55:50ID:???dir.phpは、MySmarty.class.phpを呼び出しているだけで、
dataディレクトリは、MySmarty.class.phpから見た相対パスだから、
dir.phpから見たdataディレクトリの場所は、関係ないと思うけど。
そもそも、なぜか絶対パスを受け付けてくれんのよね。エラーになる。
0154nobodyさん
2008/07/22(火) 08:41:57ID:???こっちのほうが深刻というか根幹な問題をかかえてる気がするのだが・・・
0155nobodyさん
2008/07/24(木) 14:01:26ID:???0156nobodyさん
2008/07/24(木) 21:30:17ID:???これは、デフォルトのテンプレートディレクトリの名前です。 ファイルのインクルード時にリソースの種類を指定しなかった場合は、
このディレクトリから探します。デフォルトは ./templates で、 これは、実行しているスクリプトと
同じ場所にある templates/ ディレクトリを探すということです。
という文章からすると「実行しているスクリプト」が基準になるということみたいだな。
0157nobodyさん
2008/08/01(金) 21:13:05ID:???そんなことより、PHPもJSPのように
カスタムタグが使えたらいいのにね。
0158nobodyさん
2008/08/02(土) 02:29:09ID:???0159nobodyさん
2008/08/02(土) 19:51:20ID:???ぶっちゃけ、必要な機能だけ絞り込んで自分で作った方がいい。
0160nobodyさん
2008/08/02(土) 19:56:13ID:???0161nobodyさん
2008/08/03(日) 10:51:13ID:4+uLL3BX0162nobodyさん
2008/08/03(日) 11:32:25ID:???各種FW使うなら同梱されてるテンプレートエンジンを使う
0163nobodyさん
2008/08/04(月) 11:49:55ID:???smartyで↑の「xxx」を取得する方法ってありますか?
0164nobodyさん
2008/08/04(月) 22:09:03ID:???例で示されたxxxの部分は通常サーバ側には送信されることはない。
なのでサーバサイドで動いているsmartyから取得することは不可能。
0166nobodyさん
2008/08/06(水) 21:40:18ID:???0167nobodyさん
2008/08/07(木) 20:08:18ID:???0168nobodyさん
2008/08/07(木) 20:16:02ID:???0169nobodyさん
2008/09/04(木) 10:40:28ID:???で出力された結果が複数行にわたる場合、全ての行に対してインデントさせるにはどうすればいいですか?
{"\t"}{include}
とかしても先頭の行だけしかインデントされなくて
0170nobodyさん
2008/09/04(木) 11:33:28ID:???0171169
2008/09/04(木) 12:15:47ID:???0172nobodyさん
2008/09/04(木) 12:25:57ID:???0173169
2008/09/04(木) 21:08:05ID:???配布されているウェブアプリがsmartyを使っているのですが
配布ファイルのバージョンアップの際に面倒なことにならないかな・・・と
というかphpはわからなくて
smartyも触るのは初めてでマニュアルを見ながら触っているのですが・・・
インデントするのも難しいですね
レスしてくれた方々、ありがとうございますm(_ _)m
0174nobodyさん
2008/09/04(木) 21:11:12ID:???0175nobodyさん
2008/09/04(木) 21:31:16ID:???0176169
2008/09/05(金) 00:54:49ID:???レスしてくれた方々、ありがとうございますm(_ _)m
0177nobodyさん
2008/09/24(水) 00:32:25ID:KMdxurbqタグとクラスが一対一になってるのが素晴らしい。
0178nobodyさん
2008/09/25(木) 00:09:46ID:lXgzxRnB<p>名前:{$name}</p>
テンプレートに上記のような記述をしたのですが、
「名前:」の部分が化けてしまいます。
テンプレートファイルはEUCで保存してあります。
原因としてはどのような事が考えられますか?
0180178
2008/09/25(木) 02:06:16ID:???見ましたが、既に化けてます・・・
SmartyがEUC以外の文字コードで
テンプレートを処理しているということでしょうか?
0181nobodyさん
2008/09/25(木) 02:17:37ID:???0182178
2008/09/25(木) 02:47:42ID:???あ、Smarty.class.phpがカスタマイズされていました。
SJIS→EUC→SJISみたいな変換してる。
お騒がせしました。すみません。
既存のものとは別にSmartyを入れます。
0183nobodyさん
2008/09/26(金) 16:36:37ID:NKaAViJVそんなファイルないよっていうエラーが出るんですが、なぜでしょうか?
ためしに、force_compileをtrueにしてみましたが、やっぱり見に行ってしまうようです。
0184183
2008/09/26(金) 17:02:20ID:NKaAViJVこれはいったい・・・。
0185nobodyさん
2008/09/26(金) 17:16:56ID:???0186nobodyさん
2008/09/26(金) 17:23:10ID:NKaAViJVすいません、重要な点を忘れていました。
その別ディレクトリでコンパイルされたテンプレートを、
動かない方のtemplate_cにコピーしてやると、動くのです。
なのでパスが違ってはいないです。
全く謎・・・
0187nobodyさん
2008/09/26(金) 17:49:10ID:???0188nobodyさん
2008/09/26(金) 23:07:17ID:???さっきひさぶりにやってみたらsjisでも問題なく動いた(?_?)
0192nobodyさん
2008/10/02(木) 16:19:26ID:???postFilterで元に戻す。
これは基本だろう。
0193nobodyさん
2008/10/03(金) 12:27:37ID:???0194nobodyさん
2008/10/03(金) 19:01:42ID:???よりも
名前:{$name}
のほうが書きやすくて可読性も高いから。
0195nobodyさん
2008/10/03(金) 19:14:40ID:???0196nobodyさん
2008/10/03(金) 19:36:59ID:???0197nobodyさん
2008/10/03(金) 20:29:13ID:???0198nobodyさん
2008/10/04(土) 01:57:42ID:???素人or中級者未満だと自覚した方が良いよ。
0200nobodyさん
2008/10/05(日) 01:31:28ID:???意味がわからんというのは、君のやってる事のレベルが低いからだと思うよ。
PHP単体でキャッシュ処理や、ループ処理、エスケープ処理、携帯、PC両対応を想定したテンプレートを書いてごらん。
PHPはテンプレートっぽく使えるだけで、実務的にテンプレート管理を行おうとしたらかなりの量のコーディングが必要になってくる。
結局はテンプレートエンジンを作る必要はあるんだよ。
0201nobodyさん
2008/10/05(日) 01:40:36ID:???<?php echo strlen($var) ? preg_replace("/[\r\n]/", "<br />", htmlspecialchars($var)) : "hoge";?>
・Smarty
{$var|escape|nl2br|default:"hoge"}
0202nobodyさん
2008/10/05(日) 06:55:52ID:???0203nobodyさん
2008/10/05(日) 11:15:11ID:???0205nobodyさん
2008/10/06(月) 03:08:54ID:???「そんなコードを書く状況は100%ねぇよw」って言うなら、Smarty使う意味無いけど。
0206nobodyさん
2008/10/06(月) 08:52:51ID:???>なぜphpのほうでnl2br使わんの
知らなかっただけだろ。
あと preg_replace("/[¥r¥n]/", "<br />") だと "¥r¥n" があったときに <br /><br /> になっちゃうから
ここは preg_replace("/¥r?¥n/", "<br />") だよな。旧Macは無視したとして。
nl2br知らないわ、正規表現間違うわじゃ、底がしれる
0207nobodyさん
2008/10/06(月) 08:55:31ID:???>PHP単体でキャッシュ処理や、ループ処理、エスケープ処理、携帯、PC両対応を想定したテンプレートを書いてごらん。
キャッシュは専用ライブラリを使う
ループ処理はPHPのforeachやwhileをそのまま使う
エスケープ処理はhtmlspecialchars()を使うか、短い名前で定義する
携帯、PC両対応はSmartyに備わってる機能ではない
0212196
2008/10/06(月) 19:40:07ID:???<?=h(e(n($name)))?>
0213nobodyさん
2008/10/06(月) 20:27:56ID:???そんなの結局は劣化車輪の再発明でしかないし、Smartyを使わない理由を述べよ。
0214nobodyさん
2008/10/07(火) 12:25:11ID:???実用レベルでは、してはいけない「車輪の再発明」だが、
言語の学習段階ではレベルアップのために、あえて「車輪の再発明」は必要...
論点ずれた。スマゾ
0215nobodyさん
2008/10/07(火) 14:30:17ID:???物理習うときにニュートン方程式の再発明から始めるのか?
0216nobodyさん
2008/10/07(火) 15:03:12ID:???ぶつりほうそくとは発見ではなく自然の理解であるからして。
同様に、対象を理解するために先人の真似をするのは無駄じゃない。
物理の授業でニュートンがやった実験やるのはべつに遊びってわけじゃない。
0217nobodyさん
2008/10/07(火) 15:10:28ID:???学習するためにやるものじゃない。
0218nobodyさん
2008/10/07(火) 18:26:45ID:???車輪の再発明自体は否定も肯定もしないけど、
>>212 とか、再発明の域にすら達してないだろ。
単にSmartyを勉強するのが面倒だから、批判してるだけに見えてしまうんよ。
実際そうなんだろうけどw
0219nobodyさん
2008/10/07(火) 21:01:42ID:???0220nobodyさん
2008/10/08(水) 08:35:32ID:???>全部Smartyで出来るじゃんw
>使わない理由と、他のライブラリを使う理由を述べよ。
逆だよ。PHPでできるのに、なんでSmartyを使う必要があるのってこと。
0221nobodyさん
2008/10/08(水) 08:44:32ID:???だからなんなん?
テンプレートエンジンを利用すれば簡潔に記述できるのは事実だろ
0222nobodyさん
2008/10/08(水) 14:08:02ID:???PHPで関数集なり、テンプレートエンジンもどきを作るくらいなら
なんで既存の枯れはてたSmartyを使わないのって事。
まぁ >>212みたいなのを見ても尚、PHPで同じ事が出来る。
と感じているのであれば、何説明しても無駄だろうけどさ。
テンプレート関数毎回作って、毎回デザイナに説明して、毎回デバッグしてるんだろうねw
0223nobodyさん
2008/10/08(水) 16:35:41ID:???だから毎回デスマーチになるのかw
0224nobodyさん
2008/10/09(木) 09:57:36ID:???デザイナに渡すときも
あとはよろしくねーって言えること。
マニュアルもちゃんとしてるし。
0225nobodyさん
2008/10/09(木) 11:10:47ID:???それでもPHPベタ書きよりはよほど楽だしあとで修正しやすい。
0226nobodyさん
2008/10/09(木) 16:09:53ID:???0227196
2008/10/09(木) 23:38:15ID:???> PHPで同じ事が出来る。
逆だよ。Smartyが前提なのではない。
素のPHPに対してSmartyをわざわざ追加する必要が無い、ということ。
しかしほんと、化石みたいなスレだな。
Smarty信者はまだPHP4とか使ってるのかね。
0228nobodyさん
2008/10/10(金) 00:21:33ID:???0229nobodyさん
2008/10/10(金) 01:12:51ID:???必死すぎwww
196のコードなんでPHP4とか以前にPGとしてウンコのレベルだろww
君が無知なのはわかったから
PHP単体じゃテンプレートエンジンとして機能しないのに、
「何故、Smartyは必要ないのか」を具体的に答えてくれよな?
もしSmarty云々じゃなくてテンプレートエンジンがいらねーって事なら論外だ。
初心者スレから出直してこい。
>>228
普通に使われているし、需要も多いよ。
先月にも解説新刊が出た。
0230196
2008/10/10(金) 09:49:15ID:???答えは196に示してある通りなんだが。
俺もSmartyは仕事で3年くらい使ってたよ。
> 「何故、Smartyは必要ないのか」を具体的に答えてくれよな?
> もしSmarty云々じゃなくてテンプレートエンジンがいらねーって事なら論外だ。
じゃあ俺はお前さんにとって論外らしいので、議論の余地は無いな。
SmartyじゃないとMVCが守れない開発者は現場では使えない。
もしお前さんがデザイナーなら、PHPの基礎くらい勉強しろと言いたくなるな。
うちのWebデザイナーはみんなPHP触れるよ。
> 初心者スレから出直してこい。
ここよりレベルの低いスレがあるのか。それは恐ろしいな。
0231nobodyさん
2008/10/10(金) 10:34:43ID:???それだとあとでデザイン修正があったときとかめんどくさくない?
もらったデザインを前のとdiffかけて
差分をtplに反映とか。
ただプログラマが一元的に管理してたほうが
セキュリティ的にはいいよね。
escape忘れただけで大変なことになることもあるし。
0232nobodyさん
2008/10/10(金) 15:47:13ID:???0233nobodyさん
2008/10/10(金) 17:37:52ID:???こんな輩が得意げに宣ってるからPHPはウンコだって言われるんだろうな。
0234nobodyさん
2008/10/10(金) 17:44:35ID:???0235196
2008/10/10(金) 23:28:20ID:???209の要件を満たす方法の一つが212で、それは211と大して変わらない。
だけど196は、MVCさえ理解できれば、209で述べられている要件も、
201よりスマートなコードにする事も、満たすことが出来るんだ。
なんでか知らんけど、Smartyを信じる人は知識があって偉い、
そうじゃない人はみんな素人だ、という反論しか戴けないのは残念だな。
>>234
ストローク数の少なさと可読性は若干損なわれるが、
それでもSmartyよりは<?php echo $name ?>のほうがマシだと思う。
0236nobodyさん
2008/10/11(土) 00:30:31ID:???>そうじゃない人はみんな素人だ
誰もそんな事言ってないから。
君がSmartyを否定するだけの根拠を持ち出さないから素人扱いされちゃうんだよ。
(まぁ、テンプレートエンジンを否定してる時点で底が知れてるけども。)
196が良いって、グローバル変数かつ、ショートタグかつ、エスケープ無しがView的にOKって事かい?
それなら、早急にWEB系PGを辞めた方が良い。
212の記法に疑問を持たないのであれば、
やはり、早急にPGを辞めた方が良い。
一応聞いとくけど、OOP&MVC的に開発する時、どんな構成で作ってるの?
フレームワークとかライブラリとか教えてよ。
まさかhtdocs以下に.phpファイルを量産してたりしないよね?
0237nobodyさん
2008/10/11(土) 06:53:44ID:???ほらほらこんな書き方すると単にSmartyを叩いてるようにしかみえないよ
196が同じ人なら、その内容からとてもSmartyを理解してる人には思えないんだよね
>196は良いと思うんだけどな。
PHP(web)初心者だよね(笑)
0238nobodyさん
2008/10/11(土) 12:06:19ID:???今まででたのは、<?php echo $var; ?> が短く書けることぐらい?
SymphonyとCodeIgniterを使って開発したけど、どっちもSmarty使わなかったし、それで何の問題もなかった。
>>229
>「何故、Smartyは必要ないのか」を具体的に答えてくれよな?
・SmartyでやろうとしていることはPHPでできる
・Smartyは学習コストがかかる
・Smartyは遅い
・Smartyのテンプレートでエラーがあった場合、その行番号がずれている
で、Smarty使う理由って何?
>>229は他人を無知よばわりしてるから、おれの知らないSmartyの利点ってやつを教えてくれ。
0239nobodyさん
2008/10/11(土) 12:07:00ID:???0240nobodyさん
2008/10/11(土) 22:10:00ID:???→ PHP単体では出来ない。別個にエンジンを作る必要がある。
キャッシュ、フィルタ、プラグイン、コンフィグをPHP単体でどうやって書くんですか?
・Smartyは学習コストがかかる
→ 少なくとも独自エンジンやPHPを覚えさせるより、簡単で学習環境も整っている。
・Smartyは遅い
→ 同様の機能(キャッシュ、構文、プラグイン等)を実際に実装して比較してみたかい?
スレ頭のピュアコードより5倍遅いとかいうのを真に受けてるだけだろw
ビジネスロジック層と比べれば軽い処理なので、システム的には対した差はでねーよw
・Smartyのテンプレートでエラーがあった場合、その行番号がずれている
→ ずれてないよww エラー英文すら読めないレベルかwwww
そもそもPHPのテンプレートエラーはシステムに障害をきたすし、論外だ。
→PHP単体でなく、Smartyを使う理由?
・テンプレートエンジンとして必要な機能を備えている
・拡張がし易い
・デザイナのコードがシステムに混入しない
・PHPテンプレートエンジンとしてはメジャーで扱える人が多い
>SymphonyとCodeIgniterを使って開発したけど、どっちもSmarty使わなかったし、それで何の問題もなかった。
良かったね。
僕らは楽して堅牢なシステムを作るためにSmartyを使ってるんだ。
SymphonyとCodeIgniterの利点を教えて欲しいな(^o^
0241nobodyさん
2008/10/13(月) 03:31:41ID:???0242nobodyさん
2008/10/13(月) 10:28:16ID:???0245nobodyさん
2008/10/13(月) 11:31:25ID:???>→ PHP単体では出来ない。別個にエンジンを作る必要がある。
> キャッシュ、フィルタ、プラグイン、コンフィグをPHP単体でどうやって書くんですか?
PEARにいくらでもライブラリあるけど。プラグインは普通に関数でいいだろ。コンフィグも普通にPHPファイル。
>→ 少なくとも独自エンジンやPHPを覚えさせるより、簡単で学習環境も整っている。
んなわけない。なんでPHPよりSmartyのほうが簡単で学習環境も整っているといえるんだよ。
>→ 同様の機能(キャッシュ、構文、プラグイン等)を実際に実装して比較してみたかい?
> スレ頭のピュアコードより5倍遅いとかいうのを真に受けてるだけだろw
>ビジネスロジック層と比べれば軽い処理なので、システム的には対した差はでねーよw
おまえこそほんとに測定したのかよ。明らかにSmarty遅いじゃねーか。
0246nobodyさん
2008/10/13(月) 11:38:35ID:???>→ ずれてないよww エラー英文すら読めないレベルかwwww
> そもそもPHPのテンプレートエラーはシステムに障害をきたすし、論外だ。
「<p>{$var}</p>」と1行だけ書いたテンプレートを用意し、$smarty->assign('var', new MyClass()); してから表示させるとこんなエラー。
PHP Catchable fatal error: Object of class MyClass could not be converted to string in /tmp/templates_c/%%C3^C35^C35E7879%%sample1.tpl.php on line 5
1行目なのに、コンパイルされたファイルの5行目でエラーとなっている。
これでどこがずれてないというの?おまえほんとにSmarty使ってるの?
> エラー英文すら読めないレベルかwwww
とかいうまえに、行番号ぐらい読めるようになろうぜwwww 数字の読み書きなら教えてやるぞwwww
>→PHP単体でなく、Smartyを使う理由?
>・テンプレートエンジンとして必要な機能を備えている
必要な機能はPHP自体がもっている。
>・拡張がし易い
>・デザイナのコードがシステムに混入しない
これはダウト
>・PHPテンプレートエンジンとしてはメジャーで扱える人が多い
PHPそれ自体はSmartyよりはるかにメジャー。PHPなら素人デザイナーでも基本は知っている。
わざわざSmartyを学習させる意味がわかんない。
0247nobodyさん
2008/10/13(月) 11:41:35ID:???>僕らは楽して堅牢なシステムを作るためにSmartyを使ってるんだ。
>SymphonyとCodeIgniterの利点を教えて欲しいな(^o^
いまどきこんなこと言うのは、フレームワークを使ってないということか。
あるいはオレ様フレームワークか。
これでオレ様フレームワークつかってたら笑うなー。
0248nobodyさん
2008/10/13(月) 12:01:54ID:???要するに、「うちのデザイナはPHP理解できるからSmartyいらないんだぜ」ってことな。
前提としてる環境が違うんだからいつまでも平行線なんだろうね。他にも摺りあわない理由はありそうだが。
0249nobodyさん
2008/10/13(月) 12:27:09ID:???外注に出す場合、まだsmartyの文法のほうが通じやすいと感じるがなー
既にsmartyを知ってるデザイナもちょこちょこいるし
知らない場合でもマニュアルの「II. テンプレートデザイナのための Smarty」だけ読んどいてで済む
さすがにPHPを覚えてくれとは言えない
0250196
2008/10/13(月) 14:37:10ID:???名前もうまく書けてないレスが多いが、正しくはsymfonyと言う。
>>236
> Smartyを否定するだけの根拠を持ち出さないから素人扱い
Smartyを否定するつもりは無いよ。
「否定したら玄人」とか、どんな中二病だよw
まず前提として、Smartyの是非を議論する場合、
Smartyありきではなく、Smartyと実装Aと実装Bは対等に比較されるべきなんだよ。
>>237も同じで煽りに内容が無い。
0251196
2008/10/13(月) 14:56:46ID:???> 196が良いって、グローバル変数かつ、ショートタグかつ、エスケープ無しがView的にOKって事かい?
その考え自体がモダンじゃないんだよな。
<?=$name?>を実行するファイルの先頭に書いたら、何が表示される?
Noticeが出るだけだよね(PHP4だと出ないかも)。当たり前のことだ。
「PHP単体」という言葉自体がおかしくて、(SmartyだってPHPだしな)
<?=$name?>を実行するためには、まず$nameに値を代入する必要があるんだよ。
ロジックから$nameに値を代入する過程が必ずあり、そこで、
スコープの決定と、エスケープなどのビュー用の加工処理が行われる。
ちなみに、スコープの決定条件は、196とSmartyで等価だよ。
パーサのメソッドの中でincludeしたら、スコープはそのメソッドの中になる。
212のコードの欠点は、ビュー用の加工処理が、
本来HTMLであるべきファイルの中で行われることだ。Smartyも同様。
まあ、俺はSmartyを否定したいのではなく、
別の選択肢を提示して、それに対する意見を聞きたかっただけなので、
とにかくSmartyを褒めてくれなきゃヤダヤダ、という話なら正直困る。
0252196
2008/10/13(月) 15:09:46ID:???DreamWeaverでしかページを作れないへぼデザイナーと仕事をするとか、
外注には出すがソースレビューしたくないという場合は、
大人しくWeb製作として依頼して、コーディングは自分でやった方がいいとおもう。
結局Smartyだろうが何だろうがビューはビューなので、
MVCが理解出来ない人にビューを作らせようとしてもうまくいかんし、
テストとデバッグは結局やらなきゃいけないんだよ。
デザイナーから見たら、実際どう描画されるかわからない記号の羅列を
マニュアルと変数名の指示書どおりにHTMLに書き込んでみたりして、
「たぶんこれで出来たと思うんですがどうでしょうか」と言わないといけない時点で、
それはプログラマー仕事としての負荷を被っているわけだよ。
実質的に、分業にもなっていなければ、責任の切り分けにもなっていない。
Smartyの良くないところをあえて挙げるならば、
「Smartyを使えば、へぼデザイナーとへぼプログラマーが協力出来る」という幻想を
蔓延させた事かも知れんねw
0253nobodyさん
2008/10/13(月) 15:10:55ID:???おまえさんはSmartyを否定してるんじゃなく、テンプレートエンジンを否定してるんだろ?
なら選択肢なんかじゃなくて具体的にどのように実装すべきかを提示してみてくれ
0254196
2008/10/13(月) 15:24:07ID:???「PHPはテンプレートエンジンとしての要件を満たす」というのが196の主張だ。
>>229はそれを否定していたので、そこからして論外なのだ。
テンプレートエンジンとしての要件みたいなものを脳内で想像してるなら、
まずそれを考えなおして、表現してみてくれ。
「必ずキャッシュ機能が無いといけない」とか
「PHPとして実行できてはいけない」とか
そういう特殊な前提があるんなら、それを踏まえないとお前さんの役には立てんよ。
俺の要件に則って具体的な実装を述べて良いなら、
196こそが「テンプレートファイル」の答えなのだ。
$nameに何をどこでどうやって代入すればいいのかについては、>>251に書いた。
そうそう、ディスパッチャの存在が前提になるんだ。そこはSmartyと同じだな。
0255nobodyさん
2008/10/13(月) 15:33:22ID:???いや、だからな
>ロジックから$nameに値を代入する過程が必ずあり、そこで、
>スコープの決定と、エスケープなどのビュー用の加工処理が行われる。
の具体例を提示してみてくれって話なんだが
0256nobodyさん
2008/10/13(月) 17:04:37ID:???Smartyのここがだめ、俺ならこう書く!ってのをサンプル出せや。
PEARとかライブラリとか出してきてる時点で、ピュアPHPじゃねーし。
使う事を否定しないが、君なりの構築術があるわけだろ?
それを示せよ。何と比較してダメなのか、要所要所わかりやすく上げてくれ。
0257nobodyさん
2008/10/13(月) 17:05:33ID:???ってだけならすれ違いだから、よそで最高のテンプレートエンジンを開発してくれよな!
0258nobodyさん
2008/10/13(月) 17:10:46ID:???>「PHPはテンプレートエンジンとしての要件を満たす」というのが196の主張だ。
>>>229はそれを否定していたので、そこからして論外なのだ。
うむ、同意だな。PHPはそれ自体でテンプレートエンジンとして使える。
> テンプレートエンジンとしての要件みたいなものを脳内で想像してるなら、
> まずそれを考えなおして、表現してみてくれ。
テンプレートエンジンとしての要件は、ビューを分離できること、でいいと思う。
>「必ずキャッシュ機能が無いといけない」とか
キャッシュ機能はビュー層が単体で持つべき機能じゃないよな。
もつべきならコントローラ層だ。
0259nobodyさん
2008/10/13(月) 17:18:03ID:???>ぐだぐだ言い分けしてないで、
>Smartyのここがだめ、俺ならこう書く!ってのをサンプル出せや。
前スレ読め。とっくに出てる。
>PEARとかライブラリとか出してきてる時点で、ピュアPHPじゃねーし。
はあ?ライブラリを使っちゃだめとか、頭どうかしてんじゃねーの。
Smartyだってライブラリだろ。なんでSmartyはよくて、他はだめなの?ばかなの?
それにPHPだけで書かれたライブラリはpure PHPだろ。言葉の意味間違ってるぞ素人さん。
>使う事を否定しないが、君なりの構築術があるわけだろ?
>
>それを示せよ。何と比較してダメなのか、要所要所わかりやすく上げてくれ。
だから前スレよめって。>>193以降全部読め。
0260nobodyさん
2008/10/13(月) 18:24:20ID:???別の選択肢を提示して、それに対する意見を聞きたかっただけなので、
>>193をそう解釈しろと言われても困る
0261nobodyさん
2008/10/13(月) 18:40:09ID:???>何と比較してダメなのか
→ PHPと比較して。
>要所要所わかりやすく上げてくれ。
>>238からのコピペ。
・SmartyでやろうとしていることはPHPでできる
・Smartyは学習コストがかかる
・Smartyは遅い
・Smartyのテンプレートでエラーがあった場合、その行番号がずれている
で、Smarty擁護派が>>240で反論してるけど、Smarty反対派が>>245-246で再反論してて、今はSmarty擁護派の再々反論待ち。
特にエラー行番号についての見解を期待。
0262nobodyさん
2008/10/13(月) 21:39:53ID:???>>エラーについて
君の出してるエラーは「Smartyエラー」じゃなくて「PHPのエラー」だねw
Smarty自体の処理ははあっておりコンパイルも通っている。
コンパイル後のPHP実行時に、ストリングに変換出来ないクラスをそのままassignして表示してるからPHPがエラー出してるんだろ。
Smarty以前の問題だ。素人レベルのミスだ。
行が違う!とか行ってるけど、
コンパイル後のクラスのライン5みりゃ1発で原因わかるよね。
PHP Catchable fatal error: Object of class MyClass could not be converted to string in /tmp/templates_c/%%C3^C35^C35E7879%%sample1.tpl.php on line 5
Smatyでのエラーは以下のように正しく表示される。
Fatal error: Smarty error: [in sample.tpl line 4]: syntax error: unrecognized tag 'test' (Smarty_Compiler.class.php, line 590) in /xxxx/Smarty.class.php on line 1092
0263nobodyさん
2008/10/13(月) 21:48:53ID:???ライブラリを組み合わせるのもSmarty使うのも同じだと思うが?PEARの優位性は何だろね。
関数はグローバル関数かい?w
>なんでPHPよりSmartyのほうが簡単で学習環境も整っているといえるんだよ。
逆もしかり。PHPの方が覚える事も少ないし、文法も完結だからだ。
何度も言うがショートタグが使えない現場は多い。
>おまえこそほんとに測定したのかよ。明らかにSmarty遅いじゃねーか。
したよ。他のエンジンと比べて大差ねーよ。
View処理が 5 : 10 だとしてもビジネス処理に 50 かかれば 55 : 60 程度の差って事だよ。
>エラーコード
上に書いた。PHPの変数の使い方から出直してこい。
>必要な機能はPHP自体がもっている。
PEARとか別のライブラリや、スコープ確保の為にクラス化、関数化は必要だよね?
そうされた一式がSmartyって事なんだが。
>拡張がし易い
プラグイン、フィルタ、リソース等、かなり楽に拡張できるが?
>PHPそれ自体はSmartyよりはるかにメジャー
何度も言わせるな。「PHP単体」じゃ無理だろ。同じ事実現する為のライブラリの学習コストを考えろ。
>フレームワーク
cake、Zend、CodeIgniter使ってる。全部ViewはSmarty拡張クラス組込済。
0264nobodyさん
2008/10/13(月) 22:13:18ID:???解ったから、具体的に選択肢を提示してくれよ。
ショートタグで値を表示するだけじゃ甲乙つけられないだろ?
ループ、エスケープ、インクルード、条件分岐が入ったViewテンプレートサンプルを上げてくれ。
それを見て「これならSmarty使う必要は無いな」と思わせてくれよ。
俺が出すサンプルは以下だ、
「ヘッダ、フッタを合成して配列の中身をテーブルに出力するだけの簡単な処理」
0265nobodyさん
2008/10/13(月) 22:16:06ID:???PHP + Smartyで記述
===================================================
{include file="header.tpl" title="ページタイトル"}
<table>
<tr>
{foreach from=$rows item=row}
{strip}
<td>{$row.time|date_format:"%T "|default:"00:00:00"}</td>
<td>{$row.name|escape}</td>
<td>{$row.value|escape|default:"DEFAULT"}</td>
{/strip}
{/foreach}
</tr>
</table>
{include file="footer.tpl"}
0266nobodyさん
2008/10/13(月) 22:16:56ID:???PHP単体で記述
===================================================
<?php
$title = "ページタイトル";
include_once "header.php";
?>
<table>
<tr>
<?php foreach((array) $rows as $row) { ?>
<?php ob_start();?>
<td><?php echo $row["time"] ? strftime("%T", $row["time"]) : "00:00:00"; ?></td>
<td><?php echo htmlspecialchars($row["name"]);?></td>
<td><?php echo ($row["value"]) ? htmlspecialchars($row["value"]) : "DEFAULT" ?></td>
<?php echo preg_replace("/[\r\n]/", ob_get_contents()); ?>
<?php ob_end_clean(); ?>
<?php } ?>
<tr>
</table>
<?php include_once "footer.php";?>
0267nobodyさん
2008/10/13(月) 22:17:35ID:???インクルードファイルの管理や、ローカルスコープ化処理、エラー処理、etc。
結局細かい処理を考えるとSmartyと同程度までの実装は欲しくなってくる。(文法はおいておいて)
そこをライブラリや関数で補うって事なんだろうけど、
実際にそうした場合のテンプレートコードを上げてみてくれ。
0268nobodyさん
2008/10/14(火) 01:17:27ID:???>君の出してるエラーは「Smartyエラー」じゃなくて「PHPのエラー」だねw
>Smarty自体の処理ははあっておりコンパイルも通っている。
あほかお前、なんでSmartyのエラーかPHPのエラーかをここで区別する必要があるんだ?
エラーといわれた場所の行番号が違っていることが問題なんだろうが。
Smartyのエラーなんて、ただの構文解析でのエラーしかでねーじゃんか。
実行時のエラーには無力なうえ、変な行番号ででるんじゃ、使い勝手悪すぎだろ。
PHPなら実行時のエラーも行番号がずれることはない。こんなのあたりまえ。
実行時エラーを変な行番号でしか報告できないSmartyを必死に擁護するほうがどうかしてる。
「Smartyエラー」ってなんだよ、構文解析でのエラーじゃないからSmartyのせいじゃありませんって、アホか。
エラーの種類に関係なく、行番号がずれるのが問題なのに、
構文レベルエラーと実行時エラーを区別する必要がどこにある。
0269nobodyさん
2008/10/14(火) 01:52:38ID:???デザイナとプログラマの分業がなされているとき
構文エラーはデザイナ責任、実行時エラーはプログラマ責任。
PHPエラーがでたらプログラマが対処すりゃいい。
そもそも、>246のエラーは文字列に変換できないクラスをassignしないもしくは、
assignしたものが直接扱えない変数であることをデザイナに伝えていれば起きない。
0270nobodyさん
2008/10/14(火) 02:36:44ID:???アホはお前だろw
実行時エラー制御したいなら、Smartyに限らずassign時点で型判別しろよ無能w
それこそSmartyとかPHP以前の話だよ。
>エラーの種類に関係なく、行番号がずれるのが問題なのに、
ずれてねーよw コンパイル後のソースでの行数で、ご丁寧にファイル名まで出てるじゃん。
スクリプト言語しか触った事無い素人には、実行時エラーのデバッグは難しいのかもしれんが、
普通のPGなら上のエラーコード読むだけで、エラー内容もエラー位置も特定出来るわ…
むしろ構文エラーじゃなくて、実行時エラーだって理解出来て問題識別しやすいわw
無能を晒してないで、
はやく>>265-266を君の考えた素敵で使い勝手の良いテンプレートに書き換えてくれよ。
はやく>>265-266を君の考えた素敵で使い勝手の良いテンプレートに書き換えてくれよ。
はやく>>265-266を君の考えた素敵で使い勝手の良いテンプレートに書き換えてくれよ。
0271nobodyさん
2008/10/14(火) 02:40:48ID:???0272nobodyさん
2008/10/14(火) 03:44:58ID:???よろしくお願いしまーす
<? // きょうつう(init.php)
define('DS', DIRECTORY_SEPARATOR);
define('TEMPLATE_DIR', 'tpl');
function include_template($name, $vars) {
// てきとうにかんすうをていぎします
function h($str){ return htmlspecialchars($str); }
function strip($str){ return preg_replace('/[\n\r]/', '', $str); }
extract($vars);
include TEMPLATE_DIR . DS . $name;
}
?>
0273nobodyさん
2008/10/14(火) 03:46:43ID:???require_once 'init.php';
$rows = array(
array('time'=>time(), 'name'=>'foo', 'value'=>1),
array('name'=>'bar')
);
include_template('tpl.php', compact('rows'));
?>
<? // てんぷれーと(tpl.php) ?>
<? $title = 'ページタイトル'; ?>
<? include 'header.php' ?>
<table>
<? foreach((array) $rows as $row): ?>
<? ob_start('strip') ?>
<tr>
<td><?=h ($row['time'] ? strftime('%T', $row['time']) : '00:00:00') ?></td>
<td><?=h ($row['name']) ?></td>
<td><?=h ($row['value'] ? $row['value'] : 'DEFAULT') ?></td>
<tr>
<? ob_get_flush() ?>
<? endforeach ?>
</table>
<? include 'footer.php' ?>
でもsmartyのメソッドチェインてきなやつはよいとおもいます
0274nobodyさん
2008/10/14(火) 04:01:40ID:???>エラーといわれた場所の行番号が違っていることが問題なんだろうが。
言いたいことはわかる。
でも、関数なんだから当然だろ。
引数が不適切なせいで、呼び出し先でエラーが出た場合を考えればわかりやすい。
0275196
2008/10/14(火) 09:31:04ID:???エラーを追いかけたかったら良いデバッグツールを使えばいいと思うぞ。
PHP標準でスタックトレースも変数の中身も出せるわけだし。
>>263
SimplateいいぞSimplate。暢気な人には魅力がかわらんかも知れんが。
俺が考える「Smartyをわざわざ導入する際のデメリット」が結構解消されてる。
まあ、「SmartyはPHPで書かれている」という大きいメリットは殺ぐのだけど。
>>265-266はMVCを理解してない人の例という意味では良いサンプルだな。
>>271-273ありがとう。俺もせっかくなので一つ案を出す。
0276nobodyさん
2008/10/14(火) 10:01:19ID:???>>275
Simplateいいよね。 客先都合で使えない事が多くて泣けるけど。
>>265-266はMVC的にはどう書くのが正解?
0277196
2008/10/14(火) 10:20:12ID:???議論としては蛇足になってしまうかも知れないんだけど、
俺が個人的に>>212より>>196が良いと思うと言った部分を紹介します。
特徴(一長一短?)は、テンプレートファイルの可読性が高く、隠蔽されていること。
利点はHTMLからの移植性と習得の容易さ。
欠点は配列操作のコストを二重にかけていること。
改行が多いと叱られたので再挑戦。
>>276
>>272-273のように書くのが正解だと思う。
少なくとも、MとVとCがそれぞれどのファイルかわかるでしょ。
0278196
2008/10/14(火) 10:21:06ID:???// function d($value, $default) { return isset($value) ? $value : $default; }
<?php // メソッドチェイン?をビューと切り離す(tpl.php)
$title = 'ページタイトル';
$disp_rows = array();
foreach((array) $rows as $row) {
$row['time'] = $row['time'] ? strftime('%T', $row['time']) : '00:00:00';
$row['value'] = $row['value'] ? $row['value'] : 'DEFAULT';
array_walk($row, 'h');
array_walk($row, 'strip');
$disp_rows[] = $row;
}
include 'header.php';
include 'body.php';
include 'footer.php';
<? // てんぷれーと(body.php) ?>
<h1><?=$title?></h1>
<table>
<? foreach($disp_rows as $row): ?>
<tr>
<td><?=$row['time']?></td>
<td><?=$row['name']?></td>
<td><?=$row['value']?></td>
</tr>
<? endforeach ?>
</table>
0279196
2008/10/14(火) 10:30:20ID:???厳密には、こう考えると良いかも。やっつけだけど。
<? // こんとろーら
require_once 'init.php';
require_once 'model.php';
include_template('tpl.php', compact('rows'));
<? // もでる(model.php)
$rows = array(
array('time'=>time(), 'name'=>'foo', 'value'=>1),
array('name'=>'bar')
);
ちなみに俺は>>278のような書き分けをする時は、
tpl.phpの処理は、コントローラに近い場所に書いているかも。
0280nobodyさん
2008/10/14(火) 11:24:56ID:???君、MVCを全く理解出来てないよ。
データの表示フォーマット等に関するビューロジックは、ビュー側で処理するべき。
コントローラは必要なデータをモデルからひっぱってデータに渡すだけで表示内容には関与しない。
君の書き方だと、各種表示フォーマットやデフォルト値が変更になった時にビューで処理出来ないでしょう?
0281nobodyさん
2008/10/14(火) 11:31:38ID:???MとCはコードに掲載していないだけでVとしては正しいと思います。
何が問題でしょうか?具体的に教えて下さい。
0282nobodyさん
2008/10/14(火) 11:37:48ID:???変更される度にtpl.phpに修正を入れるんだろうな
単純にテンプレートファイルとビュー用のデータ加工のphpを分けてるだけみたいだし
というか、やってる事はオレオレテンプレートエンジンな件について
要は生phpをテンプレートファイルにできればいいのかな?
0283nobodyさん
2008/10/14(火) 11:50:37ID:???ねw 多分中学生か高校生の熱血PG志望者だよきっと。
俺も若い頃は動作の重さに超敏感だったし、Smartyとか使う奴はアホかと思っていたw
0284nobodyさん
2008/10/14(火) 12:14:00ID:???俺にはこれがわからん。
パッケージインストールもしくはダウンロード→インクルードパス下に解凍したらすぐ使えるよ?
習得の手間は人それぞれだろうけどおそらく196や周辺のPHP知ってるデザイナーは苦労したんだろうな。
0285nobodyさん
2008/10/14(火) 12:15:43ID:???んーと
「V」にだけ着目するならどっちもただしい、
それこそ全部echo文でもただしいのではとおもいます!
>>272-273は「SmartyでできることはPHPでできる」、の一部のサンプルとして
1. 変数・関数のスコープの限定の実現
2. 生PHP?のテンプレートとしての(そこそこの)書きやすさの実現
(というかshort_open_tagの積極的な使用)
を主眼においてつくってみました。 >>266から>>273に代わって
何か問題が解決したとすれば、主にはView用変数・ユーザ定義関数がグローバルでなくなったこと
かなとおもいます(まちがってたらアドバイスください><)。
じぶんはというと今テンプレートに
Smartyを使いつづけるか(といってもまだ使って一ヶ月ですが!)
否かまよっているところなので先人さんのいろいろな意見を参考にしたいところで、
最近このスレをみつけてせっかく興味のある話題にめぐりあえたのに
煽り合いばかりでおもしろくないなーとおもっているところです。
0286nobodyさん
2008/10/14(火) 12:23:17ID:???0289nobodyさん
2008/10/14(火) 12:41:55ID:???>>265-266
「V」に着目するだけというかVのサンプルですが…。
MVC的に見ても、MもCも混在していないので間違いがわかりません。
どこに違和感を感じたのでしょうか?
仕組みを学ぶのは良い事だと思います。
しかし、もう少しSmartyを使い続けてみて下さい。
不満点も沢山見つかると思いますが、メリットも沢山見つかると思います。
「SmartyでできることはPHPでできる」はパッと見出来てるように見えてるだけで、
細かい実装(商業では必須ね)考えると、相当な開発負荷がかかります。
>short_open_tagの積極的な使用
現バージョンのPHPの推奨設定ではshort_open_tag=offなので注意して下さい。
PHP6以降では廃止される可能性もあります。
0290nobodyさん
2008/10/14(火) 12:42:58ID:???Smartyでできる事を手間をかけてPHPだけで書いてもメリットないだろう
処理速度に多少のアドバンテージがあるくらいで、それも汎用的に書いていけば怪しい
個人的にはSmartyを使うメリットで一番大きいのは、使ってる人が多い事だと思ってる
0291nobodyさん
2008/10/14(火) 12:46:30ID:???0292196
2008/10/14(火) 18:57:31ID:???「ファイルの末尾に ?> を書かない」と同じくらい、趣味の領域だと思う。
なので、xmlとか読み書きする人は気をつけてください。
>>280
そうだね。当然、MVCという区分上は、tpl.phpはビューに相当する。
「コントローラに近い場所に書いている」という実装が悪いのかな。
例えばsymfonyだったら、tpl.phpこそがhogeSuccess.phpであるべきで、
hogeSuccess.phpからhoge.htmlをincludeしたほうが妥当ってことだよね。
コントローラがinclude_templateを呼ぶのはイビツなんだな。なるほど納得。
それを踏まえて再度意見を戴きたいのだけど、
ビューが分かれててその一方がPHPだと、何かまずいだろうか?
モデルもコントローラも1ファイルじゃないといけないという理屈は無いよね。
>>282
そう。単純に「表示値の準備」と「表示処理」を分けているだけ。
> 要は生phpをテンプレートファイルにできればいいのかな?
ナマじゃなくてもいいんだけど、Smartyほど大げさなモノは、個人的には使わないかな。
テンプレートファイル部分は出来るだけ薄いほうが好き。
0293nobodyさん
2008/10/14(火) 20:46:31ID:???なんだ、ただのひねくれものか
お前、友達いないだろ?
お前、自分の事出来る職人だと思ってるだろ?
周りは確実に引いてるパターンが目に浮かぶ
もはやSmartyの話題でも無いので、MVCスレにでも行けや。
0294nobodyさん
2008/10/15(水) 00:24:43ID:???>>278のコードだけど、tpl.phpとbody.phpを合わせてSmartyで言うところのテンプレートだよね?
tpl.phpでデータを整形をして、body.phpは体裁のみを担当と…。
これは君の主張していた
・Smartyより学習コストが低い
・(デザイナが)Smartyで出来る事は実現出来る
には当てはまらないよね。
tpl.phpで扱える便利な関数群を提供してあげればいいんだろうけど、
それは>>290-291の言うとおり、結局は我流テンプレートエンジンを作る事態になってしまうよね。
であれば既に完成されたSmartyから乗り換える理由にはなり得ないと思うんだ。
もっとも君が我流テンプレートエンジンを完成させて、公開してくれれば別かもしれないが。
0295nobodyさん
2008/10/15(水) 00:45:46ID:???>ビューが分かれててその一方がPHPだと、何かまずいだろうか?
>モデルもコントローラも1ファイルじゃないといけないという理屈は無いよね。
ビューをファイル分割する事は、
メリットよりデメリットの方が多い気がするんだよね。
まず、ファイルが増えればバージョン管理やデプロイの手間が増える。
>>278の形式だとbodyの表示を修正したい場合、
読み込み元のtplを把握している必要があるし、
tplが読み込んでいるbodyが他に無いか等も把握していないといけない。
これは非常に面倒。
そんな理由で、どうしても整形処理を別ファイルにしたいのであれば、
tpl.phpからbody.phpを読むのではなく、
body.phpからtpl.phpを読むような形にするのが望ましいと思う。
<? // body.php ?>
<? include "tpl.php" ?>
<? $rows = $tpl->format($rows); // 整形 ?>
<? include "header.php" ?>
〜 表示処理 〜
<? include "footer.php" ?>
そうすると構文こそ違うものの、Smartyとやってる事はほとんど同じになる。
で、Smartyに相当するtpl.phpを作るのは誰がやるんだ…って話になる。
0296nobodyさん
2008/10/15(水) 01:03:17ID:???じぶんは>>264-267を見てつくってみたのですが
おっしゃってることがよくわかりませんでした。。
Smartyはまだ触ってみるつもりではいます!
>>290さんのおっしゃっるとおり使う人が多いのはよいとおもいますし
たしかカスタムタグみたいなこともカスタム関数でできるんですよね??
ただSmartyに不満を持つたびに、
PHPをちゃんとテンプレートとしてつかえたら、とおもいます。
PHPを使いはじめてから、short_open_tagとか制御構文の別構文(endif, ...)とか
テンプレートとしてのPHPはすごくいい感じだとおもったので
PHPがちゃんとテンプレートとして進化しなかったのがざんねんです。
テンプレートエンジン上にテンプレートエンジンをのっけるという感覚が
今割り切って理解できなくなっているのです。。
short_open_tagがXML処理命令の規則に合わないのはあきらめるしかないです。。
0297nobodyさん
2008/10/15(水) 02:00:05ID:???それならSmartyを良くするとかもっと良いテンプレートエンジンを作るとかしたほうが生産的だと思うのだが。
まあ、PHPを良くするというのもありか。
しかしテンプレートとプログラムを同居させるというのはどだい無理があると思う。
Smartyのプログラム的文法もかなり無理やりだしな。
0298nobodyさん
2008/10/15(水) 02:42:51ID:???PHPは正確にはテンプレートエンジンでは無いんですよ。
テンプレートエンジンのようにHTML内に組み込めるようになっているだけなんです。
>PHPをちゃんとテンプレートとしてつかえたら、とおもいます。
Smartyのテンプレートの中にPHPを直接書く事も出来ますよ。(非推奨ですが)
{php}echo "Hello World"{/php}
>たしかカスタムタグみたいなこともカスタム関数でできるんですよね?
PHPが解る人なら簡単に作れますよ。
(例) タグ内の文字列を置換するタグ{replace}{/replace}タグを作る場合
block.replace.php というファイルをpluginsディレクトリの中に作成し、次のコードを記述するだけです。
function smarty_block_replace($params, $content, &$smarty)
{
retrurn str_replace($p["search"], $p["replace"], $content);
}
以降Smartyテンプレートで次のように記述出来るようになります。
{replace search="本当ですか" replace="マジッスカ"}
{replace search="凄いですね" replace="パネェっす"}
本当ですか。
凄いですね。
{/replace}
{/replace}
// 出力:マジッスカ。パネェっす。
一見、PHP単体でも簡単に実装出来そうに見えますが、タグの入れ子処理等を考えると地味に面倒だったり、テンプレートの可読性が下がったりしますよね。
0299196
2008/10/15(水) 18:33:26ID:???tpl.phpが難しいから学習コストが高いということかな?
・PHPが理解出来ないレベルのへぼデザイナーはbody.phpだけ触らせるしかない
・Smartyで出来る事は理論上すべてPHPで出来る(し、その手段もそれなりに用意されている)
というのが俺の意見かな。
俺の環境はsymfonyで、sfFormか、helperか、sfSmartyViewPluginかの選択が必要なので、
既にSmartyで完成されたサイトとかを、わざわざリプレースする必要は無いと思う。
「SmartyはわかるけどPHPは触れません」というデザイナーって、結構多いのかな?
>>295
なるほど、俺にとっては斬新な発想だった。
ファイルの命名規則をしっかり決めれば、関連性はわかりやすいかと思ってたんだが。
tpl.phpは、デザイナーが作るのが理想だが、プログラマーがやっても構わない。
「$nameの表示はescapeしてnl2brしてください」という要件を把握出来るのが、
デザイナーなのかプログラマーなのかによって話が大きく変わるんだろうな。
0300196
2008/10/15(水) 19:01:26ID:???(是非はおいといて)>>278のような事をSmartyで実現したい。
MVCで言うと、new Smarty();が書かれるファイルは、
モデルでもコントローラでもなく、ビューに属する事になる。
sfSmartyViewとかZend_View_Smartyみたいな位置づけになるわけだな。なので、
コントローラ(ラッパーにテンプレート変数を渡す)
↓
ビュー用のラッパー。内部的に$snarty->assign();が書かれる
↓
★テンプレート変数の整形処理(Smartyの便利な構文で書ければ良い)
$name = {$name|escape|なんたら|かんたら}
↓
テンプレートファイル(.tpl)
{$name}
みたいな風にしたいのだが、それは仕様上無理なんだろうか。
{assign}とか{eval}でいける? コストはこの際考えないことにして・・・。
0301nobodyさん
2008/10/15(水) 19:38:33ID:???>tpl.phpが難しいから学習コストが高いということかな?
少なくともSmartyと比較したら数倍難しいし、
素人のロジックがシステムに混入する恐れがある。
define("DEBUG", 1); とか $_POST["xxx"] = "debug data!"; とか書かれてたら寒気しない?
>Smartyで出来る事は理論上すべてPHPで出来る
これは逆じゃないかな。
「symfonyで出来る事は全てPHPで出来る」と言ってるのと同じで、
Smartyは所詮PHPライブラリに過ぎないんだから。
> PHPが理解出来ないレベルのへぼデザイナーはbody.phpだけ触らせるしかない
>「SmartyはわかるけどPHPは触れません」というデザイナーって、結構多いのかな?
仮にPHPが触れるデザイナがいたとしても、
上に書いたようにセキュリティの観点からは、システムに影響を与える権限を与えないのが普通だと思う。
少なくとも外注のデザイナには絶対に触らせたくないよね。
>tpl.phpは、デザイナーが作るのが理想だが、プログラマーがやっても構わない。
tpl.phpはビューである以上、デザイナが触るべきだと思う。
ロジック的にMVCを分けても、管理体制(担当区分)がわかれていないとエラーが出た時に面倒だから。
そういう意味ではSmartyはその機能性より、
コードの統一性や管理体制に与える恩恵の方が大きいのかもね。
0302nobodyさん
2008/10/15(水) 20:31:43ID:???>(是非はおいといて)>>278のような事をSmartyで実現したい。
{assign}{capture}{eval}あたりで出来るよ。
コンパイル後のソース見ればわかるけど、assignなんかはコストもほとんど変わらない。
// format.tpl
{assign var="name" value=$name|escape|default:"no name"}
{include file="body.tpl"}
// body.tpl
{$name}
>MVCで言うと、new Smarty();が書かれるファイルは、
>モデルでもコントローラでもなく、ビューに属する事になる。
自分はSmarty自体をビューとして考えているかな。
コントローラがビュー(Smarty)を生成し、レスポンスデータを渡す。
ビュー(Smarty)は与えられたレスポンスデータを元に画面を表示する。
↓こんな感じ。
class Controller {
public function action() {
// 実際にはSmarty継承クラスor内包クラスになる
$view = new Smarty();
// 必要な処理をしてビューにレスポンスデータを渡す
$view->setResponse(new Respose(xxxx));
// 整形や表示処理は全てビューにまかせる。
$view->render();
}
}
0303nobodyさん
2008/10/15(水) 20:34:36ID:???jspが書けないデザイナもヘボなんだよね?
MovableTypeのテンプレートタグも知らなきゃヘボなのかもしれない
うーん、大変だな
0304nobodyさん
2008/10/16(木) 02:49:37ID:???> PHPは正確にはテンプレートエンジンでは無いんですよ。
そうなんですか??
> Smartyのテンプレートの中にPHPを直接書く事も出来ますよ。(非推奨ですが)
んんーSmarty内でPHPコードを書くのは本末転倒というか本末転倒ですよね。。
あとカスタムタグ?のサンプルありがとうございます!
ttp://smarty.incutio.com/?page=foreachgroupというのがおもしろそうでした!
0306nobodyさん
2008/10/16(木) 08:06:34ID:???CSS、HTML、JSあたりを完璧に書けない奴はヘボプログラマなんかねw
個人的にはデザイナはPHPとか勉強するヒマあったら、
システムに組み込みやすいスマートなHTMLコーディング技術を学んで欲しいわ。
0308nobodyさん
2008/10/16(木) 19:53:26ID:???0309196
2008/10/19(日) 11:55:40ID:???>>301
{php}{/php}でも同様の問題は発生すると思うので、その辺は気にしても仕方ないと思っている。
デザイナーにSSHを使わせないとか、PHPが絶対に動かない環境しか与えないとか、
へぼい人を縛る方向で考えるよりは、へぼくない人と仕事するほうが良いと思ってしまう。
>>302
やっぱり、そうなってしまうよなあ。
上で「それはMVCではない」と言われてから、内心悩んでたんだけど。
Smartyの解説ありがとう。その線で学習コストが等価になれるか検討してみる。
>>303
JavaとかMT(使ってる人いるのか?)のプロジェクトなら、そうだろうね。
>>306
HTML書けません、というプログラマーとは間違っても一緒に仕事しないよ。
というより、Smarty文法がわからないデザイナーと一緒に仕事しないでしょ?
同じことでないの?
0310nobodyさん
2008/10/19(日) 15:09:25ID:???>{php}{/php}でも同様の問題は発生すると思うので、その辺は気にしても仕方ないと思っている。
{php}{/php}タグは禁止に出来ます。
>デザイナーにSSHを使わせないとか、PHPが絶対に動かない環境しか与えないとか、
>へぼい人を縛る方向で考えるよりは、へぼくない人と仕事するほうが良いと思ってしまう。
逆になんで必要の無い権限を与えるの?それによるデメリットは考慮しないの?
まっとうなセキュリティの考え方だったら「必要な権限以外は与えない」のが常識だと思うんだけどね。
最低限の権限で不便させない環境を提供出来ないシステム屋こそへぼい人だと思う。
参考までにいくつか質問させておくれ
・プロジェクトの人数とか連携手法やらバージョン管理方法は?
・テンプレートPHPでエラーが出たら誰の責任になるの?
・テンプレートに使ってるPHP系のライブラリとかは?
0311196
2008/10/19(日) 15:56:49ID:???デザイナーに権限を与えたくないなら、HTMLだけを納品させて、
コードレビューとサーバへの設置はプログラマーがやればいいじゃん。
デザイナーにサーバへの書き込み権限を与えた時点で、
(仮にあらゆるコマンドの実行をサーバ上で絶対に行えなくしたとしても)
デザイナーはシステムの正常動作責任を一部負う事になるのは間違いない。
たとえば、必要なパラメタを渡さなかったとか、ファイルを消しちゃったとか。
だから、あらゆる操作をサーバ上で絶対に行えなくすることのメリットは、
デザイナーがサーバを壊さないようにする、という程度に過ぎないので、
それなら優秀で信頼のおけるデザイナーと仕事したほうがいいんじゃないの? と思う。
質問の答えだけど、製品が完成しなかったらチーム全体の責任。
デザイナー主導の案件でもプログラマー主導の案件でも、
インタフェース定義の必要性は発生し、それは両者(主に主導側)の責任になる。
Smarty単体ではシステムの仕様テストは行えないので、
「言われたとおりのSmartyテンプレートだけ書くからあとは知らないよ」というデザイナーは、
HTMLだけしか書かないデザイナーと大して変わらない。
なので俺はそういうデザイナーとは仕事してないし、
もしデザインを外注する事があっても、Smartyの学習を促す事は無いと思う。
あえて擁するなら、へぼプログラマーと連携する時には、Smartyは役に立ったな。
あれを安直に使えば、嫌でもビューとロジックが分離出来るから。
でも今はフレームワークを使うのが普通なので、そのメリットは感じられなくなった。
0312196
2008/10/19(日) 16:30:50ID:???・顧客がWebデザインを自分で更新したいと要望している
実力はへぼかも知れないが、お客様なので無碍にも出来ない
・プログラム開発も初期デザインも業者が行い納品する
・サーバは業者が貸与するので、壊されないように配慮しなければいけない
・ssh権限は与えず、ftpsでテンプレートファイルだけ更新できるようになっている
・プログラムの動作責任は業者が負わないといけない
・テンプレート更新内容のチェックに業者の人的コストは割けないので、
更新はノーチェックで行い、システムが正常動作しなくなった責任は顧客に負わせなければいけない
・テンプレートにはプログラムから変数を埋め込まなければいけない
・顧客はSmartyの心得と導入への理解がある
・Smartyのうち危険なタグをすべて洗い出し、設定で使用を禁止している
・テンプレートでエラーが出てもセキュリティ的に不適切な出力は行われないよう設定されている
それでも
・パラメタエラー
・クロスサイトスクリプティング
の問題は残り、特に後者はインタフェース側で検出する事が出来ない。
お客様が |escape を書き忘れただけで。
なので>>302の仕組みがあれば、完全に縛ることが可能だろうか、と思った。
でも、ここまで極端な事例でもない限り、デキル人を探した方が早いなぁ。
顧客には任意の静的HTMLを特定箇所にinclude出来る仕組みのみを提供するとか。
Smartyを縛るより、俺俺テンプレートエンジンのほうが早いじゃん、とか。
0313nobodyさん
2008/10/19(日) 17:55:19ID:???結局君がSmarty使いこなせてないだけじゃんww
100%の対策なんて無いんだから、対策しないって言ってるだけって事に気付けww
>デザイナーに権限を与えたくないなら、HTMLだけを納品させて、
>コードレビューとサーバへの設置はプログラマーがやればいいじゃん
デザイン修正の度にやるんすか。
>デザイナーにサーバへの書き込み権限を与えた時点で
当然、テンプレートディレクトリとシステムディレクトリで権限分けてるし。
ファイルに関しても基本的にはSVN経由で、本番には手動デプロイですよ。
消される恐れがあるとわかってて何故権限を与える?w
>Smarty単体ではシステムの仕様テストは行えないので、
わぁ、きっと君のところはMVC分けが出来てないんですね><
フレームワーク使えば大丈夫とか思ってるんですね><
0314nobodyさん
2008/10/19(日) 18:12:47ID:???>・クロスサイトスクリプティング
>の問題は残り、特に後者はインタフェース側で検出する事が出来ない。
>>>302の仕組みがあれば、完全に縛ることが可能だろうか、と思った。
default_modifiersやフィルタって知ってます?
>Smartyを縛るより、俺俺テンプレートエンジンのほうが早いじゃん、とか。
もうSmarty叩きはいいからさ
その安全で扱いやすい俺俺テンプレートエンジンを見せてよ。
君の主張は前提と具体性がないから水掛け論だよ…。
まさか専門学校生じゃないとは思うけど質問に具体的、箇条書きで答えてくれよ。
・プロジェクトの人数は?
・連携手法は?
・バージョン管理方法は?
・デプロイ方法は?
・使用しているPHPライブラリは?
・使用しているフレームワークは?
・使用している俺俺テンプレートエンジンは?
0315nobodyさん
2008/10/20(月) 12:22:54ID:???どうしてココは『隔離スレ』なの?
0316nobodyさん
2008/10/20(月) 12:27:38ID:???0317196
2008/10/20(月) 18:54:05ID:???煽っているように見えて>>311と同じ事を言っているように見える。
なので異論は無い。むしろ、まったくその通りだと思う。
>>314
default_modifiersは初めて知った。
nodefaultsと組み合わせれば、symfonyのescaping strategyに近い所まではいけるな。
escapeはプログラマーの責任でもなくデザイナーの責任でもなく、
フレームワークが基本的に便宜を図る、という解釈をすれば、悪くない思想だと思う。
後半については答えても意味が無いと思うし、
別にSmartyを否定する事が主目的で発言している訳ではないと言っている。
世の中にはSmartyを使うのに明らかに向かない案件もあるし、
そんなシチュエーションをわざわざ取り上げてSmartyを否定しても仕方が無いだろ。
逆に「Smartyを使うならこんな規模や状況やツールに最適だよ」という意見があれば、
それは主張してくれればいいと思う。
0318nobodyさん
2008/10/20(月) 19:11:06ID:???default_modifiersは問題がある(ソースに手を入れれば回避可能だが)から使わないって話なら聞くが
Smartyを3年使ってて知らないってどんだけ・・・
そもそもなんでこのスレにいるん?
0319nobodyさん
2008/10/21(火) 01:33:33ID:???>世の中にはSmartyを使うのに明らかに向かない案件もあるし、
>そんなシチュエーションをわざわざ取り上げてSmartyを否定しても仕方が無いだろ。
本当にそう思ってるなら196から出てくる発言はありえないと思うんだよね。
シチュエーションも取り上げずに、否定だけされても納得は出来ないじゃない?
「俺ならこうする」って意見も無しにダメだしされてもなぁ…default_modifiersすら知らないみたいだし、
単にSmartyの事知らないだけですよね?
議論では無く、相手を論破する事が目的になってませんか?
なんでこのスレにいるん?
0320nobodyさん
2008/10/22(水) 10:19:46ID:???相反する事言っているのに、なんで>>313に対しては異論唱えないんだ。
0321196
2008/10/22(水) 11:20:52ID:???>>318
そうだっけか。じゃあ使い物にならないから忘れたのかな。
いずれにせよSmarty使ってた頃は、そこまでいじる気自体が無かったな。
>>319
俺ならこうする、という意見も、具体的なコードも書いたし、
Smartyを否定する事が主目的でも無いし、Smartyのわからないところは質問した。
発言する前にきちんと流れを読んでくれ。
直近の議論は294,299,301,309,310,311だ。
>>320
> 当然、テンプレートディレクトリとシステムディレクトリで権限分けてるし。
> ファイルに関しても基本的にはSVN経由で、本番には手動デプロイですよ。
> 消される恐れがあるとわかってて何故権限を与える?w
という意向と>>311との違いは状況判断の部分だけ。
俺は手動デプロイなんていちいちしたくないので、
信頼のおける優秀なデザイナーと仕事をする。
だけど、信頼のおけないデザイナーと仕事せざるを得ないなら、
>>313の言うようにするのもわかる。
前提とか本人の置かれている状況が違うだけなので、特に反論は無い。
それとも、
「デザイナーには完全な制限と束縛を課して徹底的に管理しろ」
というのが一番言いたいことなのかな?
Smartyを使ってデザイナーを檻の中に隔離するんだ、みたいな思想なのかな。
0322196
2008/10/22(水) 12:12:03ID:???お言葉に甘えさせて戴き、整理させていただく。
俺が思う結論
・Smarty文法 {$name} のPHP文法 <?=$name?> に対する優位性
→メソッドチェインはSmarty文法が少し短いが、習得コストに大差は無さそう。
→short_open_tagを使いたくない/使えない場合はPHP文法が長くなるが同上。
・Smarty関数 {hoge} のPHP関数 hoge() に対する優位性
→車輪の再発明をする必要が無いのが利点。
→なので別のライブラリやヘルパーなどでも良い。
・Smartyのdefault_modifiersを使いビューのHTMLを安全にすること。
→設計と実装は不完全だが、フレームワークに任せるという考え自体は良いかも。
・ビュー用の変数構築とビューのHTMLファイルを分ける意義
→Smartyで実現するには{assign}{capture}{eval}を使えば可能。
→デザイナーに変数構築をやらせる前提では二度手間に感じる。
→プログラマーが変数構築を担当可能な所には意義があると思うし、
default_modifiersの不具合をフォローすることも出来そう。
・Smartyはデザイナーがシステムを壊さないよう完全に束縛できるか
→100%束縛したり管理するのは不可能そう。
→PHPコード実行の抑止の為にテンプレートエンジンを使うのは一応有効。
何か主張されたのかも知れないと思っていること
・Smartyや他の手段を駆使してデザイナーをシステムから隔離する事自体の意義
権限とリポジトリの管理と手動デプロイを常に徹底すれ
→俺は優秀なデザイナーを使うかHTMLで納品させるというアプローチ。
手動管理はめんどくさいし、たとえ客でも保守費用払わなかったらやりたくない。
0323nobodyさん
2008/10/22(水) 13:25:17ID:???「…で?」としか言えないわ。
0324nobodyさん
2008/10/22(水) 13:32:44ID:???結局使いこなせてないだけに一票。
「俺の環境ではSmartyが馴染まない」とか、凄くどーでもいい事なんで
こんな所でファビョってないで自作エンジンの制作作業に戻るんだ。
ここは君みたいな優秀なプログラマやデザイナが来ちゃいけない場所なんだ。
な。
0326nobodyさん
2008/10/22(水) 20:54:01ID:???使いこなせればどんな環境でも馴染ませられるよ。
出来ないのはヘボプログラマくらいだろうね。
君は何がしたいんだい?
Smartyを使う気がないなら、こんなスレにいる必要無いんじゃないのかな?
0327質問です
2008/11/02(日) 19:17:14ID:???for(i=0;i<6;i++){
echo "$_POST[$i]";
}
みたいなことをsmartyでやる場合、
{section name=i loop=5}
{$smarty.post.i}
{/section}
だと受けとれません。
$_POST[i] としてもだめなようで、
ループしてる回数を、POSTで受けとった配列のキーに割り当てるには
どう書けばいいんでしょうか?
0328nobodyさん
2008/11/02(日) 19:19:30ID:JfJ9McaH0329nobodyさん
2008/11/02(日) 20:49:20ID:???0330nobodyさん
2008/11/02(日) 21:45:09ID:???その前にpostはassignされてるのか気になるのだが・・・
0331327
2008/11/03(月) 23:53:06ID:CUNAecRE330さんの言うとおり、section.{sectionname}.index で
ループしてる回数を受けとれるのはわかるんですが、
その現在の回数をPOSTで受けとった配列のキーにするにはどのように書けばいいんでしょうか?
単なる配列をまわすときには、
{section name=i loop=$arr}
{$arr[i]}
{/section}
でいけると思うんですが、それがPOSTの配列の場合は一回assignしないといけないんでしょうか?
$smarty.post.キー で受けとれると思い込んでいたんですが。
0332nobodyさん
2008/11/03(月) 23:56:08ID:???0333nobodyさん
2008/11/14(金) 17:52:36ID:nqLSKBoWphp -r 'require "Smarty/Smarty.class.php";'
PHP: Error parsing /etc/php.ini on line 511
PHP Warning: require(Smarty/Smarty.class.php): failed to open stream: No such file or directory in Command line code on line 1
PHP Fatal error: require(): Failed opening required 'Smarty/Smarty.class.php' (include_path='.:/usr/share/pear') in Command line code on line 1
というエラーがでます。
パスは
UNIX: "/path1:/path2"
include_path = ".:/php/includes.:/usr/lib/php/Smarty-2.6.20/libs/"
こうしているのですが、
0334333の続きです。
2008/11/14(金) 17:53:36ID:nqLSKBoWchown 770 /var/www/html/smarty/templates_c/
chown nobody:nobody /var/www/html/smarty/cache/
chown 770 /var/www/html/smarty/cache/
<?php
require_once(SMARTY_DIR . 'Smarty.class.php');
$smarty = new Smarty();
$smarty->template_dir = '/var/www/html/smarty/templates/';
$smarty->compile_dir = '/var/www/html/smarty/templates_c/';
$smarty->config_dir = '/var/www/html/smarty/configs/';
$smarty->cache_dir = '/var/www/html/smarty/cache/';
$smarty->assign('name','Ned');
//$smarty->debugging = true;
$smarty->display('index.tpl');
?>
と持っていったのですが、どうしてエラーがでるのかわかりません。
教えてください
0335333の続きです。
2008/11/14(金) 19:12:47ID:nqLSKBoWPHP Warning: require(Smarty/Smarty.class.php): failed to open stream: No such file or directory in Command line code on line 1
PHP Fatal error: require(): Failed opening required 'Smarty/Smarty.class.php' (include_path='.:/php/includes:/usr/lib/php/Smarty-2.6.20/libs') in Command line code on line 1
もう一度インストールからはじめたのですが、だめでした。
お願いします。
教えてください
0336nobodyさん
2008/11/14(金) 19:56:05ID:???/usr/lib/php/Smarty-2.6.20/libs/Smarty/Smarty.class.php
の場所にこのファイルはあるのか?
0337333の続きです。
2008/11/14(金) 19:56:14ID:nqLSKBoW疲れました
0338nobodyさん
2008/11/15(土) 22:34:31ID:???それが完成したアカツキには、レンタルサーバーにも
smartyをアップロードしないと動かないの??
0339nobodyさん
2008/11/15(土) 22:40:28ID:???されてなきゃ自前でアップロードしろ
0340nobodyさん
2008/11/16(日) 14:34:54ID:VgwBTNK+一体何をincludeするつもりなのか
0341nobodyさん
2008/11/17(月) 21:26:39ID:WEpi9J1Iそんで、そのカスタムタグつくったから適当に使ってよ、とクライアントに投げるの。
好き嫌いは有るけど、生phpより見やすいわけね。
OK?
0343nobodyさん
2008/11/18(火) 06:18:46ID:???テンプレートエンジンの理想型だよな。
PGにもデザイナにも優しい。
Smarty3で速度面が大幅改善されるっぽいので期待している。
0345nobodyさん
2008/11/19(水) 04:25:55ID:???0346nobodyさん
2008/11/20(木) 11:05:10ID:WBdj1Bs+このような場合、みなさんどうしてます?
テンプレート側でphpファイルを読み込んで出力させることは可能なのでしょうか?
0348nobodyさん
2008/12/03(水) 23:41:44ID:???0350nobodyさん
2008/12/05(金) 11:52:26ID:jMVHCYUrtemplate は複数(サブディレクトリに1つずつ置く)、template_c は 非公開部分に1つ、ってやりたいんですが。
0351nobodyさん
2008/12/05(金) 13:30:34ID:???0352350
2008/12/05(金) 14:12:47ID:jMVHCYUrおとなしく対応させて作ります。
ありがとうございました。
0353nobodyさん
2008/12/05(金) 20:37:51ID:???コンパイルID指定すればOK
http://www.smarty.net/manual/ja/api.fetch.php
0354nobodyさん
2008/12/06(土) 01:16:24ID:???メリットがまったく思いつかないけど覚えておきます
0355nobodyさん
2008/12/06(土) 01:36:14ID:???0356nobodyさん
2008/12/07(日) 09:29:45ID:???sfCutString:5とかにすると5文字表示とかってあるよね?
これって反対に、後ろからの5文字を削除とかって出来ないの?
教えてくださいな(´・ω・`)
0357nobodyさん
2008/12/08(月) 09:59:13ID:???0358nobodyさん
2008/12/08(月) 16:34:14ID:???0359nobodyさん
2008/12/08(月) 23:18:30ID:???0360nobodyさん
2008/12/09(火) 12:27:40ID:???0361nobodyさん
2008/12/22(月) 09:45:58ID:???smarty使いの方、smartyがなかったら、どのテンプレートエンジンを選択しますか?
人それぞれ状況は違うと思うんで、pureにみなさんそれぞれの場合は?
0362nobodyさん
2008/12/22(月) 13:12:51ID:???0363nobodyさん
2008/12/22(月) 13:56:20ID:fwOoSy8e多分テンプレート変数を置換する以上のことはできないだろうけど
0364nobodyさん
2008/12/31(水) 21:47:49ID:8KFb7g3b動作させてる環境は2つあり、動かないのはそのうち一つだけです。
Smarty.class.phpへのパスは相対できちんと通していて、同じファイルを
その2つにUploadすると片方でのみ動いてくれません
もちろんそちらでもphpは動いてるんですが、、
原因を探る方法はないでしょうか?
phpが動くサーバなら動くはずなんですよね?
文字コードとかは関係あるでしょうか?
現状では
$smarty->assign('testvar','テスト');
echo "ここまでOK1";
$smarty->display('sample.tpl');
echo "ここまでOK2";
とすると、 「ここまでOK1」だけ出力します「2」はしません
また、せめてassignがちゃんと成立してるかだけでも知りたいですがどうしたら
いいでしょうか? ご意見よろしく御願いします
0366nobodyさん
2008/12/31(水) 23:02:30ID:???911では小型の水爆が使用されている。
http://ri■ch■ardkosh■im■izu.at.webry.info/
創価の保険金殺人事件。
オウム事件は、統一・創価.北朝鮮の共同犯行である。CIAが監修している。
http://www15.ocn.ne.jp/~oy■ako■don/kok_web■site/ir■iguc■hi.htm
与党も野党もメディアも全部朝鮮人だった。
http://jb■bs.li■vedo■or.jp/b■bs/read.cgi/news/20■92/115794■1306/
2ちゃんねるは統一■教会が個人情報を集めるための道具。運営には統一■教会がいる。
駅前で「手相を見せてください」と勧誘してるのが統一教■会。(カルト宗教)
カルト宗教の下にいる人と上にいる奴を分けて考えないといけない。下にいる利用される人は上がどんなことをしてるか知らない。
ユダヤ権力の子分→2ちゃん運営=統一協会上層部=層化上層部=自民党清和会=野党の朝鮮人ハーフの政治家=
与党の朝鮮人ハーフの政治家=金 正日(キム・ジョンイル )=読売サンケイ=小沢十朗
ユダヤ人=ロックフェラー=ブッシュ=クリントン=ヒラリー=アドルフ・ヒトラー=オサマ・ビンラディン
毎日新聞スレを荒らしてる奴らも統■一教会の可能性が高い。
荒らしは洗脳するために「ネトウヨ」などのレッテル付けレスを何千回もする。
現実には「ネトウヨ」などは存在しない。
http://changi.2ch.net/test/read.cgi/ms/1230363385/
0368nobodyさん
2009/01/02(金) 21:57:29ID:PIvYRgwW$monthAry[] = "1月"; から $monthAry[] = "12月"まで配列にして
$smarty->assign('monthAry',$monthAry); としました。
formを出力するテンプレートファイルでは以下のようにして、プルダウンのoptionに出力しています。
{foreach from=$monthAry item=var}
<option value="{$var}">{$var}</option>
{/foreach}
この書式で、確認画面からの戻り値{$month}(assign値です)とoption要素のvalueが等しければselectedと
するために以下のようにしたんですが、あまりきれいなソースじゃないと思います
{foreach from=$monthAry item=var}
<option value="{$var}"
{if $var==$month}
selected="selected"
{/if}
>{$var}</option>
{/foreach}
一応ちゃんと動いてますが、もっときれいで効率的な書き方はないでしょうか?
0369nobodyさん
2009/01/02(金) 22:04:07ID:???http://www.smarty.net/manual/ja/language.function.html.select.date.php
0372nobodyさん
2009/01/04(日) 08:20:15ID:S9BZj0MW{$name|escape} とすれば上記のとおり見れますよね。
これを、修正画面に持ち越したいときはどうしたらいいんでしょうか?
<input type="hidden" name="name" value="{$name}" /> だと確認画面で表示がおかしくなるし
<input type="hidden" name="name" value="{$name|escape}" /> だと修正画面の
inputの表示がおかしくなるし、、
ご意見よろしく御願いします
0373nobodyさん
2009/01/04(日) 08:53:47ID:???0375モンピー77
2009/01/05(月) 09:16:41ID:mGW0zuF3しているのですが
$o_smarty->default_modifiers = array( 'escape:"html"' );
配列にも適用させること可能なのでしょうか?
みなさん、Smartyを使った場合のサニタイズはどんな風にされていますか?
0376nobodyさん
2009/01/05(月) 11:59:56ID:???default_modifires はクセがあるから気をつけたほうがよいよ。
{foreach}とか{assign}で変数弄ると二重にエスケープされちゃったり、配列入れるとエラー吐いたりする。
>Smartyを使った場合のサニタイズはどんな風にされていますか?
基本的には必要な箇所全てにescapeを書いてる。
上記踏まえて、面倒な事にならない場合だけ default_modifires 使ってる。
0377nobodyさん
2009/01/07(水) 10:21:31ID:nbhiW1pdそもそもPHP側ですませておく。
なんのために分離してるのかと
0378nobodyさん
2009/01/07(水) 11:39:38ID:???0379nobodyさん
2009/01/07(水) 12:32:40ID:???0381nobodyさん
2009/01/08(木) 13:16:48ID:???0382nobodyさん
2009/01/08(木) 14:37:59ID:/Ay52XkKお前が暇人なだけだろw
0386nobodyさん
2009/01/09(金) 13:26:05ID:dxaSQaiQ必死厨必死だな。
「みなさん、Smartyを使った場合のサニタイズはどんな風にされていますか?」
この意味わかるか?
0387nobodyさん
2009/01/09(金) 14:19:53ID:???0388nobodyさん
2009/01/10(土) 01:02:19ID:???スマン。日本語でお願い出来るか?
どういう意味で解釈したら
「そもそもPHP側ですませておく。なんのために分離してるのかと」
となるんだい?
0389nobodyさん
2009/01/15(木) 22:45:35ID:iReMhog8assignもdisplayも動かないというか、それ以前に
templatesディレクトリの指定とかがうまくいってるのかがわからないです
そういう設定が今どうなっているのか、確認する方法はないでしょうか?
ちなみに今のsmarty.class.phpへの接続は以下のような形です
<?php
//テスト
require_once('Smarty.class.php');//これでSmarty.class.phpに繋がってることは確認済みです
class MySmarty extends Smarty{
function MySmarty(){
$this->Smarty();
$mydir = dirname(__FILE__);
$this->template_dir = $mydir."/templates/";
$this->compile_dir = $mydir."/templates_c/";
$this->config_dir = $mydir."/configs/";
$this->cache_dir = $mydir."/cache/";
$this->caching = 0;
}
}
?>
これを、各phpからrequireさせています
0390389
2009/01/15(木) 23:24:27ID:iReMhog8require_once('MySmarty.class.php');
//Smartyクラスのインスタンス作成
$smarty = new MySmarty();
echo "テンプレートディレクトリ:".$smarty->template_dir;
としたら、正しいパスを読み込みました
これはSmarty.class.phpも読み込み成功してるってことですよね?
どうしてdisplayしないんだろう。。
どなたかご意見ください
一つのディレクトリに複数の/smartyディレクトリが存在しちゃいけないとかの
理由はないですよね?
0391nobodyさん
2009/01/15(木) 23:29:20ID:iReMhog8×正しいパスを読み込みました
○正しいパスを出力しました
×一つのディレクトリに複数の…
○一つのサイトに複数の…
また、require_once()してるのが389のプログラムのファイルです(MySmarty.class.php)
0392nobodyさん
2009/01/15(木) 23:35:13ID:???0393nobodyさん
2009/01/16(金) 00:01:11ID:7rtqusgxどうもです
パーミッションて奴ですよね? 700とか750で設定して試したんですがダメでした
そのものずばりで、displayに失敗してる、assignに失敗してる とはっきりわかる方法ないかなぁ
0394389
2009/01/16(金) 02:58:12ID:???<style type="text/css">
<![CDATA[
a:link{color:blue;}
a:focus{color:red}
a:visited{color:purple;}
]]>
</style>
という部分があったためでした。これを削除すると正常にdisplayされました。
念のため、この.tplのソースをコピペしてtest.htmlをつくり、それを直接開くと
どのブラウザでも確認できました
どうやら、Smartyと上の記述の組み合わせでのみエラーになるようです(理由はわからない)
このページは携帯用で、
<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja">
って感じにXML宣言のあるxhtmlだったんですが、この中では<!-- -->は使えないって言うので
上記の形(<![CDATA[ ]]>)にしたところエラーになりました
1)XML宣言
2)携帯用サイト(外部CSS使えない→1)のせいでコメントは<![CDATA[ ]]>にならざるを得ない)
3)Smarty
という組み合わせは実用不可能というお話でした
0395nobodyさん
2009/01/16(金) 06:34:07ID:???ttp://www.phppro.jp/phpmanual/smarty/language.function.literal.html
0396nobodyさん
2009/01/16(金) 14:02:35ID:???0397nobodyさん
2009/01/16(金) 23:45:16ID:???Smarty解釈をしないプレーンな{include}があってもいいんじゃないかという気がしてきたがあったっけ。
0398nobodyさん
2009/01/19(月) 11:16:42ID:RBlPIEnmみんクエのようなRPGタイプのブラウザゲームを制作予定です。
常に値が変動して最新の情報を表示しないといけないケースで、
Smartyを使用するのはナンセンスでしょうか?
0399nobodyさん
2009/01/19(月) 11:19:59ID:???0400nobodyさん
2009/01/19(月) 15:19:03ID:???重要なのはメンテナンス性だな、かえってテンプレ化しづらい場合もあるし・・・
0401nobodyさん
2009/01/20(火) 18:40:01ID:???$foo['bar.baz']='hoge';
のような変数をSmarty側にassignした場合、
テンプレ側ではどういう表現をすればアクセスできるの?
{$foo[bar.baz]}
はだめだったんだけど、何か他の表現方法あるのかな?
0402nobodyさん
2009/01/20(火) 20:16:27ID:???0403nobodyさん
2009/02/03(火) 21:30:12ID:???Warning: preg_match() [function.preg-match]: Compilation failed: repeated subpattern is too long at offset 18454 in /usr/share/pear/Smarty/libs/Smarty_Compiler.class.php on line 454
Fatal error: Smarty error: [in main.tpl line 1]: syntax error: unrecognized tag: include file="header.tpl" (Smarty_Compiler.class.php, line 455) in /usr/share/pear/Smarty/libs/Smarty.class.php on line 1092
こんなエラーが出てしまうんですけども、原因を教えていただけないでしょうか。
ちなみにmain.tplの中身はこんなのです。
{{include file="header.tpl"}}
{{foreach from=$include_files item=file}}
{{include file="$file"}}
{{/foreach}}
{{include file="footer.tpl"}}
0404nobodyさん
2009/02/03(火) 21:32:58ID:???0405nobodyさん
2009/02/03(火) 21:41:22ID:???Smarty.class.phpを継承したクラスも使ってるので、本家との差別化のためです。
継承したほうは
$this->left_delimiter = '{{';
$this->right_delimiter = '}}';
を設定してあるので大丈夫だと思うんですけども。
ちなみに括弧ひとつにしても同じエラー出ます。
0406403
2009/02/03(火) 21:51:04ID:???CentOS 5.2 Kernel 2.6x
PHP 5.1.6
preg_matchでSmartyのタグ探して処理させてるから
タグ探しに失敗したSmartyがそんな命令ねーよって怒ってるんですかね。
0407nobodyさん
2009/02/03(火) 21:53:11ID:???0408403
2009/02/03(火) 22:23:57ID:???require_once('MySmarty.class.php'); //適当に書き換えてください
$mysmarty =& new MySmarty(); //適当に書き換えてください
$a = 'test';
$mysmarty->assign('test', $test);
$mysmarty->display('test.tpl');
?>
-----------------------------------------
{{$test}}
###こんな単純なコードさえエラー出ます###
0409403
2009/02/03(火) 22:24:52ID:???<?php
require_once('MySmarty.class.php'); //適当に書き換えてください
$mysmarty =& new MySmarty(); //適当に書き換えてください
$a = 'test';
$mysmarty->assign('test', $a);
$mysmarty->display('test.tpl');
?>
0410nobodyさん
2009/02/04(水) 01:57:17ID:???0411403
2009/02/04(水) 19:44:57ID:???インストールしたら正常に動きました。
公式の最新バージョンはバグ有りなんですかね?
何はともあれ、お騒がせしました。
0412nobodyさん
2009/02/04(水) 22:30:27ID:???0413403
2009/02/05(木) 07:13:36ID:???わざわざ確認していただき、ありがとうございます。
お礼?になるか分かりませんが、問題のあった方のSmartyをアップしておきます。
libsの中身を入れ替えるだけで多分再現できると思います。
ttp://www1.axfc.net/uploader/File/so/18050
0414nobodyさん
2009/02/05(木) 08:52:10ID:???0415nobodyさん
2009/03/03(火) 15:33:16ID:???{var|default:' '|string_format:'%0.1'}
だと値が無い場合には全て0.0になってしまうし、
{var|string_format:'%0.1'|default:' '}
だと値が無い場合にnoticeが出てしまって両立できないんだけど、
どうしたらいいかな?
0416nobodyさん
2009/03/03(火) 15:34:02ID:???0417nobodyさん
2009/03/05(木) 19:41:11ID:???$form->createに$optionsを引数で渡すと出力されないのは指定の仕方が悪いのかま?
{$form->create('Modelhoge', array('action'=>'Actionhoge'))}
モデルだけ指定すると出力されるんだが、、
0418nobodyさん
2009/03/06(金) 03:16:30ID:???register_modifier 使って関数自作すればいいんじゃない?
0419nobodyさん
2009/03/12(木) 20:22:12ID:???0420nobodyさん
2009/03/13(金) 10:39:43ID:???0421nobodyさん
2009/03/13(金) 10:48:04ID:???速度と品質を犠牲に使うなんて馬鹿すぎと既にCとJavaプログラマに言われていることを
419は知らないのだった
0422nobodyさん
2009/03/13(金) 11:05:13ID:???PHP案件は全部これ使って開発してるぁるょ!
0423smarty初心者
2009/03/16(月) 14:02:13ID:UpVqDdxvというエラーがでるのですが、どういう意味なのでしょうか?
教えてください。
0425nobodyさん
2009/03/16(月) 17:22:30ID:???0426nobodyさん
2009/03/19(木) 02:15:19ID:???0427nobodyさん
2009/04/12(日) 10:19:11ID:tJ4UxLsEhttp://www.ytv.co.jp/yatterman/
0428nobodyさん
2009/04/22(水) 01:10:23ID:rBHnGmhI「%%45^45E^45E480CD%%index.tpl.php」
と言うふうになりますが、これはどういう規則性でこうなっているのでしょうか?
%%から%%は区切る為にあると思うし、元ファイル名は.phpの前に付いています。
しかし、それ以外の数字と記号の意味がわかりません。
0429nobodyさん
2009/04/22(水) 01:44:07ID:???0430nobodyさん
2009/04/23(木) 02:53:59ID:ai/dLDOC例えば、test_file.phpというファイル名のファイルがあったとして
testで検索してもそのファイルがヒットするようにしたいのです。
opendirなどで指定ディレクトリを開いてファイルを1つずつ読み込み、
preg_matchなどの正規表現でファイル名を調べる方法もありますが、
もう少し短い手順で、簡単に調べられる方法はないでしょうか?
0431nobodyさん
2009/04/23(木) 02:55:05ID:???0432nobodyさん
2009/05/03(日) 08:41:04ID:???こんな変なファイルがありました
なんですか?
%%5A^5A2^5A201544%%test.tpl.php
0433nobodyさん
2009/05/03(日) 12:28:14ID:???0434nobodyさん
2009/05/03(日) 14:56:11ID:???消しても問題なさそうですね?
ありがとうございます
0435nobodyさん
2009/05/03(日) 17:01:11ID:???0436nobodyさん
2009/05/04(月) 18:34:03ID:bGJWbWfuMTのテンプレートを見ると <mt: >な独自タグを使っています。
Smartyで独自タグって定義できるのでしょうか?
0438nobodyさん
2009/05/05(火) 21:30:24ID:???0439nobodyさん
2009/05/06(水) 01:41:19ID:T5mYjMePどこの設定を変更したら出来るのですか?
0441nobodyさん
2009/05/09(土) 23:09:48ID:???0443nobodyさん
2009/05/12(火) 01:20:58ID:???0444nobodyさん
2009/05/13(水) 11:19:30ID:Q3CLDrVpで指定する関数名に
クラスのメソッドを指定する方法はありませんか?
0445nobodyさん
2009/05/13(水) 13:46:20ID:???0446nobodyさん
2009/05/13(水) 21:18:42ID:???--Hoge.php--------
class Hoge {
var piyo;
function Hoge() {
$this->piyo = $_POST['some'];
require_once 'view.tpl';
}
}
--view.tpl---------
<p><?php echo $this->piyo; ?></p>
テンプレートとしての機能ってこれじゃ駄目なの?
0449nobodyさん
2009/05/14(木) 02:00:08ID:???そりゃそうと、普通にメソッドコール出来たと思ったけど
0450nobodyさん
2009/05/14(木) 03:34:09ID:???それでも問題無い場合もあるよ。
ケースバイケース。
複数人(特に外注)を使う場合は、記述方法の統一されたテンプレートエンジンをオススメだけどね・・・
PHPをテンプレートエンジンとして使う=テンプレートを扱う人にシステム全権限を与える。
善悪にかかわらず、不正なコードでシステムがクラッシュする可能性が増えるってこった。
0452446
2009/05/14(木) 14:32:58ID:???ああすまない、ロジックとビューを分ける際にって所を聞きたかったので
その他の所は適当に書いてしまった。
テンプレートエンジンってのはそういう所も自動でやってくれるの?
>>450
とても納得できたよありがとう。
これもケースバイケースだろうけど、PHPerって実務に携わる場合って
Smarty必須だったり「おっ、いいね!」的なアドバンテージになったりするのだろうか。。
個人的な見解で良いので、聞かせてくれると有り難い。
0453nobodyさん
2009/05/14(木) 14:45:29ID:???escapeを入れたら今回記述されたテンプレートでもちょっと安心
とりあえず、OpenPNEはやってた
興味があればソース眺めると良いかと
0454nobodyさん
2009/05/14(木) 17:49:28ID:A4v4Hdy/質問なんですけど、ソース見て、それがsmarty経由でつくられてるものだって、
どこでわかるんですか?
見れるんなら見たいんですけど。
0455nobodyさん
2009/05/14(木) 18:51:12ID:???0456nobodyさん
2009/05/14(木) 20:10:22ID:???smartyでいうところのコンパイルされていないファイルって、見れるんですか?
だとしたら他人事ではないんですけど。
0457nobodyさん
2009/05/14(木) 21:02:38ID:???の
> それ
ってOpenPNEをさしてるの?OpenPNEはソースが配布されているけど
0458nobodyさん
2009/05/14(木) 21:26:13ID:???あ、そういうことでしたか。
そして、ダウンロードもしてみました。
他の人がつくったsmartyのテンプレートファイル初めてみた。
勉強になるな〜
0459nobodyさん
2009/05/14(木) 21:49:19ID:???0460nobodyさん
2009/05/14(木) 23:02:27ID:???0461nobodyさん
2009/05/16(土) 17:50:14ID:???ただ、OpenPNEの方がわかりやすいね。
なんか日本人的な書き方のような気がする
0462nobodyさん
2009/05/22(金) 09:35:19ID:???「PHPが苦手だからSmartyを使おう」
それとも
「PHPができるからSmartyでさらに上を目指そう」
のどっちなんですか?
わかる人からするとアホな質問かもしれませんが、
PHP初心者の自分には、どうしてもSmartyの役割がはっきりしなくて。
0463nobodyさん
2009/05/22(金) 10:07:23ID:???0464nobodyさん
2009/05/22(金) 10:22:59ID:???苦手だからとか上を目指そうとかそういう観点ではなく
0465462
2009/05/22(金) 11:11:41ID:???ご返答ありがとうございます。
スレも1から全部読みました。
そして、ここ数日ネットで調べまくったんですが、
どこも書いてあることは「デザインとプログラムを分離できるもの」ということで、
頭が悪すぎるのか、結局「smartyが何をしている」というのがわからずじまいでした。
そこで、書き込んでみたのです。
要は「工具セット」ってことですかね。
上の方で延々と行われた議論は
「使う工具(smartyの機能)なんか自分で作ればいい」派と
「始めからセット(smarty)であるんだから簡単で便利」派の言い争いって感じですか。
0466nobodyさん
2009/05/22(金) 11:43:37ID:???php自体にview的な要素が入ってるんだから重複は無駄だよ派(利便性中・コスト中)って感じでないかな
0468nobodyさん
2009/05/23(土) 20:37:34ID:???phpコードに書いた和文が文字化けしてしまいます。
テンプレートの和文は文字化けしません。
phpで$smarty->assign('name', 'みなさん');として
tplに「こんにちは、{$name}!」とすると、
htmlで「こんにちは、文字化け!」とでてしまうのです。
全部UTF-8で書いています。
サーバーはsixcoreをかりており、mbstringの設定はこうしています。
mbstring.language = Japanese
mbstring.internal_encoding = UTF-8
mbstring.http_input = pass
mbstring.http_output = UTF-8
mbstring.encoding_translation = Off
mbstring.detect_order = UTF-8,EUC-JP,SJIS,JIS,ASCII
mbstring.substitute_character = none;
今日一日中ググりまくっているんですが、どうしてもわかりません。
どなたかお助けください。おねがいします。
0469468
2009/05/23(土) 20:42:52ID:???ほんとサーセンでした!!!
0470nobodyさん
2009/05/23(土) 21:22:40ID:???はワラタ
0471nobodyさん
2009/05/23(土) 21:30:08ID:???この書き方はおかしいのでしょうか
{if $hoge!==""}text{/if}
たまにif文が動かないのでおかしいと思うのですが
0472nobodyさん
2009/05/23(土) 22:28:46ID:???===はあるけど!==はないんじゃないか?
マニュアルに記載されてないし
!($hoge==="")
に差し替えてみよう
0473nobodyさん
2009/05/23(土) 23:15:34ID:???0475nobodyさん
2009/06/30(火) 18:33:31ID:Cv5BCTzF何か利点はありますか?それとも他のフレームワークを使った方がよいですか?
フレームワークを使い比べたことがある方、教えてください。
0476nobodyさん
2009/06/30(火) 21:29:17ID:???SmartyはVのみを担当するテンプレートエンジンでしかない。
・既存のソース+Smarty
・他のフレームワーク+Smarty
という使い方が一般的です。
0477475
2009/07/01(水) 02:15:48ID:FWyhhBD1簡単ながら簡潔な意見だと思います。ありがとうございます。
0478nobodyさん
2009/07/01(水) 18:56:06ID:???0479nobodyさん
2009/07/06(月) 17:48:50ID:???HTML内にPHPコードを書いているのと変わらない。
(しかも、それを実現する為に複雑な処理をしているのでパフォが落ちる
でも、プログラマー以外がテンプレートを操作する環境なら凄い便利
0480nobodyさん
2009/07/06(月) 17:53:06ID:???0481nobodyさん
2009/07/07(火) 00:33:01ID:???0482nobodyさん
2009/07/07(火) 03:43:16ID:???大事なことなので小さく言いました。
0483nobodyさん
2009/07/07(火) 04:18:14ID:???PHPコードを書かせない(制限する)為に、Smartyがあるわけだが。
>(しかも、それを実現する為に複雑な処理をしているのでパフォが落ちる
内部的にPHPに変換及びキャッシュを行うから、きっちり設定をすればパフォ的には気にとめる程じゃ無くね?
システム規模によるだろうけど、大抵は処理全体の1割未満のリソースしか食わんよ。
上手に導入出来れば開発が相当楽になるので、結果的にコストパフォーマンスは上がるしさ。
一度Smartyの設計思想を読む事をおすすめ。
0484nobodyさん
2009/07/07(火) 16:14:30ID:???いやいや。そう言うことを言いたいんじゃないよ。
Smartyを覚えるならPHPも覚えなければいけないわけで、
フレームワークに使用するにはかなりの知識が必要だよ。
ってこと。475に対する意見として書いた。
あんたの言う「きっちり設定」する為には、それなりの知識や経験が必要だろ?
だから、経験がないと難しいって言いたかった。
0485nobodyさん
2009/07/08(水) 01:44:36ID:???最適化に関しては経験が必要だが、導入までは相当楽な部類かと思うぞ。
0486nobodyさん
2009/07/08(水) 02:16:30ID:???0487nobodyさん
2009/07/08(水) 05:06:10ID:???0488nobodyさん
2009/07/08(水) 09:25:14ID:???if ($nantoka) {
$str="yes";
} else {
$str="no";
}
↓
result:{$str}
(2)
result:{if $nantoka}yes{else}no{/if}
0489196
2009/07/08(水) 09:25:17ID:???0492nobodyさん
2009/07/08(水) 12:47:51ID:???> どの程度までCとVを分離すればいいの?
普通、MとCを何処まで分離すればイイの?という質問が多いと思う。
" CとV "と言ってしまう時点で、MVCがまるで判っていない印象。
MVCの中心にあるのは、C(コントローラ)
何故 C かと言えば、Webアプリのエントリーポイント(プログラムの着火点)は、アドレスであると考えたから。
どんな処理でも、まずそのスクリプトにブラウザでアクセスしないと何も起こらないという事実から、エントリーポイントをアドレスと考えた。
次に、このアドレスの扱いを拡張しようと考えた。
スクリプト名 / メソッド名 / 引数 ... って感じで、アドレスから処理を操ろうとした訳だ。
この時、上記の記述を実際の処理に落とし込むのが、C(コントローラ)の役割。
C は、受け取ったアドレスから、処理の出力先を M(モデル)にするか、V(ビュー)にするか判断するだけ...
ここから、Cは只単に処理を振り分けるだけと考えれば、おのずとMVCそれぞれの割り振りも判ってくるハズ
0494nobodyさん
2009/07/08(水) 12:59:50ID:???V(ビュー):クライアント(ブラウザ)への画面表示処理専用。ブラウザに出力するものは全てココで処理。スマーティーはこの部類に入る
0495nobodyさん
2009/07/08(水) 13:11:42ID:???0496nobodyさん
2009/07/08(水) 13:53:41ID:???目的では無く、あくまで手法なんだからケースバイケースに実装すればいいんじゃね?
使い回し不要のビジネスロジックなんかは、Cに実装しても良いかと。
0497nobodyさん
2009/07/09(木) 12:40:59ID:???> でもMVCモデル自体がモデルなんだから要するにMVC全体でサーバ処理するってことなの?
MVCモデルのモデルは事例を示すモデル。Mのモデルとは意味が違う。
同音表記だから同じ意味とか思うなよ...大人だろ!
0498nobodyさん
2009/07/09(木) 12:46:29ID:???確かに可読性は下がる。また、RoRが過ぎるとフレームワークのブラックボックス化が著しくなり、
背後でどんな処理がなされているのか、まるで判らなくなる。
当然、カスタマイズしにくい...
0499nobodyさん
2009/07/10(金) 17:05:35ID:???どうやってその理解を深める勉強をするの?
結局、自分でソースを書いて、良いか悪いか判断するしかないよね?
俺が書いているソースなんて、まるっきり駄目な部類かも知れないけど、
それでも目的通り動いているし、俺にとっては可読性はあってわかりやすい。
なら、それで良いのではないか?と思うんだけど、後で困るのだろうか
0500nobodyさん
2009/07/10(金) 17:06:18ID:???0501nobodyさん
2009/07/10(金) 17:19:26ID:???「でも、そこまで言うぐらいだから、こだわらないと困るのか」 ←疑問
0502nobodyさん
2009/07/10(金) 17:21:09ID:???>>496に「とらわれすぎると」って書いてあるだろ、
場合によってはMVCの枠組みに落とし込む事がデメリットになるって話。
例えば、数行で済む使い回し不要のコードの為にモデルを量産すると
管理が面倒だし、他との依存関係が不透明になるからロジック変更の時に面倒だよね。
そういう場合はCなりに埋め込んでしまう方がいいんじゃね?
って話。
0503nobodyさん
2009/07/10(金) 18:13:16ID:aQw5S2vU0504nobodyさん
2009/07/10(金) 18:17:06ID:???503さん、まじパねぇっす!
0505nobodyさん
2009/07/10(金) 19:29:24ID:???0509nobodyさん
2009/07/17(金) 19:58:03ID:???だというプログラマーが多すぎです
0510nobodyさん
2009/07/20(月) 22:58:34ID:KgRJffi+Modelは関数の処理で
Viewの部分がdisplayやfetchでテンプレ表示で
Controllerが最初のクラス実行で
自作フレームワーク+Smartyを作ってるんだが、
考えたらMVCすべてSmartyだけでもいい気がしてきた
0511nobodyさん
2009/07/20(月) 23:16:35ID:???PHP+Smartyじゃん
0512nobodyさん
2009/07/20(月) 23:28:34ID:???0513nobodyさん
2009/07/21(火) 10:38:01ID:???その理論だと世の中全てのPHPコードがMVC実装されてる事になる。
0514nobodyさん
2009/07/21(火) 10:47:00ID:???Smartyみたいに元から実装されている分けじゃないんでは?
0515nobodyさん
2009/07/22(水) 00:47:18ID:???0516nobodyさん
2009/07/22(水) 08:22:08ID:???0517nobodyさん
2009/07/24(金) 20:52:45ID:kF0trrBu0518nobodyさん
2009/07/24(金) 22:28:00ID:???Smartyだと使わされるもんだと思ってたよ。
0519nobodyさん
2009/07/24(金) 22:42:57ID:???コンパイル済みテンプレートとキャッシュを混同してるだろw
俺は使ってない。
本当にキャッシュが必要なページはrenderしたものを自前で静的htmlファイル生成化してるわ。
1時間に一回再生成するようなページで使えば楽んだろうけど、レアケースだよね。
0520nobodyさん
2009/07/25(土) 00:10:16ID:???批判じゃなくて興味本位だが、
なぜSmartyのキャッシュじゃなくて、自前なの?
Smartyで同じ事出来るよね?
0521nobodyさん
2009/07/25(土) 01:34:19ID:???更新したらキャッシュ切らないとだめなの?
0522519
2009/07/25(土) 05:09:32ID:???Smartyのキャッシュって、
PHP呼び出し → Smartyインスタンス生成 → キャッシュ確認 → 出力
という処理が入るから、生成されたHTMLファイルに直接アクセスする場合と比べると負荷はかかるんだよね。
519にも書いたように定期的に自動で再生成するような場合は楽だけどさ。
自分のやってるシステムでは、管理者が任意のタイミングで再生成するのがほとんどだから、自前で実装している。
DBからのデータを差し込みつつ、出力をキャッシュするってページはあまり無いからなぁ…。
0523nobodyさん
2009/07/25(土) 11:35:37ID:???テンプレートを更新したらキャッシュを削除するのが、
一番手っ取り早いし、確実だと思うよ。
>>522
なるほど。俺は、テンプレート(ヘッダーフッターなど)を
DBで管理しているんだが、
テンプレート内にもSmartyタグを使ってるから、
自前のキャッシュファイル生成だとそれらが反映されずに困るんだよな
0524nobodyさん
2009/07/26(日) 02:40:29ID:???ん?DBから動的に書き出す(+Smartyタグを処理する)場合ってキャッシュは使えないよね?
コンパイル済みテンプレートの事?
俺の中では
キャッシュ … DBデータ等の差し込み済み出力結果を静的に保存する。
コンパイル済 … SmartyテンプレートをPHPコードとしてキャッシュする。
って定義なんだ。
これが正しいかはわからない。誰が偉い人まとめて!
0525nobodyさん
2009/07/26(日) 03:26:35ID:???その都度キャッシュのon/offを切り替えて使えということ?
あるいはインスタンスを分けるとか?
0526nobodyさん
2009/07/26(日) 04:04:17ID:???毎回DBからデータを持ってくるのであれば、
それは事実上キャッシュは不可能。
コンパイル済テンプレートのキャッシュは常に有効にしておいて良いと思うよ。
0527nobodyさん
2009/07/27(月) 11:12:36ID:???0528nobodyさん
2009/07/27(月) 11:30:56ID:???0529nobodyさん
2009/07/27(月) 12:48:51ID:???0530nobodyさん
2009/07/27(月) 17:40:06ID:???キャッシュの有効期限とかどうしてるの?
設定してあれば on / offしなくても自動でキャッシュ更新されるし、
設定していないのであれば、キャッシュは生成されないだろうし。
上にもある通り、キャッシュとコンパイル済テンプレートの認識が混ざってないかい?
0531nobodyさん
2009/07/27(月) 22:41:03ID:???0532nobodyさん
2009/07/28(火) 10:37:13ID:???できるならすごい便利なんだが
0534nobodyさん
2009/07/28(火) 15:09:38ID:???Smartyヘルプのリソースプラグイン読んでごらん。
まんまDBからテンプレート取得するコード書いてあるから。
0535nobodyさん
2009/07/28(火) 16:09:45ID:???いまいちどういう時に使いたいのかわからん。
ファイル名でマッピングしておくのと何が違うんだろ?
0537nobodyさん
2009/07/28(火) 20:41:09ID:???CMSとか作る場合には良いんじゃないかね。
管理画面からの検索や更新、バックアップが取りやすい。
あとはWEBサーバが冗長化されていて、リソースを一箇所に纏めたい場合とかかね。
制作の手間暇考えたら、メリットは薄いと思うけど。
0538nobodyさん
2009/07/29(水) 22:00:38ID:???ファイルをDBで管理すると、WEB上から更新できるならな。
しかし、複数アカウントを発行して利用するシステム(MTなど
の場合は、システム毎にテンプレートを編集できるので
ファイルで管理するより便利。メリットは絶大だと思う。
0539nobodyさん
2009/07/30(木) 00:20:18ID:???0541nobodyさん
2009/07/30(木) 12:13:33ID:???0542nobodyさん
2009/07/30(木) 12:16:56ID:???0543nobodyさん
2009/07/30(木) 16:35:27ID:???デザイナの大半はローカル環境でコーディング、一括でアップロードを望んでいる。
またテンプレート自体がバージョン管理下に置かれている事も多々ある。
運営する上でDBに流し込み作業が発生するのは楽ではない。
0544nobodyさん
2009/07/30(木) 16:40:57ID:???0545nobodyさん
2009/07/30(木) 17:12:18ID:???0546nobodyさん
2009/07/30(木) 18:40:48ID:???0547nobodyさん
2009/07/30(木) 18:50:56ID:???0548nobodyさん
2009/07/30(木) 18:58:17ID:???ちょっとかじった中学生か、ってレベルのおっさんが
見てて頭痛くなってくるような非効率的な作業環境で、
素人騙して金貰ってるようなとこいっぱいあるぞ。
0551nobodyさん
2009/07/30(木) 23:54:04ID:???DBでできてファイル直弄りでできんことはないだろ。
せっかくキャッシュとか使ってるのに
変なとこでDB使うとパフォーマンスのボトルネックにもなりかねんし
DBじゃなきゃ開発コストパフォーマンスの点でよっぽど差がでる
って場合じゃなきゃ下手にDB化なんかせんよ。
そういう奴は画像ファイルとかもカラムに突っこんでるタイプだろ。
0552nobodyさん
2009/07/31(金) 00:03:20ID:???0553nobodyさん
2009/07/31(金) 01:55:56ID:???って思ったけど、OpenPNEがそうだな。追加で編集する場合はDB使うけど
0554nobodyさん
2009/07/31(金) 02:04:43ID:???制作、運用、実行コスト、全てが大きく変わるわw
検索するとか、システム一括で何かしたいとか、特別な理由が無い限りDBにテンプレートつっこむのはナンセンス。
0555nobodyさん
2009/07/31(金) 02:43:31ID:???ファイルシステムだって名称を唯一のキーとしたDBみたいな物だし
0556nobodyさん
2009/07/31(金) 03:11:10ID:???DBで記録しようがファイルで置こうがボトルネックと呼べるレベルのものは出ない
むしろ、恐ろしいほどに数が増えて人的に整理が大変になったほうがボトルネック
0557nobodyさん
2009/07/31(金) 03:49:06ID:???だからこそナンセンスなんだよw
ファイルシステムの実装はDBそのものなんだから、DBにつっこむ必要が無いものをつっこむ必要は無い。
>>556
にわかSEにありがちな発想ですね(^^
人的整理はDBやSmarty以前のバージョン管理、運用の問題。
0559nobodyさん
2009/07/31(金) 04:42:31ID:???FSじゃなきゃ出来ない事、FSなら標準で出来る事は多々あるだろう。
・DBコネクション等の負荷が無い
・当然PHP側のコードもシンプル
・SVN等のバージョン管理システムが使える
・使い慣れたエディタで直接編集が可能
・使い慣れたソフトでアップロード/ダウンロード/バックアックも自由自在
・当然複雑な管理画面も不要になる為実装コストは激減
これらはFSなら特別な実装は不要。
君はDBで実装出来るか?
検索したいとか、DBサーバで集中管理したいとか、特別な要件が無い限りテンプレートのDB化はしない。
逆にDBを疑似ファイルシステムとして使うメリットとその実装コストを教えて欲しい。
オープン系CMSを引き合いに出すのであれば、同等の管理画面等を作るコストも入れてくれよな。
0560nobodyさん
2009/07/31(金) 05:22:21ID:???0562nobodyさん
2009/07/31(金) 10:54:30ID:???第三者からみたら、有益な討論してるように感じるんだから。
0566nobodyさん
2009/07/31(金) 15:05:22ID:???0567nobodyさん
2009/07/31(金) 16:10:10ID:???0568nobodyさん
2009/07/31(金) 18:56:10ID:???答えられない質問には煽る…典型的な厨ですね。
定量的も何も、FSの場合は >>559の 実装コストはほぼゼロ。
DBで作った場合のコストは?低学歴な僕には検討もつきません><おしえてください。
0569nobodyさん
2009/07/31(金) 19:46:53ID:???俺も低学歴だけど頑張ってみる
XOOPSみたく、ベースはファイルで、そっからDB突っ込む奴で考えてみた
> ・DBコネクション等の負荷が無い
キャッシュファイル使えばテンプレ本体がDBにあっても関係ない
> ・当然PHP側のコードもシンプル
プラグインで済むから同じ
> ・SVN等のバージョン管理システムが使える
ベースのテンプレートをファイルにすれば同じ
> ・使い慣れたエディタで直接編集が可能
コピペすれば一緒かと
> ・使い慣れたソフトでアップロード/ダウンロード/バックアックも自由自在
phpMyAdminは使い慣れたソフトってことで
> ・当然複雑な管理画面も不要になる為実装コストは激減
テキストボックスで十分じゃん
> 同等の管理画面等を作るコストも入れてくれよな。
phpMyAdminで十分
テンプレートがDBに入ってて便利なのは、
出先とかでftp,シェルが使えない環境でもブラウザで更新出来るに尽きるんじゃないかと
頑張れば携帯でも更新出来るし。。。
0570nobodyさん
2009/07/31(金) 19:49:07ID:???DB操作用のSQLでは、後者の方が自由度高いと思うけどな
0572nobodyさん
2009/07/31(金) 20:58:48ID:???0574nobodyさん
2009/07/31(金) 23:21:12ID:???> キャッシュファイル使えばテンプレ本体がDBにあっても関係ない
テンプレート更新確認の為に、DB接続されるよ。
> プラグインで済むから同じ
プラグイン作成、テストの工数がかかるよ。
> ベースのテンプレートをファイルにすれば同じ
一括でコミットしたり、指定リビジョンにロールバックしたい場合とか困るよね。
> コピペすれば一緒かと
エディタで編集→管理画面を開く→コピペ→DBにコミット→確認が、直接編集と同じ手間と?
> phpMyAdminは使い慣れたソフトってことで
ファイルやディレクトリ単位での権限管理はどうするの?
例えば一時的にディレクトリ名を変えてバックアップ取りたい場合とか、運営者にSQLを書かせるの?
> テキストボックスで十分じゃん
見た目上はそうかもしれないが、内部実装は相応のコストがかかると思うよ。
複数ファイル同時に更新しなきゃいけない場合とかもあるしさ。
> phpMyAdminで十分
上に同じ。
> テンプレートがDBに入ってて便利なのは、
> 出先とかでftp,シェルが使えない環境でもブラウザで更新出来るに尽きるんじゃないかと
> 頑張れば携帯でも更新出来るし。。。
これはDBかFSかは関係無くね?制作者的にはSQL回す方が楽ではあるだろうけど。
>>571
>>568 で答えてるよ。FSならコストゼロ、DB実装なら相応。要件次第。
高学歴の君に、DBで同等の実装をした場合のコストを教えて欲しいな。
0575nobodyさん
2009/08/01(土) 01:20:41ID:???お前がせっかく書いたレスも陳腐な物になるぞ
0577nobodyさん
2009/08/02(日) 01:41:46ID:???0579nobodyさん
2009/08/02(日) 03:05:41ID:???DB憶えたての頃は俺も無闇にDB化したがったものだ
0580nobodyさん
2009/08/03(月) 01:13:56ID:???テンプレートをDBに入れずにファイルで読み書きしてるのかな?
0581nobodyさん
2009/08/03(月) 03:29:39ID:???使ってるところは使ってるだろう(ハテナとか、スケーラビリティか何かを考慮してDBをファイル置き場に使ってるとか)
要件次第なんじゃない?
それなりの資金と開発期間があり、WEBベースで不特定多数が編集するシステム開発
とかだったらDB化した方が遙かに楽だろう。
0584nobodyさん
2009/08/03(月) 17:52:34ID:???最初から『意味も無く』FSをDBに置き換えるのがナンセンスと書いてるじゃないかw
揚げ足取りはいいから、具体的なメリットデメリットを提示してくれよ、
大手が使ってるとか、Open系CMSが使ってるからでは話にならん。
0585nobodyさん
2009/08/03(月) 18:04:36ID:???0586nobodyさん
2009/08/03(月) 18:24:53ID:???どちらも都合のいいように解釈しすぎで、この話はいつまで経っても平行線。
0587nobodyさん
2009/08/03(月) 18:59:14ID:???DB厨がファビョっているだけだ。
0588nobodyさん
2009/08/03(月) 20:12:30ID:???0589nobodyさん
2009/08/03(月) 21:44:15ID:???とりあえず君のすばらしい経験談と、DB捌きっぷりをこのスレに轟かせれば、
もう少しましな流れになるんじゃないかな?
(^o^)でーたべーす は すごく すごい!・・・なぜなら、すごいから!
(^o^)でーたべーす の すごさがわからないやつは すごくない!
0590nobodyさん
2009/08/03(月) 22:23:10ID:???丸く納まってよかった。
0591nobodyさん
2009/08/03(月) 22:34:30ID:???開発ペース遅すぎるよね。
0592nobodyさん
2009/08/04(火) 00:10:08ID:???0595nobodyさん
2009/08/04(火) 01:51:48ID:???基本的にはFSじゃないかね。
DBは使う必要があれば使えばいい。
あまり思い浮かばないし、実例も聞かないけどね。
0597nobodyさん
2009/08/04(火) 09:05:44ID:???0599nobodyさん
2009/08/04(火) 11:24:56ID:???0600nobodyさん
2009/08/10(月) 18:05:18ID:euq/7Zv+テンプレートファイル内で、{php}〜{/php}って形で、phpのプログラムを実行出来ますが、
この「〜」の部分で、assignされた変数を操作することは出来ないでしょうか
{php}
//ここで{$name}の中身を変更したり、{$name}をキーにして画像を出力する関数を実行したい
{/php}
私の名前は{$name}です
こんな感じで…
よろしくお願いします。
0601nobodyさん
2009/08/10(月) 18:19:27ID:???やった事ないけど、Smartyインスタンスをなんらかの形で参照すれば出来るんじゃない?
グローバル変数にするとか、シングルトン使うとか、etc
0602nobodyさん
2009/08/10(月) 18:26:43ID:euq/7Zv+ありがとうございます、やっぱり呼び出し元でやるべきなんでしょうか?
いまassignされて引き渡されるデータが配列一つなので、それを元にテンプレートでやった方がスマートなんですよね
呼び出し元で各値の条件分岐分やるとassign assign assign…とassignだらけになってしまうので
テンプレ長くする方が問題かなぁ
0603nobodyさん
2009/08/10(月) 18:35:23ID:???もしかしてこんな感じで解決しない?
if(...) {
$a=1;
} else {
$a=2;
}
$smarty->assign('a',$a);
0604nobodyさん
2009/08/10(月) 18:43:35ID:euq/7Zv+ありがとうございます、そうですねー、確かにassign段階で書くとそんな感じですよね
決めました。そうします。
テンプレかアクションかどっちかが絶対ゴチャゴチャするなら一緒ですねもう。
いや、テンプレ変更する時のデメリットの方が大きそうだし。。
アドバイスありがとうございました!
0606nobodyさん
2009/08/10(月) 19:21:31ID:???テンプレートとロジックの切り分けは、そのゴチャゴチャを纏める事にあるんだよw
アクションとテンプレ両方で値を編集しちゃうと、
どこでバグが発生したか突き止められなくなっちゃうでせう。
0607nobodyさん
2009/08/10(月) 19:38:15ID:???例えば、入力任意のファックス番号とかあったとして、必須入力だったら確かにテンプレでは配列そのまま使って
FAX:{$ary.faxNum} で済むけど、必須じゃないんでその前段階のアクションで
if($ary['faxNum'];){$faxNum = $ary['faxNum'];}
else{$faxNum = "-";}
//assign処理
ってやる必要あるじゃないですか。それが嫌だったんですよ。
必須入力じゃない項目の数だけassignしまくらなきゃいけない。めんどくさいなぁと。
そこでphpかsmartyの構文で、テンプレの中で{if}とかしようと思ったんだけど…
でも、確かに>>606の言う通り、あっちこっちにまたがって値を編集しちゃダメですね。
smarty構文はデザインとか見た目(まさにテンプレート)を自動生成するためだけに使わなきゃなぁと
ようやく結論づきました。
0608nobodyさん
2009/08/10(月) 20:32:12ID:???if(!isset($ary['faxNum'])) ($ary['faxNum'] = "-";
って書いて、$ary変数だけassignすればいいんじゃない?
その程度の表示分岐処理なら、テンプレート側でもOKかと思う。
{$ary.faxNum|default:"-"}
でいけない?
0609nobodyさん
2009/08/10(月) 20:50:18ID:???ひょっとしたら先々仕様変更で「入ってまへんで、へよへよ」と表示するようになるかもしれん。
そのとき内部データにそんな値(内容)入れたくないだろ?
608の後半みたいにテンプレ側でやった方がいいよ。
0611nobodyさん
2009/08/10(月) 23:13:31ID:???{if}--{/if}の中で、smarty変数を生成できないの? assignと同じことをしたいんだけど
{if $var eq "hoge"}
$newVar = "hogeでした";
{/if}
みたいな…
0612nobodyさん
2009/08/10(月) 23:15:44ID:???0614nobodyさん
2009/08/11(火) 01:09:27ID:???0616nobodyさん
2009/08/11(火) 03:33:31ID:???assignタグすら知らんかったのか。
0617nobodyさん
2009/08/11(火) 12:14:27ID:???0618nobodyさん
2009/08/12(水) 05:56:44ID:???[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が出力されます
0619nobodyさん
2009/08/12(水) 06:23:13ID:???0620nobodyさん
2009/08/12(水) 08:01:33ID:???{foreach from=$hogeAry item=varAry}
{foreach from=$varAry item=item key=key}
{$key}={$item}<br>
{/foreach}
{/foreach}
で中身表示テストしてみ。
0621nobodyさん
2009/08/12(水) 10:23:00ID:u9+iooGY0=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);
0622nobodyさん
2009/08/12(水) 10:32:56ID:???Smarty側に正常にassign出来てない可能性大。
1. hogeAryが正常な配列か確認。
var_dump($this->view->hogeAry);
2. hogeAryがSmartyにassignされてるか確認。
0623nobodyさん
2009/08/12(水) 11:18:13ID:u9+iooGYvar_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だけがうまくいかないってことかなー
0624nobodyさん
2009/08/12(水) 11:41:14ID:???0625nobodyさん
2009/08/12(水) 12:16:00ID:u9+iooGYすみません、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つだけです)
ほんとに済みませんでした
0626nobodyさん
2009/08/12(水) 12:34:49ID:???本当にDBから値は取れてるのか、違う関数コールしてないか、
ただの配列なら表示できるのか、などなど。
可能だったら再現するコードも貼って。
0627nobodyさん
2009/08/12(水) 13:54:35ID:???0628nobodyさん
2009/08/12(水) 17:19:17ID:u9+iooGYどうもありがとうございます
普通の配列なら大丈夫です。同じ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は諦めてこっちで極力対応したいです。
0629nobodyさん
2009/08/13(木) 16:40:28ID:???0630nobodyさん
2009/08/21(金) 13:05:34ID:WhelcFIUテンプレート中の {$hoge}って変数に対してphpのクラス中のメソッドを実行するって可能でしょうか?
これまでは、php中で
$hoge=$instance->method($hoge1,引数1,引数2);
として、適切な値を返してたんですが、同じ事をテンプレートの中でやりたいと思います。
{$hogetext|nl2br}などでphp関数を実行できるのは知ってるんですが、調べたところメソッドの実行は
見つけられませんでした。無理なんでしょうか?
assign 前に実行すべき?
0631nobodyさん
2009/08/21(金) 14:42:48ID:???0633nobodyさん
2009/08/21(金) 22:16:33ID:???0634nobodyさん
2009/08/21(金) 22:16:56ID:???0635nobodyさん
2009/08/22(土) 00:43:33ID:qs0RE9DR{$num}というsmarty変数に対して、
function smarty_modifier_NUMtoTEXT($num,$aryName){
return $allAry[$aryName][$num];
}
というプラグインを実行したいんですがどう書いたら良いんでしょうか?
{NUMtoTEXT:$num:"boyAry"}とかやってみたんですがうまくいきません。
0636nobodyさん
2009/08/22(土) 00:59:28ID:???http://www.smarty.net/manual/ja/language.modifiers.php
0640nobodyさん
2009/08/25(火) 00:15:56ID:???php用テンプレートなのにわざわざ特殊な書式だし、頭に入らなくてしょっちゅうマニュアル見てる
頭悪くて悲しいな
0643nobodyさん
2009/08/26(水) 12:19:29ID:???検索フォームがあったとして
<input name="keyword" type="text" value="{$smarty.post.keyword}">
として検索後にデフォルト値を入れてるんだけど、
キャッシュしたらこういう事が出来ないと思って。
0644nobodyさん
2009/08/26(水) 13:37:23ID:???insertタグで出来るんじゃね?
あと検索結果画面だと思うけど、それってキャッシュするべきじゃなくね?w
するにしてもSmarty側でするもんじゃないと思う。
0645nobodyさん
2009/08/26(水) 14:37:50ID:???0646nobodyさん
2009/08/26(水) 23:01:41ID:???ページのサイドバーをキャッシュしているんだが、
その箇所に検索フォームやログインフォームが入っているんだよ。
確かにキャッシュするべきじゃないが、
部分毎にわかるとキャッシュする意味がないかな?とも思ったり。
やっぱり、設計に問題あるかも・・。
0647nobodyさん
2009/08/28(金) 14:54:05ID:45fY5t7Edbの返り値次第でサイドバーのデザインが数パターンに変わる場合、smartyのif文で書き分けするしかないのかな?
正直{if}に限らず醜いんで多用したくないんですよね…
部分的にデザインパターンを読み込むなど、他の解決方法はないですか?
0648nobodyさん
2009/08/28(金) 15:03:05ID:???0649nobodyさん
2009/08/28(金) 15:25:18ID:???0650nobodyさん
2009/08/28(金) 16:29:28ID:45fY5t7Eそうですね、それがいいですね
ありがとうございました
0651nobodyさん
2009/08/28(金) 16:30:15ID:45fY5t7Eありがとう
0652nobodyさん
2009/08/28(金) 17:53:20ID:MIAE9vSw呼び出すことはできないのでしょうか?
0653nobodyさん
2009/08/28(金) 19:07:18ID:???0654nobodyさん
2009/09/02(水) 05:34:35ID:55UeyG/q{assign var=uType value=$resultAry.uType|NumToText} みたいなことをしたいんですが
試してみてもタグがモロ出しになって修飾子が実行されてないようです。
仕様でしょうか?
書き方が変だとしたら、対処法を教えてください。よろしくお願いします。
0655nobodyさん
2009/09/02(水) 09:19:59ID:???0658nobodyさん
2009/09/06(日) 21:25:22ID:???1000アクセスある場合を想定してテストしたんだが、
約10〜15%ほどページの読み込みが早かった
0659nobodyさん
2009/09/07(月) 08:07:01ID:???0661nobodyさん
2009/09/07(月) 23:17:57ID:K7GASBY+Warning: htmlspecialchars() expects parameter 1 to be string, array given in パス modifier.escape.php on line 26
というエラーが出ます。
調べたところ、色々なサイトで同じ問題を扱ってるのを見つけました。
http://questionbox.jp.msn.com/qa4209668.html
http://pcmemorogu.blog14.fc2.com/blog-entry-20.html など
が、これらでの答えの通り、FOREACHする配列全てに $ary|smarty:nodefaults としてみたんですが
まだ完全に上記のエラーが消えません。
他にどんな可能性があるでしょうか?
配列だけでなく、通常のassignされた変数に対しても文字列でなければセットすべきなのでしょうか?
とりあえずやっていますが、変化がありません
0662nobodyさん
2009/09/07(月) 23:25:11ID:???つか二次元配列を出力しなければならない例が思いつかないけど
0663nobodyさん
2009/09/07(月) 23:49:42ID:K7GASBY+ありがとうございます
すいません、お礼書きつつ修正重ねてたら上手くいきました
foreachやsectionの中の配列だけでなく、ifの条件節部分でも配列に対しては|smarty:nodefaultsする必要があったようです。
if($testAry|count >0) を
if($testAry||smarty:nodefaults|count >0) にしたら治りました
お騒がせしました。ありがとうございました
0664nobodyさん
2009/09/08(火) 00:19:32ID:???0665nobodyさん
2009/09/08(火) 00:25:48ID:qSoCHGpfどう修正したらいいのやら、、と、調べたらありました。
http://blog.asial.co.jp/309
-----
# 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さんが別の方法で対応してるなら教えてもらえると嬉しいです。比べつつ勉強したいので。
自分で弄る自信はまだないんですよね、知らないところで悪影響でそうで…
0666nobodyさん
2009/09/08(火) 00:43:09ID:???if (is_array($string)) return $string;
で運用してるけど特に問題は無いよ。
配列が来た場合は、全ての要素を再帰的に処理するとかも試したけど、何か不都合があって止めた記憶・・・。
plugins_fix ディレクトリを作り、modifier.escape.php をコピーして修正を施す。
$smarty->plugins_dirの先頭にplugins_fixディレクトリを追加する。
って方法で修正を当てている。
default_modifiers使うと{debug}にも影響が出るから、同様に修正を当てたファイルをplugins_fixディレクトリに置いてる。
0667nobodyさん
2009/09/08(火) 00:47:00ID:qSoCHGpf詳しい説明ほんとにありがとうございました
debugってまだやったことないのでそっちはわからないですが、参考にさせてもらいます
ありがとうございました。
0668nobodyさん
2009/09/20(日) 18:33:32ID:???クソ公式落ちまくっててDLできないんだけど
http://www.smarty.net/
だれかソースくらいは分散しとけって忠告してやれよ
0669nobodyさん
2009/09/20(日) 18:55:26ID:???0670nobodyさん
2009/09/20(日) 19:52:57ID:???0671nobodyさん
2009/09/24(木) 18:00:24ID:???JavaScriptのライブラリのように互いに干渉してしまったりするのでしょうか?
また、調べてみると、何かテンプレートを扱う為にはPHPを学んでいても1〜数週間は馴れるまでかかると書いてありました
ですのでまず最初に一つテンプレートを使用してみようと思っているのですが、やはりSmartyが一番良いのでしょうか?
0672nobodyさん
2009/09/24(木) 18:07:40ID:???0673nobodyさん
2009/09/25(金) 14:31:20ID:???何だコレ?って感じ
今までPHP学習してきたのってあんま意味無いじゃんって思ったよ
例えばforeachとかさ
HTML?っても最初思った
0674nobodyさん
2009/09/25(金) 14:34:03ID:???0675nobodyさん
2009/09/25(金) 15:24:47ID:???それを不毛と感じるか、テンプレートエンジンの利点に気がつけるかでPGとしての資質がわかる。
0676nobodyさん
2009/09/25(金) 15:39:52ID:???0677nobodyさん
2009/09/25(金) 21:46:51ID:???0678nobodyさん
2009/09/25(金) 21:47:21ID:???0679nobodyさん
2009/09/25(金) 22:57:18ID:???0680nobodyさん
2009/09/25(金) 22:59:20ID:???0681nobodyさん
2009/09/25(金) 23:47:30ID:???0682nobodyさん
2009/09/26(土) 02:10:40ID:???[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:
0683nobodyさん
2009/09/26(土) 04:04:41ID:???0684nobodyさん
2009/09/26(土) 09:50:48ID:???むしろ直結するのはバグ率。
0685nobodyさん
2009/09/26(土) 15:22:15ID:???まだかなりバギーだし仕様も固まり切ってないみたいだし、正式リリースは来年末くらいじゃね。
0687nobodyさん
2009/09/28(月) 17:38:33ID:???0689nobodyさん
2009/09/29(火) 19:25:53ID:???http://www.j-tsugawa.com/jt-020621-EB3101-G.jpg
0690nobodyさん
2009/09/29(火) 19:36:34ID:???0691nobodyさん
2009/10/01(木) 12:03:22ID:???0692nobodyさん
2009/10/01(木) 18:28:48ID:KASc2bqu$list[0]["text"] = '{ImageBox file="test.jpg"}';
//テンプレート側
{foreach from=$list item="data"}
{$data.text}
{/foreach}
独自関数「ImageBox」で指定したファイルが表示されるようにしたいと思い、
配列をforeachで出力させようとしました。
しかし、{ImageBox}の箇所が変換されずにそのまま文字として出力されます。
指定方法が間違っているのでしょうか?
わかりづらいかと思いますが、アドバイスいただければ助かります。
0693nobodyさん
2009/10/01(木) 20:50:56ID:???0694nobodyさん
2009/10/01(木) 21:02:54ID:???phpなら可変関数使うところだが
Smartyはプラグインで可変関数の実装を作らないとダメかも。
0695692
2009/10/02(金) 00:20:33ID:???foreachで出力される時に、
変数内のSmarty関数も変換されると思ったのですが、
どうやら違うみたいなんですね・・。
プラグインで実装させるとか、難しそうだ・・・
0696nobodyさん
2009/10/02(金) 00:35:40ID:???0697柏アラフォーパパン& ◆.d6LNJ2fbM.9
2009/10/02(金) 15:06:34ID:bCUcRsfE0698nobodyさん
2009/10/03(土) 17:55:56ID:???$list[0]["text"] = $smarty->fetchFromString('{ImageBox file="test.jpg"}');
0699nobodyさん
2009/10/03(土) 17:57:12ID:???{foreach from=$list item="data"}
{ImageBox file=`$data.text`}
{/foreach}
じゃ駄目なのか?
0700nobodyさん
2009/10/03(土) 18:51:58ID:???まあそういうのはやはりPHPでやるべきだろうな。
smartyは最終出力だけにしておこう。
0701692
2009/10/04(日) 00:06:35ID:???その方法だと$listに必ず「ImageBox」が無いと駄目です。
ブログみたいに他のタグも挿入したい場合使えないので、
変数(というか配列に入れた値)に、Smartyタグを入れる事を思いつきました。
それで698さんが掻かれているようなプラグインを作って
一旦Smartyタグを処理させてから配列に入れれば、
foreachで出力しても表示されます。
しかし、当然ながらコンパイルファイルが作成されるので
その分ページの生成に時間がかかることになってしまいました・・。
(キャッシュを使えば良いだけですが、なんか気になりました
0702692
2009/10/04(日) 00:08:43ID:???ttp://d.hatena.ne.jp/lapis25/20080908/1220861488
>>698さんのソースを頼りに検索したらヒットしました。
凄く参考になりました。ありがとうございます。
0703nobodyさん
2009/10/11(日) 13:15:33ID:gYB28ahJsmartyで{if}の中で出力したりすると、このsmartyタグのせいで発生した改行やらスペースやらが
HTMLにもモロに出てしまって美しくありません
どうにかする方法ないでしょうか?
0704nobodyさん
2009/10/11(日) 14:25:24ID:???で囲うべし。
0706nobodyさん
2009/10/11(日) 15:43:55ID:???おれはHTMLの頭から終わりまでstripで囲ってるよ。
改行、空白によるブラウザの変なバグにも遭遇しないし、
何より若干ではあるものの軽くなる。
かっこいいかどうかで言えば、おれは改行なしのほうがかっこいいと思う。
0707nobodyさん
2009/10/11(日) 16:11:57ID:???<textarea>の中身とか
0708nobodyさん
2009/10/11(日) 17:59:26ID:???おおー、そうだそれがありました
ありがとうございました
>>707
<textarea><$hoge|nl2br></textarea>じゃ対処できないもの?
0709nobodyさん
2009/10/11(日) 18:22:54ID:???逆にliteralで囲う。
0710nobodyさん
2009/10/12(月) 00:52:20ID:???0711nobodyさん
2009/10/13(火) 01:13:00ID:???そこまで気にするなら
{if}
{assign var="hoge"}
{else}
{assign var="hoge"}
{/if}
<textarea>
{$hoge}
</textarea>
0712nobodyさん
2009/10/13(火) 23:52:48ID:B+0jNtpm0713nobodyさん
2009/10/14(水) 00:10:46ID:k/3ZY/k4↓の、アンパサンドって何の意味があるのでしょうか?
$smarty =& new Smarty;
0714nobodyさん
2009/10/14(水) 00:27:06ID:???0715nobodyさん
2009/10/14(水) 00:36:04ID:???ないよ。
PHP4でも5でもnewはリファレンスを返すんだけど、
PHP5でそれが明言されるまではnewを=するとnewなオブジェクトがコピーされるという迷信があった。
だから=&と書いてるところがたまにあるけど、Smartyマニュアルでも普通に=だ。
要するに、単なる誤解が生んだもの。
0717nobodyさん
2009/10/14(水) 01:06:18ID:???0718nobodyさん
2009/10/14(水) 01:30:24ID:???つ ttp://jp2.php.net/manual/ja/language.oop.newref.php
どこでそんな嘘をきいたん?
ちなみに5でも代入で変数のコピーが行われるのは同じ。
違うのはオブジェクトのコピー時の内部動作がハッシュテーブルの複製から
オブジェクトの実体の参照カウンタ操作になっている点。(zvalの参照カウンタとは別ね)
0719nobodyさん
2009/10/14(水) 03:14:45ID:???俺面倒だからパスね
0720nobodyさん
2009/10/15(木) 18:15:01ID:???俺も使った覚えないわ、マニュアル本にも例なんてないし。損してるんだろうか。。
0721nobodyさん
2009/10/16(金) 11:58:47ID:???使い道が思いつかんでもないが実際に
使う場面ってそうそうなさそうな。
0722nobodyさん
2009/10/20(火) 06:10:16ID:???0723nobodyさん
2009/10/20(火) 10:43:32ID:???0724nobodyさん
2009/10/21(水) 00:53:52ID:???extendリソースがあるんだけど、使い方解る人いる?
0725nobodyさん
2009/10/21(水) 10:25:55ID:???というかコレが核だと思う
後は必要に応じて・・・って感じで十分だし
0726nobodyさん
2009/10/21(水) 10:59:25ID:???どこら変がPHP5 OOPなんだよ
0727nobodyさん
2009/10/21(水) 22:34:20ID:???一方、__callでメソッドの外部化をしてる
extendリソースってどれ??
0728nobodyさん
2009/10/22(木) 01:31:12ID:???sysplugins/internal.resource_extend.php
ソースコメント読む限りでは他テンプレートエンジンのextendっぽいんだけど、
リソースとして定義されてるので、どう使っていいかよくわからんw
getTemplateSource()読むと、超強引にblockタグとか置換してるみたいなのであまり有用ではなさそうだけど・・・('A`;
2から乗り換える利点がまだ見えないなぁ
0730nobodyさん
2009/10/24(土) 20:08:39ID:???0732nobodyさん
2009/10/25(日) 08:28:37ID:???別にsmartyに限らず、独自の記法などで対応してるところはある。
Smartyじゃないとダメなら自分で作ればいいジャマイカ。
0733nobodyさん
2009/10/27(火) 00:14:32ID:???<%hogehogeLoop>と書いたら{section name=hoge loop=$id} になるように置換してるブログシステムはあるかもしれない
大体は自前でやってるか、MovableTypeの改造版じゃないかな
0736nobodyさん
2009/10/27(火) 20:55:46ID:???ttp://shop-pro.jp/
ブログじゃなくてネットショップだけど、テンプレートにsmarty使ってるね
EC CUBEの改造版なんだろうけど
0737nobodyさん
2009/10/27(火) 21:04:25ID:???ユーザー大量にいたらキャッシュ効かせても厳しい気がする
0738nobodyさん
2009/10/28(水) 05:06:51ID:???0739nobodyさん
2009/10/28(水) 11:11:33ID:???0740nobodyさん
2009/10/28(水) 13:46:19ID:???0742nobodyさん
2009/10/29(木) 11:06:44ID:???0743nobodyさん
2009/10/29(木) 21:54:28ID:???{include file="/home/gooblog/Smarty/blog/templates/comment_link.tpl"}
パスにSmarty入ってますがな
0744nobodyさん
2009/10/30(金) 22:56:36ID:???0745nobodyさん
2009/11/01(日) 07:20:38ID:ZF01kyEW0746nobodyさん
2009/11/01(日) 10:57:23ID:???確かにできないな
まあ元々プログラマーと別環境で作業すること自体難しい気はするが。
>>745
モノリンガルの俺には厳しいようだ
0748nobodyさん
2009/11/09(月) 13:54:09ID:jgJG5jObSmarty errorが表示されます。
このエラーを表示しない方法はないのでしょうか?
PHPのエラー表示をしない事で対処するしかないのでしょうか?
0749nobodyさん
2009/11/09(月) 14:06:20ID:???0750nobodyさん
2009/11/09(月) 20:59:58ID:I33d9sv+↑これ?
0751nobodyさん
2009/11/11(水) 19:01:43ID:0BFUpwQjある変数の値によって、特定の領域の内容をかなりダイナミックにレイアウトごと変更させたいんだけど
変化のバリエーションがかなり多いんで{if}でパターン分け記述するのはあまり現実的じゃないんだよね
外部でhtmlとして整形したものを丸ごとコントローラでassignさせて飲み込ませるしかないかな?
0752nobodyさん
2009/11/12(木) 03:03:02ID:???0753nobodyさん
2009/11/12(木) 07:44:56ID:dv0ticwo0754nobodyさん
2009/11/12(木) 11:31:04ID:???おー、サンキューサンキュー♪
includeって機能があったんだね、この辺から調べてみるよ
たすかったわほんと、ありがとね
0755nobodyさん
2009/11/12(木) 12:04:54ID:???0756754
2009/11/12(木) 19:22:51ID:SoSJwGM8hoge.tplに
{insert name="hogeAction" title="テスト" script="hoge_action.inc.php"}
って書いて、
同じディレクトリにあるhoge_action.inc.php に
<?php
function smarty_hogeAction($param, $smarty){
return 'あいうえお';
}
?>
って書いたんだけど「あいうえお」の出力がされない。
($param, $smarty)の引数を消して function smarty_hogeAction(){… とやってもダメだ。
何が問題かな? ご意見よろしくお願いします
0757nobodyさん
2009/11/12(木) 19:58:44ID:???× smarty_hogeAction
○ insert_hogeAction
でやってます
0758756
2009/11/12(木) 22:52:47ID:???お騒がせしました
0759nobodyさん
2009/11/13(金) 13:18:08ID:???0760756
2009/11/13(金) 14:36:48ID:???要するに
.tplでの記述は {insert name="hogeAction"}
スクリプトファイルは insert.hogeAction.php
ファイルの格納場所は /pluginsディレクトリ
として入れてりゃ良いだけの話だった。自前modifierとかわらんかった。
insertタグのscript属性とかなくても良いものを必須みたいに書いてたり、
関数名(function insert_hogeAction(-,-){-})を嘘書いてるサイトみて
変なことやりまくってたよ。恥。
0761nobodyさん
2009/11/13(金) 14:58:34ID:???0762756
2009/11/13(金) 15:11:57ID:???うん、公式がイマイチわからなくて他のサイトみてたらハマっちゃって。
今また公式見返してるけどやっぱりよくわからない
http://www.smarty.net/manual/ja/language.function.insert.php
「{insert} 関数の名前は、 ネームスペースの衝突を避けるために "insert_" によって始まる必要があります。」
ってあるけど、それじゃ上手くいかなくて
smarty_insert_hogeAction() って形でやっと上手くいったからなぁ…
こっちの方が公式よりわかりやすかった、俺が物わかり悪いんだろうけど
http://www.y2sunlight.com/ground/?PHP5.0%2F8.Smarty%A4%F2%CD%FD%B2%F2%A4%B9%A4%EB
0763nobodyさん
2009/11/13(金) 15:22:56ID:???http://www.smarty.net/manual/ja/plugins.naming.conventions.php
>PHP ファイル内で定義する プラグイン関数 は次のように指定します。
>smarty_type_name()
0764756
2009/11/13(金) 16:02:41ID:???そうなの。おおお、疑問の本質に近づいてきた、質問させて。
じゃあsmarty_insert_xxx じゃなくて insert_xxx()ってのはプラグイン(別ファイル自動読み込み)じゃないのか。
そもそもinsert_xxx()ってどこに書くの?
$smarty->assign("msg","hello"); みたいな処理を書いてるコントローラ?の.php?
それがわからなくてあっちこっち見る迷走がスタートしたんだ
0765nobodyさん
2009/11/13(金) 16:19:30ID:???0766nobodyさん
2009/11/13(金) 20:01:32ID:???0767nobodyさん
2009/11/14(土) 14:51:09ID:???0768nobodyさん
2009/11/14(土) 19:37:58ID:???みなさんは、どこまで、どんな方法でテンプレートを利用していますか?
<p class="error">※必須項目です。記入してください。</p>
<p><input type="text" name="mail" value=""></p>
1. エラーメッセージは最初からpでマークアップ済み、そのままassign、smartyには{}のみ
{$errors.mail}
2. エラーメッセージはテキスト、assign時に空欄かどうか判定してpでマークアップ、smartyには{}のみ
{$errors.mail}
3. $errorsにはテキスト、そのままassign、smartyで{if}処理
{if $errors.mail}<p class="error">{$errors.mail}</p>{/if}
4. $errorsにはテキスト、そのままassign、smartyで関数処理
{$errors.mail|markupFunction}
デザイナさんと分業する場合、
プログラム側がマークアップに関わらない3.が一番いい気がしているのですが、
少しテンプレートファイルが煩雑になるのが気になったりもします。
エラーメッセージマークアップ用の小さなテンプレートファイルを作っておいて、
4.のmarkupFunctionから読み出して利用すると比較的キレイな気もしますが、
テンプレートファイルが小分けになるのも煩雑といえば煩雑な気もします。
0769nobodyさん
2009/11/15(日) 03:44:59ID:???Apacheの連続アクセステストしたけど、アクセス回数が多ければ多いほど
キャッシュの効果は効いたよ。ただし、1.2〜3倍速くなる程度だけど。
>>768
ブログのテンプレみたいなのを作ってるが、3が一番良いよ。
MTなんかもそうだし。
0770nobodyさん
2009/11/15(日) 07:22:36ID:???エラーは常に埋め込まれ、CSSで非表示にしておく。もしエラーなら親要素にerrorというクラスを与えて、その子要素のエラーを表示するCSSを書いておく。
div p{ display:none }
div.error p{ display:block }
これでエラー時のテキストもデザイナー側で書ける。
親要素は
<div class='{$error.title}'>
って感じで、タイトル項目がエラーなら error.title に 'error' を assign しておくだけ。
0771潔癖プログラマ
2009/11/15(日) 10:24:50ID:???やはり3.ですか。
ただその場合
$errors.mailに値があればいいんですけど、
値がなくifがfalseになると、その行末の改行が無視されて
次の行のインデントが崩れちゃうのが気になります。
{/if}のあとに空白1文字入れとくと回避できますが、
「よろしくないテクニック」っぽくて好きになれません。
>>703でも話題にでていたようですが、
このsmartyの仕様は気に入りません(苦笑)。
{if $errors.mail}
<p class="error">{$errors.mail}</p>
{/if}
こんな感じで3行使うのがいまのところ最善か。
テンプレートファイルがますます煩雑に…(苦笑)。
>>770
CSSのdisplayだけで制御するのは、
自分も一瞬頭をよぎったことはありますが、
やはり気持ちが悪いですごめんなさい。
あとエラー時のテキストが「入力内容をご確認ください」程度ならいいけど、
「メールアドレスが正しくありません」
「必須入力項目です」
「文字数が多すぎます」
とか丁寧に表示してあげる場合に対応しにくい気がします。
0773nobodyさん
2009/11/15(日) 22:48:09ID:???errに <p class="error">エラーメッセージ</p> ぶち込みだわ。
0774nobodyさん
2009/11/16(月) 00:55:30ID:???汎用性やら考えると3じゃないかな。
他の方法だと、特定箇所だけ見た目を変えたい時にデザイナ側で対応しにくい気がする。
テンプレートを関数もどきとして使うような方法もありかもしれない。
// エラー表示箇所
{include file="error.tpl" error=$errors.mail}
// エラー表示テンプレート error.tpl
{if $error}
<p class="error">{$error}</p>
{/if}
0775潔癖プログラマ
2009/11/16(月) 09:18:08ID:???なるほど。4.の別解のような感じですが、
それだとincludeするテンプレファイルまでデザイナさんに任せられるので、
複数パターンのテンプレファイルが用意できたり汎用性が高そうですね。
図らずも(?)、{if}による改行問題も、
別ファイルに追い出すことで解決できてるし、
なかなか良いかもしれません。
0776nobodyさん
2009/11/16(月) 12:51:37ID:tubifOLG1秒2秒遅くなった経験がある人いるんでしょうか?
0777nobodyさん
2009/11/16(月) 23:39:48ID:???「遅い」って感じるのは鯖が悪いんだろ
0778nobodyさん
2009/11/17(火) 02:12:17ID:???古いサーバPC上でキャッシュを無効にして使っても、0.001秒の処理が0.002秒になる程度。
数値的には2倍だが、体感的にはまずわからない。
素のPHPコードに比べたら遅いと言えるが、
個人的にはメリットの方が桁違いに上かな。
0779nobodyさん
2009/11/17(火) 02:16:05ID:???よかったー。いかにもノロノロしてるような状態になるのかと思いました。
安心して作れます、ありがとう
0780nobodyさん
2009/11/17(火) 03:18:29ID:???0781nobodyさん
2009/11/17(火) 06:08:10ID:???ペース早いな
0782nobodyさん
2009/11/17(火) 13:05:14ID:???更新が少ないもしくは、更新タイミングが決っている場合にキャッシュ有効にすればいい。
大規模サイト用のチューニング項目だと思えばいいんじゃないかね。
0784nobodyさん
2009/11/19(木) 15:56:07ID:???掲示板とかね
有効にしといて書き込まれたタイミングでキャッシュ削除するのかな
0785nobodyさん
2009/11/20(金) 13:27:52ID:???りなくす
Smartyでテンプレートが無い場合に白い画面になっちゃうんで、エラーをハンドリングしたいんですけど出来ないでしょうか?
テンプレートがあるか判定なんてめんどーなことしないといけないんですかね?
0786nobodyさん
2009/11/20(金) 13:53:02ID:???そもそもfatal errorなり出るはず
0787nobodyさん
2009/11/20(金) 13:55:42ID:???0788nobodyさん
2009/11/20(金) 14:07:49ID:L1RHfQMx{
$smarty->display($tpl);
}
catch
{
なんたら
}
みたいにやりたいです。
エラーレポ調べてみます。
0789nobodyさん
2009/11/20(金) 14:24:17ID:L1RHfQMx3に設定して見ましたが例外はキャッチできませんでした。3が間違いなんでしょうか?
>>786
それは戻り値として出るということですか?
0792nobodyさん
2009/11/20(金) 14:32:43ID:L1RHfQMx素直にtemplate_exist使いたいとおもいます。
>>786
voidですね。
0793nobodyさん
2009/11/20(金) 15:02:58ID:???0794nobodyさん
2009/11/20(金) 15:05:46ID:L1RHfQMx↓
display_errors = On
httpd restart
error_reporting(E_ALL);
try
{
$smarty->display($tpl);
}
catch
{
なんたら
}
>>791
XAMPPじゃないです。それぞれソースからいれました。
0795nobodyさん
2009/11/20(金) 15:09:05ID:L1RHfQMx>>793
789への自己レスです。
0796nobodyさん
2009/11/20(金) 15:12:27ID:???(2)Smartyのファイルを調べてみる
画面が真っ白になった原因として、Smartyのファイルが壊れていることがあるのです。
http://xoops-manual.net/modules/smartsection/item.php?itemid=17
0797nobodyさん
2009/11/20(金) 15:14:35ID:???テンプレートファイルが無かった場合に出るエラーは
Smarty.class.phpの1591行目くらいにある
$this->trigger_error('unable to read resource: "' . $params['resource_name'] . '"');
でしょ?
で、例外をスローさせるための案
1.当該箇所を書き換える
2.Smartyクラスを継承したMySmartyクラスを作って_fetch_resource_infoメソッドをオーバライドする
3.set_error_handler関数でwarningが発生した時に例外投げるようにする
xamppじゃないとのことなので真面目に答えてみました
0798nobodyさん
2009/11/20(金) 15:25:36ID:L1RHfQMxおぉ、まさに欲しかった回答です。
ありがとうございます。
そのワーニングで間違いないです。
1…書き換えるのは好きじゃないです。
2…うーん、処理に悩みそうです。
3…これが簡単そうです。
ちょっとがんばってみます。
たすかります。
0799nobodyさん
2009/11/21(土) 10:25:34ID:???0800nobodyさん
2009/11/21(土) 11:47:09ID:???0801nobodyさん
2009/11/21(土) 13:04:20ID:???ありがと、メールのテンプレか
就活してたときの毎ナビか何かの企業からメールに
『こんにちわ寒くなりましたね、{$username}さん』
とか、書いてあったのを思い出した
0803nobodyさん
2009/11/26(木) 11:34:27ID:tP8Fcb0Cparent.tpl中で、includeを使ってテンプレート化したヘッダを読み込ませたいと思ってるんですが
テンプレート(header.tpl)をページの種類に応じて動的に変更させたいときの手順がよくわからないです。
たとえば、動物の紹介ページでは動物の一覧を、自動車の紹介ページでは自動車の一覧をヘッダに表示したい時、
表示対象の画像や情報(動物写真/自動車写真、それぞれの名前情報など)は、includeタグの中に変数として
持ち込むしかないのでしょうか?
自分のイメージでは{include file='header.tpl' pageType='animal'}として、
変数値animalを受け手のテンプレで解釈してそれを元にDBから必要データを取得できたらいいなと思ったんですが。
(なるべく一カ所で取得プロセスを管理したいので)
そんなのは無理で、あらかじめ親のparent.tpl=parent.phpで必要データを取得して、
それをincludeに変数で渡すしかないという結論でいいのでしょうか?
今思いついた方法は、incudeタグ中の変数でpageType='animal'と渡して、それをheader.tplで
自前のmodifierに譲渡しそこから必要データ取得→出力の流れです。
もっとスマートなやり方ないでしょうか? アドバイスお願いします
0804nobodyさん
2009/11/26(木) 15:51:29ID:???何を言ってるのか良く分からないけど
>変数値animalを受け手のテンプレで解釈してそれを元にDBから必要データを取得できたらいいなと思ったんですが
すればいいのでは?
0805nobodyさん
2009/11/26(木) 15:52:24ID:???0806nobodyさん
2009/11/26(木) 16:04:59ID:???なぜmodifier?function作れば?
0807803
2009/11/26(木) 23:09:48ID:tP8Fcb0C>>804
header.tplって、単独のページとしては存在しないあくまでパーツのテンプレートなので、
index.tplに対するindex.phpの様なコントローラ(?)のファイルってheader.tplにはないのではと
考えたのですが…(header.phpにアクセスすることはないと思うので)
思い違いなのでしょうか?
>>806
勉強不足なのかもしれません、functionについて調べてみます。ありがとうございます。
0809803
2009/11/27(金) 01:09:41ID:???あ、親のページでってことですか、、なるほど!
1)ページのテーマ(animalとか)を引き渡されてDBに働きかけるphpを外部化し、
2)それをheader.tplの親のanimal.php, car.phpなどに読み込んで、
3)結果をincludeタグ渡す
って感じでいいかな。
これならデータの取得部分が複数にばらけることもないのか。。
これのデータ取得の順番を変えたものがfunctionでやるってパターンかもしれない
ありがとうございます。チャレンジしてみます
0810nobodyさん
2009/11/29(日) 07:42:11ID:wdDHDadn<?php
$var = "abc";
function smarty_function_hogefunc($params, &$smarty){
global $var;
return $var;
}
?>
上記の内容で <div>text</div>{hogefunc} としてもabcを出力しません、なぜでしょうか?
パスが通ってることは確認済みで、 $var="abc"; を echo "abc" とした場合、
abc<div>text</div>の形で出力するようです。
変数のスコープのチョンボをしてるのかなと考えてはみたんですが…
function …{〜} の外に書かれたものは正常に処理されないという仕様なんでしょうか?
申し訳ありませんが、ご意見宜しくお願いします
0811nobodyさん
2009/11/29(日) 13:22:28ID:???0812nobodyさん
2009/11/29(日) 14:16:45ID:???してみればいいじゃない。
0813810
2009/11/29(日) 23:16:09ID:???functionの中でreturn "abc"; すると、それは返すんです。
なんでかなぁ
>>811
わかりにくかったみたいですみません
0814nobodyさん
2009/11/30(月) 09:19:43ID:???・print_r($_GLOBALS)してみる
・echo $varしてみる
0815nobodyさん
2009/12/02(水) 14:25:43ID:1PNbu+TXhttp://www.youtube.com/watch?v=DyzzLwlIcpE
http://www.myspace.com/ametsub3110
http://www.youtube.com/watch?v=BDD9MZUTQzs
http://www.myspace.com/serphinjapan
(http://www.apple.com/jp/quicktime/download/)
http://www.jimbeard.com/boomer.html
http://www.jimbeard.com/Beard%20mp3s/Song%20of%20the%20Sun%20128/Camieff%20Wb.01_01.mp3
http://www.jimbeard.com/Beard%20mp3s/Song%20of%20the%20Sun%20128/Parsley%20Trees%20Wb.01_01.mp3
http://www.jimbeard.com/Beard%20mp3s/Truly%20128/Hand%20to%20Hand%20Wb.01_01.mp3
http://www.jimbeard.com/Beard%20mp3s/Truly%20128/Gonna%20Tell%20on%20You%20Wb.01_01.mp3
0816nobodyさん
2009/12/04(金) 17:16:31ID:???ブラウザで見るソースとcacheフォルダのキャッシュを見ると、DOCTYPEタグより上にプラグインの中身が出てしまってるんです
0817816
2009/12/05(土) 18:55:21ID:???insertプラグインって中でechoしちゃダメなのかreturnしないとイケないのか
キャッシュオフのときは正常に見えるから気付かなかった
0818nobodyさん
2009/12/07(月) 16:47:15ID:???0819nobodyさん
2009/12/09(水) 10:32:51ID:AWY/enbH0820819
2009/12/10(木) 15:56:47ID:???0821nobodyさん
2009/12/13(日) 22:00:00ID:???これだとだめなん?
ttp://www.smarty.net/manual/ja/caching.cacheable.php
0823nobodyさん
2009/12/15(火) 15:00:29ID:???のエラーが出る際に、
自分で作った404エラーページ(のテンプレ)を読み込むことはできますでしょうか?
0824nobodyさん
2009/12/15(火) 15:56:24ID:???$error_reportingを参照したらいいとおもう。
0825823
2009/12/15(火) 16:39:30ID:???0826nobodyさん
2009/12/25(金) 18:27:23ID:???マニュアルはサンプルとか説明が簡単すぎて知りたい情報が出てこないのですが・・・
例えばdefault_resource_typeプロパティで、デフォルトのfile以外の値を知りたいのに、それどころかサンプルすら書かれていなかったり困ります
リソースプラグインの事ももっと知りたいんですが見つかりません
PEARでも感じましたが、なんでこう情報が少ないんでしょうかね?
マニュアルとそのコピー以外の情報が出てきません
0827nobodyさん
2009/12/25(金) 19:02:01ID:???無いのは君の理解力だろう。
Smartyに至ってはマニュアルあれば大抵は事足りる。
リソースプラグインに関しても、マニュアル読んでわからん人には無縁なんじゃねぇかな。
あれ以上丁寧な解説求めるなら金払ってスクールにでも通えばいい。
0828nobodyさん
2009/12/25(金) 21:36:44ID:???謎があったら追い掛けてみたら?
0830nobodyさん
2009/12/27(日) 00:20:26ID:???「俺の知りたい情報が無い」ってだけじゃ、教える側もわからんだろう
default_resource_typeにしたって、リファレンスのテンプレートリソースとリソースプラグインの項目に十二分な情報載ってると思うしなぁ
ここまで枯れた技術なのに、情報が足りないってのは調べる力か理解力が無いとしか思えないんだが
0831nobodyさん
2009/12/27(日) 11:58:44ID:???0832nobodyさん
2009/12/27(日) 13:02:13ID:???0833nobodyさん
2009/12/27(日) 19:56:19ID:???「もし情報があったとしたら〜」なら同意できるんだけどな。
ブログなんかでちょこっと取り上げているサイトはあっても
ユーザー同士で語り合うようなコミュニティは無い。
マニュアル見ろよってのは当たり前の行為で、
Smartyはそれ以上の使い方(サイト構築のテンプレ利用など)があるから
使い方やアイディアをまとめたサイトがあれば良いとは思う。
0834nobodyさん
2009/12/27(日) 21:01:57ID:???0836nobodyさん
2009/12/29(火) 11:34:24ID:???0837nobodyさん
2010/01/06(水) 21:51:18ID:???マニュアルって簡潔にまとめられてるからね
>>833の言ってるようなことは俺は分かるね
Webだけじゃなく、他にも構築する時にここどうすればいいんだっけ?って時に調べられないからね
情報が少なすぎて
0838nobodyさん
2010/01/07(木) 09:11:46ID:???日本語で複数出版されてるのは恵まれてる方だと思う。
まとめサイトは自分で立ち上げて、ある程度充実させられれば
他の人も情報を集めてくれるようになるかもよ。
0839nobodyさん
2010/01/07(木) 15:20:10ID:???Smarty入門しか知らないけれど・・・?
0840nobodyさん
2010/01/07(木) 16:37:46ID:???0841nobodyさん
2010/01/07(木) 23:58:21ID:???$smarty->assignで割り当てるのは変数だからキャッシュじゃないし
0842nobodyさん
2010/01/08(金) 00:03:40ID:???0843nobodyさん
2010/01/08(金) 09:13:25ID:???WEBに溢れている情報を漁るだけで、大抵の事は答え一歩手前まで調べられるだろ・・・
0844nobodyさん
2010/01/08(金) 10:58:43ID:???0845nobodyさん
2010/01/08(金) 11:57:09ID:???0846nobodyさん
2010/01/08(金) 12:11:21ID:???0847nobodyさん
2010/01/09(土) 17:17:11ID:???0848nobodyさん
2010/01/17(日) 19:36:43ID:???0849nobodyさん
2010/01/18(月) 03:14:17ID:???0850nobodyさん
2010/01/18(月) 11:28:14ID:???2枚以上のテンプレートをdisplay()する場合もあるし
0851nobodyさん
2010/01/18(月) 14:06:09ID:AGLkXiCO$smarty->assign('pref', array('01' => '北海道', '02' => '青森'));
{$pref.01}
で北海道が取れていたのだけど、
Smarty3Beta板では
{$pref['01']}
としないと取れなくなったのは仕様変更ですか?
0852nobodyさん
2010/01/18(月) 14:06:25ID:YiIR+7Mx$hoge = array(
array("name" => "aaaaa", "value" => 1),
array("name" => "bb", "value" => 2),
array("name" => "ccc", "value" => 3),
array("name" => "dddddd", "value" => 4)
);
$fuga = array(
array("value" => 2), array("value" => 4)
);
上記二つのような配列変数があります。
Smartyを使って、$hogeの内容をチェックボックスとして表示しようと思っています。
また、$fugaの内容と一致するvalueの部分を選択状態にしておきたいです。
(例)
□aaaaa ■bb □ccc
■dddddd
テンプレート側でどのように指定すれば、上記方法を実現できるでしょうか。
{foreach}を使おうと思ってるんですが・・・
0855nobodyさん
2010/01/18(月) 15:59:06ID:???foreachでやるなら普通にループさせて
要素を出すところでifで比較してchecked入れればいいんじゃない?
$fugaのデータ構造がそのまま使えなくてちょい面倒だけど
予め使いやすいように変換するか、更にループさせて全件比較すればいいかと
0856nobodyさん
2010/01/20(水) 22:11:47ID:q80CCbb+interface iSmarty { const MY_NAME = "foo"; }
class MySmarty extends Smarty implements iSmarty {/*設定*/}
{$smarty.const.MY_NAME}
値fooが表示されることを期待したのですが、MY_NAME(定数名)が表示されてしまいます。
マニュアルの{$smarty.const}の項を見ると、defineによる例が掲載されていて
確かにdefineで定義されていれば正しく値が表示されます。
バージョン2.1なのでちょっと古いのかなとも思うんですが、
php5のコードを追加するのは無理でしょうか。
0857856
2010/01/20(水) 23:35:47ID:???拡張も考えてみたのですが、もとがphp4ですから、こちらのPHP環境と合わせて考えると
サブクラスで定義した"クラス定数"をテンプレートから呼び出すことは
おそらく無理と判断しましたm(_ _)m
確かなことは言えませんが、クラスを変数で参照できるphp5.3以降でなら
プラグイン等で機能追加できるような気がします。
0858nobodyさん
2010/01/21(木) 04:40:11ID:???マニュアルの例はもうちょっと落ち着いて見直してみたほうがいいと思うけど
0859nobodyさん
2010/01/29(金) 18:46:34ID:???インサートプラグインが1ページに5、6個あるとかなり速度低下してきてしまう
0861859
2010/01/30(土) 10:34:45ID:???今はindex.tplに{insert name="hoge"}って書いて
[insert.hoge.php]
function smarty_insert_hoge($params, &$smarty) {
if(!$smarty->is_cached('plugin_hoge.tpl', "plugin|hoge")) {
DBからデータを取ってきてassign
}
return $smarty->fetch('plugin_hoge.tpl', "plugin|hoge");
}
DBに更新を加える時にclear_cacheという感じでやってるんですが、作り方としておかしいですか?
こういうインサートプラグインが増えてくると、is_cachedとfetchをその分しなきゃいけないんで遅くなってると思うんですが
smarty3だと改善されてるんでしょうか?
0862nobodyさん
2010/01/30(土) 11:59:30ID:???0863nobodyさん
2010/01/30(土) 12:29:50ID:???http://www.smarty.net/manual/ja/caching.cacheable.php
0864nobodyさん
2010/01/30(土) 14:12:57ID:???0866nobodyさん
2010/01/30(土) 15:09:07ID:???方法がよく分からない。
結局require_once "Smarty.class.php"しなきゃいけないんだよね?
意味分かる人教えてください
Smartyの読み込みコスト(時間)を削減する
ttp://code.xenophy.com/?p=73
0867nobodyさん
2010/01/30(土) 16:02:16ID:???効果も0.01秒だし
0868nobodyさん
2010/01/30(土) 16:56:45ID:???0869nobodyさん
2010/01/30(土) 16:57:37ID:???0870nobodyさん
2010/01/30(土) 17:23:46ID:???0871nobodyさん
2010/01/30(土) 17:31:09ID:???0872nobodyさん
2010/01/30(土) 18:09:30ID:???うちのサイトだと0.01秒早くなったら速度2倍だぜ
0873nobodyさん
2010/01/30(土) 18:11:35ID:???0875nobodyさん
2010/01/31(日) 16:37:31ID:tjv1ZgGAコンパイルエラーになりますが、たまにパーミッション設定を忘れたりして
こういう現状が度々あります。
忘れず確認すれば良い事ですが、なにか効率の良い方法はないでしょうか?
0876nobodyさん
2010/01/31(日) 16:53:46ID:???0877nobodyさん
2010/01/31(日) 17:59:24ID:tjv1ZgGA・コンパイル用のディレクトリがない場合、自動的に作成
と言うぐらいしか思いつきません
後者はis_dirでチェックすればいいと思うのですが、前者は方法自体わかりません・・・
0880nobodyさん
2010/02/02(火) 14:53:16ID:???0881nobodyさん
2010/02/02(火) 14:54:00ID:???0882nobodyさん
2010/02/02(火) 16:28:53ID:???0884nobodyさん
2010/02/03(水) 01:26:14ID:???PHPっぽく数学処理出来るのはいいよね。Smarty3。
開発に時間かけ過ぎてて、既に腐り始めている気がするけど。
extend欲しいな。
0885nobodyさん
2010/02/05(金) 12:00:27ID:1wZyvV1Qそういうのは最新版では治ってるの?
0886nobodyさん
2010/02/05(金) 16:09:07ID:???0887nobodyさん
2010/02/05(金) 18:17:12ID:???0888nobodyさん
2010/02/06(土) 16:55:05ID:???じゃ、nodefaultsにすりゃいいかというと、フォームのユーザが追加できるようにしている場合、
デフォルトの値(フォームのセレクトとか)にエスケープしたい文字があると途端に無理が出る
結局ロジック側でh()するしかなくなる
0889nobodyさん
2010/02/09(火) 13:31:36ID:Af+mgrun"Content-Type: image/jpeg"的な意味で。
0890nobodyさん
2010/02/10(水) 09:26:09ID:???0893nobodyさん
2010/02/12(金) 21:11:24ID:???displayやfetchしてる所でget_file_contentするだけだろ
しょーもな
0894nobodyさん
2010/02/12(金) 21:12:15ID:???0895nobodyさん
2010/02/17(水) 16:31:45ID:???確かにSmartyが有用なケースが思いつかない。
0896nobodyさん
2010/02/20(土) 12:34:03ID:???0897nobodyさん
2010/02/20(土) 12:44:55ID:???0898nobodyさん
2010/02/20(土) 17:16:25ID:0jUjLrgq変数に格納されたテンプレートを使うために
変数用のリソースプラグインを使って試行錯誤してるのですが
相談させてください。
このリソースプラグインに変数(テンプレートの内容)を渡す方法ですが
2つ思いつきました。
1つは
$hoge = "ここにテンプレートの内容";
$smarty->fetch("var:hoge");
のように変数名を渡して
プラグイン側で グローバル変数の$hogeの内容を取得。
しかしグローバル変数を使うというのがちょっと気になります。
もう1つの案は
$smarty->fetch("var:{$hoge}");
としてテンプレートの内容自体を渡す方法。
しかしこれだと長い名前の中間ファイル(template_cにできるファイル)
が作られてなんだか気持ちが悪いです。
毎回コンパイルでいいので中間ファイルは作られないほうがいいのですが
それもできない感じ。
みなさんはどうしてますか?
0899nobodyさん
2010/02/20(土) 22:01:34ID:???グローバル変数じゃなくてSmartyにassignされた変数を見るようにすればいいんじゃねーの?
0900898
2010/02/24(水) 09:57:22ID:???規制でかけなかった・・・
結局Smartyを拡張してプロパティを追加したら
プラグイン側で普通に見れました
>>899
ありがとうございます
なるほど、それは気づきませんでした
そのほうが手軽ですね
0901nobodyさん
2010/03/03(水) 01:14:47ID:???フレームワークをやったことなかったけど、比較的わかり易い。
0902nobodyさん
2010/03/03(水) 16:18:29ID:???http://www.kuwata-lab.com/presen/LL2007LT.pdf
14-15ページを見た感じだと制御はPHPそのままで
PHPタグ外部分はわざわざechoするのか・・・
0903nobodyさん
2010/03/04(木) 15:15:33ID:jG8+9EsN0904nobodyさん
2010/03/05(金) 09:36:42ID:???0905nobodyさん
2010/03/06(土) 00:22:27ID:3cIJcZyyこんな風に
$smarty->register_outputfilter("filterSjis");
function filterSjis($buff, &$smarty) {
return mb_convert_encoding($buff,"SJIS-win","UTF-8");
}
ブラウザで表示させると頭に「?」が入ってるんだけどこれはなぜでしょうか?
Smarty 2.6.26 PHP 5.3.2 です
0906nobodyさん
2010/03/06(土) 01:54:29ID:???0907nobodyさん
2010/03/06(土) 08:38:23ID:???その通りでした
0908nobodyさん
2010/03/06(土) 10:16:09ID:???0909nobodyさん
2010/03/06(土) 11:56:50ID:???普段はGAEでjavaなんだよ
これあげるからシネとかいわないで
http://mix-tube.appspot.com/
0910nobodyさん
2010/03/06(土) 12:20:22ID:???0911nobodyさん
2010/03/06(土) 13:54:43ID:???0912nobodyさん
2010/03/07(日) 07:30:25ID:???0913nobodyさん
2010/03/11(木) 09:30:07ID:???cache_lifetimeって以下の仕様じゃないんだね
10秒に設定→10秒経ってるキャッシュファイルは全て削除
0914nobodyさん
2010/03/11(木) 17:23:06ID:TZPJnNmb0915nobodyさん
2010/03/12(金) 13:20:51ID:???どの段階でclear_all_cacheするの?
0917nobodyさん
2010/03/12(金) 17:14:35ID:???再生成(上書き)されると思ってる。
つまり、要求されなきゃそのまま放っておかれる(わざわざ消さない)と。
0918nobodyさん
2010/03/12(金) 21:49:30ID:???0920nobodyさん
2010/03/13(土) 13:02:36ID:???0921nobodyさん
2010/03/13(土) 15:04:04ID:???0922nobodyさん
2010/03/13(土) 16:11:14ID:???0が毎回作成
CMSみたいに管理画面から更新するなら、
そのタイミングで必要な分だけキャッシュを削除すればいいしね
0923nobodyさん
2010/03/13(土) 16:11:51ID:???○キャッシュを使い続ける
でした
0924nobodyさん
2010/03/19(金) 17:17:56ID:KC5byG0jコンパイルしたときの中間ファイル(templates_cにできるやつ)
を作らないようにはできないでしょうか?
メモリ上で生成みたいな。
0925nobodyさん
2010/03/19(金) 17:23:37ID:???私も気になります
どなたかご教示お願い致します
0926nobodyさん
2010/03/19(金) 18:34:41ID:???Smartyテンプレートに変数を反映できるのに。
0927nobodyさん
2010/03/19(金) 19:03:47ID:???これをforの代わりに使うのか
0929nobodyさん
2010/03/19(金) 20:39:12ID:???0930nobodyさん
2010/03/20(土) 13:06:36ID:???コンパイルのときのファイル名が長すぎるってエラーになったぞ?
どうしてんの?
ファイル名固定にすると同時アクセスでやばそうな気がするし
0931nobodyさん
2010/03/23(火) 11:45:21ID:???0932nobodyさん
2010/03/24(水) 02:39:29ID:???これの意味がわからん・・・
0933nobodyさん
2010/03/24(水) 10:07:49ID:???0934nobodyさん
2010/03/24(水) 12:08:34ID:???0935nobodyさん
2010/03/24(水) 13:29:48ID:???0936nobodyさん
2010/03/24(水) 14:41:59ID:9Owlir6zdefault_modifiersの挙動がおかしいっす。
出力するものすべてにescapeをかけたいが、配列があるとうまくいかないようです。
あとdebugも同時使用不可。
いじくって直したいが、どこをどういじくるべきですか?
0937nobodyさん
2010/03/24(水) 15:22:58ID:???このスレを default_modifiers で検索するくらいはしたほうがいいと思うぞ・・・
0939nobodyさん
2010/03/26(金) 10:19:43ID:LJ/oTT1k{if $hoge == 0}
{assign var="var" value="a.b"}
{else}
{assign var="var" value="a}
{/if}
こんな風に。
{foreach from=$c[$var] item=item}
とすると、elseの場合は上手くいくんだけど、$hoge == 0の時にうまくいかない。
もう一個階層があるのをどうにかしないといけないと思う。
どうしたら良いか誰かご教授願えますか。
0940939
2010/03/26(金) 11:42:31ID:LJ/oTT1k0941nobodyさん
2010/03/27(土) 04:53:37ID:???{assign var="var" value=$c.a.b}
{else}
{assign var="var" value=$c.a}
{/if}
{foreach from=$var item=item}
じゃだめなのかい。
0942nobodyさん
2010/03/27(土) 18:31:55ID:???どれだけ時代遅れだよ。
0943nobodyさん
2010/03/27(土) 18:53:46ID:???0945nobodyさん
2010/03/27(土) 20:27:45ID:???多分、Smartyすら理解できなくてファビョっちゃったんだろうな。
0947nobodyさん
2010/03/27(土) 20:45:23ID:???PHP自体がテンプレートになってるんだから
PHPそのまま使うに決まってんだろ。
0949nobodyさん
2010/03/27(土) 20:46:54ID:uuG3/ncY947 名前:nobodyさん[sage] 投稿日:2010/03/27(土) 20:45:23 ID:???
お薦め?本物のバカなのかこいつはw
PHP自体がテンプレートになってるんだから
PHPそのまま使うに決まってんだろ。
0951nobodyさん
2010/03/27(土) 22:16:56ID:???PHP自体がテンプレートww
下手したらMVC分けすれしてねーんじゃね?w
0952nobodyさん
2010/03/27(土) 22:33:37ID:uuG3/ncY0953nobodyさん
2010/03/27(土) 22:43:47ID:???Smarty信者はPHPを知らない半可通が多いから面白いね。
あと、Smarty信者はMVC理解してないだろw
そもそもSmartyってぜんぜんMVCじゃないじゃん。
反論あるならSmartyにおけるMVCというものを解説してみwwww
0954nobodyさん
2010/03/27(土) 22:47:39ID:???テンプレート編集権限も与えたくないが
0955nobodyさん
2010/03/27(土) 22:50:44ID:???MとかCは別途用意してください
0956nobodyさん
2010/03/27(土) 22:50:54ID:???0957nobodyさん
2010/03/27(土) 23:01:27ID:???・PHPはテンプレートエンジンではない
・PHPではMVCできないが、SmartyではMVCできる
・SmartyはVしか出来ないので、MとCは別途用意する
・変なコピペでPHPユーザーを馬鹿にして悦に浸るガキの集団である
SmartyがPHPで書かれてるって知ってた?w
0958nobodyさん
2010/03/27(土) 23:15:56ID:???0959nobodyさん
2010/03/28(日) 00:12:24ID:???テンプレートエンジンを使うのは分かる。
が、PHPはそれ自身がテンプレートの機能を持っているので、
Smartyがとっても阿呆に思える。
CakePHPやsymfonyなどのフレームワークのビュー層は
テンプレートエンジンを使わずに
生PHPを使うような前提になっている。
(当たり前のことだよね)
ただ、PHPのテンプレートとしての機能は
非常に貧弱なのでSmartyのようなアホライブラリが出てきてしまったのも
しょうがないとは思うがな。
PHPにもJavaの標準ビュー層であるJSPのように
もうちょっとマシな機能が揃っていれば良かったのにね。
0960959
2010/03/28(日) 00:23:05ID:???そこら辺のことがまったく分かっていないので
今後まともな技術者になることは有り得ないと思うね。
ビュー層の話なんか本当に底辺の話なので
本当は雑魚共と議論なんかしたくもないんだw
関係無いけどこいつらDIとかORMとかのロジック層、DAO層とかの
アプリケーションの本質的な部分の技術をちゃんと理解してるんだろうか?
ムリカナァw
0962nobodyさん
2010/03/28(日) 00:54:30ID:???情けないなぁ。反論しろよ。まるで俺がいじめてるみたいじゃないか。
どうしようもないね。
何故自分がSmartyを使ってるのかも理解してないのか?
ただ「これいいらしいよ」って人に言われて使ってるだけなんだろうな。
だから反論しようにも出来ない。信念とかポリシーとか無いから。
スレタイに「隔離」って付いてる意味が分かったよ。
0963nobodyさん
2010/03/28(日) 01:13:19ID:???煽っている最中すんません。
自分はホント初心者なんですけど、
ソースが見やすくなる、っていう理由だけで使うのはダメですか?
0965nobodyさん
2010/03/28(日) 01:50:45ID:???まだまだ廃れてなかったってことか
0966nobodyさん
2010/03/28(日) 04:29:49ID:???複数の人間で作るプロダクトだと大抵デザインとプログラムが分かれる
デザイナーに直接書いてもらえる可能性が高い
データ生成とHTML生成で分離するから問題が起きたときに切り分けしやすい
エスケープ処理などを一括で行えるから楽
何より言う様に構造が把握しやすい=ソースが見やすい
0967nobodyさん
2010/03/28(日) 06:00:49ID:???http://www.smarty.net/manual/ja/what.is.smarty.php
PHPがテンプレートエンジンとして使えるからSmarty糞とか言ってる低脳共よ…
美しくロジックを切り分けるためのライブラリでしかない事に気がつけや。
0970nobodyさん
2010/03/28(日) 17:03:36ID:???ソースが多少きれいになるとかいう妄想にとりつかれて
それ自身がテンプレートエンジンであるPHPから
わざわざテンプレートエンジンを使って表示するとか
これほど滑稽なことはない。
>>966
>複数の人間で作るプロダクトだと大抵デザインとプログラムが分かれる
>デザイナーに直接書いてもらえる可能性が高い
>データ生成とHTML生成で分離するから問題が起きたときに切り分けしやすい
妄想も大概にしとけや。
君、本当にWeb制作の仕事したことあるの?
俺は今まで色々な現場で色々な言語でWebの仕事をしてきたが、
デザイナーが直接ビュー層をいじることなんてありえない。
デザイナーが作ったHTMLをビューに変換するのはプログラマーの仕事。
>エスケープ処理などを一括で行えるから楽
なんのエスケープ処理か知らんが、
フレームワーク使ってればFilterとか色々とあるんだから
それでやればいいじゃん。
>何より言う様に構造が把握しやすい=ソースが見やすい
Smartyのコードが入ったHTMLが見やすい?
妄想にとりつかれてんな。
頭冷やしてもう一度よーく見てみろ。
生PHPで書かれたHTMLと比べてそんなに変わるか?
0971970
2010/03/28(日) 17:09:48ID:???PHPのテンプレートとしての機能は非常に貧弱なので
Smartyのようなテンプレートエンジンが出現しちゃうのも
しょうが無いとは思ってる。
こればっかりは言ってもしょうが無いんだけど、
PHPにJSP2.0相当の機能があれば
こんなことは起こらなかった。
Smarty使ってるお前らも是非JSP2.0について
少しは知ってみてくれ。
0972nobodyさん
2010/03/28(日) 17:11:20ID:???| ノ\ ヽ |
/ ●゛ ● | |
| ∪ ( _●_) ミ j
彡、 |∪| | J
/ ∩ノ ⊃ ヽ
( \ / _ノ | |
.\ “ /__| |
\ /___ /
0973nobodyさん
2010/03/28(日) 17:18:54ID:???>生PHPで書かれたHTMLと比べてそんなに変わるか?
ぜんぜん違うね
Smartyみたいにロジックとビューが分離できてないコードがいかに多いことか
一定のルールを作って自由な書き方をさせないところに意味があるんだよ
それぞれの開発が決めたオナニーなルールで仕様書やソース追うより、
Smarty使ってるって書いてあるだけでだいたいのルールの想像がつく
webアプリの仕事をいろいろやってきてこんなことも気づかないなんて
アホすぎる
0974nobodyさん
2010/03/28(日) 17:22:48ID:???言いたいことが逆になった
Smartyみたいにロジックとビューが分離できてるコードがいかに少ないことか
0975nobodyさん
2010/03/28(日) 19:18:58ID:???>Smartyみたいにロジックとビューが分離できてるコードがいかに少ないことか
お前はSmartyを使えばビューにロジックを混入させないことができるのか?
すげーな。分岐の処理もループの処理も記述せずにビューを書き上げることができるのか?
妄想ぬかすなカスが。
>一定のルールを作って自由な書き方をさせないところに意味があるんだよ
>それぞれの開発が決めたオナニーなルールで仕様書やソース追うより、
>Smarty使ってるって書いてあるだけでだいたいのルールの想像がつく
Smartyが決めたオナニールールにしたがってると
Smartyの仕様を知らない人はソースが読めないよねぇ。
そんなことも気づかないなんてアホ過ぎるw
0977nobodyさん
2010/03/28(日) 19:34:29ID:???>お前はSmartyを使えばビューにロジックを混入させないことができるのか?
デザインを構成するためのループや分岐処理とロジックを混同してないかな?
>Smartyが決めたオナニールールにしたがってると
>Smartyの仕様を知らない人はソースが読めないよねぇ。
その為の分離ですよ〜
0978nobodyさん
2010/03/28(日) 19:40:52ID:???>すげーな。分岐の処理もループの処理も記述せずにビューを書き上げることができるのか?
これはないわ
0979nobodyさん
2010/03/28(日) 21:00:02ID:???壊れてるのはお前のオ・ツ・ム
>>977
>デザインを構成するためのループや分岐処理とロジックを混同してないかな?
混同してねーよ。
生PHPでデザインとロジックの分離が出来ないとか訳の分からん言ってるから
そっちが混同してると思ったんだよ。
>その為の分離ですよ〜
意味不明
0980nobodyさん
2010/03/28(日) 22:14:41ID:NiX4hAxZ負け犬の遠吠えさらし上げ!
0981nobodyさん
2010/03/28(日) 23:02:03ID:???フレームワークは使いこなしてるけどな。
逆にSmarty使ってますなんて言ってると
あぁレベル低い人なんだなって思われるぞ?
あと何をさらし上げてんのか知らんけど文章から
幼稚さ加減がただよってんな。
0982nobodyさん
2010/03/28(日) 23:06:36ID:???0983nobodyさん
2010/03/28(日) 23:32:42ID:???>生PHPでデザインとロジックの分離が出来ないとか訳の分からん言ってるから
>そっちが混同してると思ったんだよ。
うわ、そんな馬鹿が居るんだ!
時間の無駄なのでそんなアホに付き合うのは止めた方が良いかと
>意味不明
ごめん、はしょりすぎました。
逆に、Smartyの仕様を知ってればテンプレートが書けるんですよ。
PHP仕様を知るよりSmartyを理解する方がはるかに楽です。
ぶっちゃけ「こう書けばこの値が表示されるから入れといて」で済みます。
プログラム判らない人にSQLサーバーからどうこうして、HTTP通信してあーだこーだとか、説明してられないです。
何度も書かれてますが、Smartyの利点は「影響範囲が限定される」に尽きると思います。
だから、良く判らない人に作業を振れる
だから、一年後の自分が見てもすぐに把握できる
0984nobodyさん
2010/03/28(日) 23:40:33ID:NiX4hAxZコテハンつけろ市ね
0985nobodyさん
2010/03/28(日) 23:52:53ID:???Smartyってテンプレートフレームワークとしてはすべてが中途半端なんだよね。
記法も制約も機能もパフォーマンスもMVCも全部中途半端。
デザイナーに適切な権限と制約を与えるには多くのカスタマイズをしなくちゃいけないし、
それをすると「Smartyを使ってる人同士ならソースが読める」ということも無くなる。
命令の書式ひとつ取ってもポリシーが無い。あるとしたらパイプくらいか?
でも、パイプにも統一感が無いし、テンプレートエンジンでパイプってどうなのよ?
PHPでifもforeachも書けるし、short_open_tagという優れた記法もあった。
何よりPHPの知識があれば学習コストが少ないし、関数も素直に呼び出せる。
JSPもASPも同じだよね。標準的な言語環境をすべて敵にまわして、
「デザインとロジックの分離が出来るのはSmartyだけ!!」と主張してるのだとしたら、恐れ入るわ。
0986nobodyさん
2010/03/28(日) 23:57:34ID:???0987985
2010/03/29(月) 00:06:20ID:???パフォーマンスが要求されずデザイナが学習済みなら使えるケースもあるのだろうね。
でも大抵のデザイナが完璧なtplをよこしてこなかったので結局プログラマが修正していた。
そのうちフレームワーク全盛期になったら、もっと高度なキャッシュとヘルパーが手に入った。
Smarty pluginをしこしこ作らなくても、よく使う機能はすべて揃うようになった。
もちろんMVCフレームワークだから「デザインとロジックの分離」なんてお題目は当然クリアしている。
Smartyのノウハウは、今の時代に引き継げるものは何一つ無い。
文法的な利便性と美しさはJavaのTaglibsの方が上だしね。
新卒の子にSmarty教えるくらいならEL式とTaglibsを教えたらいいじゃないかと思う。
さもなくば、PHPそのものの初歩を教えたほうが、ずっと本人のためになる。
今でもちょくちょくSmartyが使われているシステムを見かける。大抵はメンテ不能の糞システムだ。
冗談なのか無知なのか知らないけど、Smartyユーザーがフレームワークユーザーを見下しているのを見ると、
こういう奴らがコピペだらけの糞システムを作ってるのかと嫌気も差す。
このスレで「古い知識にしがみついてないで、新しいことを勉強したら?」という旨の書き込みを、
「Smartyってどうよ」みたいな話題になった際に何度か挙げたんだけど、このスレの人たちには残念ながら、
アプリケーションフレームワークとテンプレートフレームワークの違いがまったく理解できないんだよな。
そして、「SmartyでMVCが出来る」とか、わけのわからないことを言っちゃう。
もっとPHPでも真面目にテンプレートフレームワークの進化に取り組む人が増えればいいのにね。
> ぶっちゃけ「こう書けばこの値が表示されるから入れといて」で済みます。
こいつは問題の本質を理解してない。生PHPだって出来るじゃん、そんなこと。
意味を理解せずにコピペを要求しているのだとしたらお前のレベル自体が低いだけだよ。
0988nobodyさん
2010/03/29(月) 00:18:17ID:???「生PHPだって出来るじゃん」はないわ
生PHP触らせたくないのがまず一番の理由だから
不便なの承知で一枚噛ませてるんじゃねえの?
0989985
2010/03/29(月) 00:23:06ID:???> 生PHP触らせたくないのがまず一番の理由だから
本当に?
何のために?
そんなことをする意味ってあるの?
他のSmartyユーザも「生PHP触らせないためにSmartyを使わせている」の?
0990nobodyさん
2010/03/29(月) 00:33:45ID:???そんなこともわからずに今まで何の話してたんだ
0991985
2010/03/29(月) 01:08:57ID:???テンプレートフレームワークの根幹を否定するような発言に見えるがw
やりたいことって「生PHPを触らせたくない相手」が「HTMLだけ触ってればいい」んだよね。
あまつさえ「プログラムを埋め込みたい部分」は「コピペさせる」んだよね。
それってstr_replaceで済む話だよね・・・。
全くポリシーも判断力も無い人相手に改善を求めても、そりゃ無駄だわな。
よくこんなレベルでMVCなんて単語が出てきたな。そっちのほうが驚きだわ。
0992nobodyさん
2010/03/29(月) 01:26:24ID:???重くて使ってられないよ
0994nobodyさん
2010/03/29(月) 02:14:40ID:???なにその抽象的な質問?
Smartyとか使ってるからアホになるんだよ。
>>983
>>988
デザイナーにテンプレートを書かせんなよ。
上でも書いたけどビュー層を書くのはプログラマーの仕事だ。
デザイナーはテンプレートの元となるHTMLを書くのが仕事なの。
お前ら本当はWebのシステム開発したことねーだろ?
>>992
俺は>>985じゃないけど、symfonyを使うのは中規模開発以上の場合だ。
重さと開発効率のトレードオフをクリア出来る場合に使えばいい。
君みたいな小さな仕事しかしないような人には無縁。
0995nobodyさん
2010/03/29(月) 02:23:57ID:???言っておくが、普通デザイナーはテンプレートは書きません。
デザイナーが書くのはテンプレートの元になるHTMLまで。
テンプレートを書くのはプログラマーなんだから
わざわざSmartyなんか使わなくても生PHPで書けるだろ?
デザイナーがテンプレートを書くことを前提で話してる奴がいるから
話がおかしくなる。分かった?
0996nobodyさん
2010/03/29(月) 02:40:32ID:???という切実な思いだけは伝わってきます
0997nobodyさん
2010/03/29(月) 02:42:02ID:9oVnqM8ghttp://www.symfony-project.org/jobeet/1_4/Doctrine/ja/06
Smartyのテンプレート
http://www.phppro.jp/school/smarty/vol5/4
どっちが見やすいかって聞いたら100人中99人が後者って言うと思うがな
しょせん道具なんだから好きなものを使えばいいし
あとJSPとかELとかtaglibとかそれ自体がテンプレートエンジンみたいなものだろ
馬鹿みたいに全く別の文法をどんどん追加するのやめてほしいわ
0998nobodyさん
2010/03/29(月) 03:35:36ID:???ちょっとPHPかじったデザイナがウンコみたいなPHPコードをテンプレートに書いてきたらどうするの?
安全だっていう保証出来ないでしょう。
俺はSmarty始めてから背も伸びたし、彼女も出来た。
心にゆとりが産まれたおかげか、部活と勉強の両立も出来た。
今度産まれてくる新しい家族にもSmartyを習得させようと思っているよ。
0999nobodyさん
2010/03/29(月) 03:38:41ID:???>>1000を他人に譲るゆとりも出来たみたいだ。
>>1000おめでとう。君もがんばってSmartyを学んでくれよな。
1000nobodyさん
2010/03/29(月) 03:45:03ID:???10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。