【PHP】Smarty【Template】

このエントリーをはてなブックマークに追加
1nobodyさん
このスレ、あってもいいんじゃないかと。

本家(英語)
http://smarty.php.net/

日本語マニュアルとか
http://sunset.freespace.jp/smarty/
2nobodyさん:03/03/10 01:01 ID:???
前に無かったっけ?
コンテンツとデザインの分離はしばらく物議かもしそうだし
解決策の1つとしてsmartyいいかもね。

ついでに2げっと。
3 ◆AngelH/kMI :03/03/10 12:35 ID:???
3げとずさー(AA略

最近使い始めたよ>Smarty
使いこなしていると言えるまでにどれだけかかるやら。

4 ◆AngelH/kMI :03/03/10 12:47 ID:???
メモ代わりに。
自分が引っかかったところ。

青マンモス本の時点ではループ指定(テンプレート側)するときに
{$loopname/variable}
だったのが
{$variable[loopname]}
になってる。
$varibableが連想配列なら
{$variable[loopname].arrayname}
こんな感じ。

5nobodyさん:03/03/11 00:06 ID:???
Smartyって、コンパイル(?)してキャッシュを作るみたいですが、
キャッシュを作らずにHTMLを吐き出す方法はないでしょうか?
6nobodyさん:03/03/11 17:04 ID:???
ついに作られたかsmartyスレ。歓迎。
7nobodyさん:03/03/11 17:06 ID:???
>>5
よくわからんが、コンパイルされたファイルとキャッシュされたファイルは別物だが。

キャッシュを作らずHTMLを作るとはどういうこと?
毎回コンパイルするようにしたいなら、設定変えればできるぞ。
8nobodyさん:03/03/11 17:07 ID:???
日本語のマニュアル
http://sunset.freespace.jp/smarty/

↑ここもマジで感謝!!
9nobodyさん:03/03/11 17:09 ID:???
有名なところだと、XOOPS2にsmartyが使われています。

XOOPS 日本の公式サイト
http://jp.xoops.org/
10nobodyさん:03/03/11 17:25 ID:???
誰かSmarty[スマテイ]の基本的な使い方を解説してくれ。簡単にな。
11nobodyさん:03/03/11 17:32 ID:???
>>10
まず、スマテイをスマーティーと発音する。
12nobodyさん:03/03/11 17:38 ID:???
日本語サイトにメリットとして

>より明確にphpのプレゼンテーションからアプリケーションの ロジックとコンテンツを分離して管理する事を容易にします。
>これはプログラマーとテンプレートデザイナーの役割が異なる 状況か、
>たいていの場合は同じ人間ではないのが最良だという事です。

こう書いてあったんだけど、つまり役割が同じ場合はこれ用なし?
13nobodyさん:03/03/11 17:52 ID:???
>>11
スマーティー  発音わかった。 
誰かSmarty[スマーティー]の基本的な使い方を解説してくれ。簡単にな。
14nobodyさん:03/03/11 17:59 ID:???
>>13
まず、スマーティーをスマーティと発音する。
15nobodyさん:03/03/11 18:23 ID:???
>>14
スマーティ♪ マギーシローっぽい。
16あぼーん:あぼーん
あぼーん
17 ◆AngelH/kMI :03/03/11 19:17 ID:???
メモ代わりにドキュメント書いてるんだけど
仕事忙しくてなかなか進まず。

すまんのぅ。
18nobodyさん:03/03/11 22:07 ID:???
>>13
ダウンロードしてQUICKINSTALLを読むべし!
19nobodyさん:03/03/12 01:12 ID:BE9nbHm+
これでフォームに自動的に値入力(Perl&RubyでいうFillInForm)
の機能があったらかなりイイのだが
も前らPHPではフォームに値付けるのどうされてますか?

PHP版HTML::Template
http://sourceforge.net/projects/phphtmltemplate/
20あぼーん:あぼーん
あぼーん
21nobodyさん:03/03/12 05:18 ID:???
おまえらなんでsmarty使ってる?
22 ◆AngelH/kMI :03/03/12 08:47 ID:???
>21
自分の場合はデザインとコードの分離のため。
HTMLを書く人間が別にいる場合、分離していないと
かなり面倒なことになる。

そのあたりの議論は
http://pc2.2ch.net/test/read.cgi/php/990953955/
こっちでかなりやっていた気がする。
23nobodyさん:03/03/12 11:09 ID:???
かっこよさそうだから。
2421:03/03/12 11:35 ID:???
>>22
そうそう、前そこのスレでsmartyスレ立てようって言ってたんだけど
あんまりユーザがいないようだから。
でもXOOPS2でsmarty採用したから使う人が増えるかもね。
25nobodyさん:03/03/12 16:12 ID:???
smartyは、テンプレートプログラミングみたいで、
デザイナーは、はたして使えるのか?と思うけど、
つか、HTMLテンプレートのほうが分かり易いのかな?と思ったり、
両方使った事ある人どう思う?
26あぼーん:あぼーん
あぼーん
27nobodyさん:03/03/12 17:11 ID:???
php自体がテンプレートみたいなもんじゃん。アホらしい。
28nobodyさん:03/03/12 17:31 ID:???
暇つぶしにCでCGIを書いてみたんだが、
perl,phpは楽だよな。>>27のいうことも分かる。
問題はデザイナーが単独でphpスクリプトを修正できるかというと
そこまで簡単じゃないってことだな。
プログラマ・デザイナの両方の負担の釣り合いが取れるところがsmartyなんじゃないの?
29nobodyさん:03/03/12 18:11 ID:???
>>28
MVCってのがある。

V(View)はMからデータを呼び出すだけで単独では通常計算を行わない。
と言うことになっている。

表示すべき項目を$dataと言うハッシュに詰め込んで、

「データは<? print($data["name"]);?>で表示させられるよ。」

とか言っちゃえば良いと。

デザイナがJavaScript位は出来るだろうと(Web制作の某スレではこれはデザイナの仕事ではないらしい。(藁)仮定すると
PHPの豊富な制御構造くらい使いこなせるだろう。

こうしてみるとその辺の下手なテンプレート機構より遙かに強力でしかも汎用的だ。


JSPと同じ思想でPHPを使っちゃおうというのが俺の言いたいこと。
30nobodyさん:03/03/12 21:31 ID:???
Templateの存在意義とか話すのはスレ違いだろ。
折角Smartyのスレたったんだし、Smartyの話しようや。
31nobodyさん:03/03/12 23:50 ID:???
Smartyだけは厳しいと。
32nobodyさん:03/03/13 00:42 ID:???
HTML::Templateならそのまま>>29の言うMだけ
をPerlやRubyにできるな。
HTML::Templateのがよくないか?

PHPでテンプレート使うの馬鹿らしいんだけど、テンプレート
前提でコーディングしとくと、渡す直前で値をダンプしてみれば
エラーの原因とか何やってるのかがすぐわかるのよ。
33nobodyさん:03/03/13 00:50 ID:???
たしかにPHPでテンプレートってどうなんだろう?
34nobodyさん:03/03/13 11:02 ID:???
誰かsmartyで携帯対応なサイト作ってる香具師いる?
35nobodyさん:03/03/13 11:10 ID:???
>>32
いや、だからVにテンプレートを採用するかPHPの特性を素直に使うかの違いよ。
両者ともデータチェックはMの最後なりCの最後なりでチェックできる。
36 ◆AngelH/kMI :03/03/13 13:30 ID:???
>34
微妙に。

>35
まあ、そうだねぇ。
結局は好みの問題。
既存のテンプレートエンジンが気に入らなければ
自分で作ってもいいし、
自分にあうのがあればそれを使えばいいだけ。

自分はループのネスト考えるのがだるくて
既存のものを使ってますが(苦笑
WYSIWYGなエディタでも表示崩れないやつが好き。


あとHTML_Template_ITバージョンアップしてるな。
37nobodyさん:03/03/13 13:31 ID:???
>>36
>WYSIWYGなエディタでも表示崩れないやつが好き。

ある?php始めてからもっぱらテキストエディタ派になっちゃいましたが。
38 ◆AngelH/kMI :03/03/13 13:44 ID:???
>37
川里氏/佐藤氏のPHP4テンプレートクラスライブラリ(改)は
割とそのあたり気を使って作られていたよ。
http://www.daiwakantei.co.jp/pc/tmpl2sa.html
Dreamweaverでは平気だった。

Smartyもうまく使えば大丈夫だと思う。
(というか、テンプレートファイルと画像を置く位置かな)

個人的には
http://sunset.freespace.jp/smarty/
ここにスクリーンショットでてるDreamweaverMXの
extensionに期待。
39山崎渉:03/03/13 16:56 ID:???
(^^)
40nobodyさん:03/03/15 10:11 ID:???
smartyの良さって、デザインとコードの分離もあるけどさ、
コンパイルされたファイルとキャッシュによる表示速度の速度の向上じゃない?
41nobodyさん:03/03/15 12:33 ID:???
>>40
>コンパイルされたファイル
結局は1行ごとにインタプリトされると思うよ。
42nobodyさん:03/03/15 23:39 ID:X1LKF8i0
話題ないね
43nobodyさん:03/03/16 01:17 ID:???
質問だがsmartyを使ってて中にperlのCGIを埋め込むことできる?

つまりブロックで言うとトップとレフトはsmartyのテンプレなんだけど、
真中のコンテンツの部分をperlのCGI(掲示板)を利用したいわけです。

cgiを呼び出せば、内容は表示できそうですが、POSTとかGETした時
内容を渡せるのか?とか難しそうです。

そんなことしてる香具師いる?
44nobodyさん:03/03/16 01:27 ID:???
そもそもsmartyはPHP標準?既にインストールされてるの?
45nobodyさん:03/03/16 19:59 ID:???
>>44
されてない。
もともとPHP自体がHTMLに埋め込んで使うものだから、
標準インストールする意味はあまり無さそうだと思う。
46nobodyさん:03/03/18 15:26 ID:???
smartyで携帯サイト作ってる奴いる?
47nobodyさん:03/03/21 05:00 ID:???
>>43
perlのCGI側でHTML::Templateとか使ったほうがラクじゃないの?
48nobodyさん:03/03/21 12:19 ID:???
Smarty使えない鯖なんですが
ほかに標準のテンプレート機能ってあるのしょうか?
49nobodyさん:03/03/21 14:56 ID:???
>>48
10スレ前の過去ログも読めないのか…
50nobodyさん:03/03/21 19:50 ID:02OewLFo
>>48
Smarty使えない鯖ってどんな鯖?
51nobodyさん:03/03/21 19:52 ID:???
>>48
>ほかに標準のテンプレート機能ってあるのしょうか?

PHP
52nobodyさん:03/03/21 20:08 ID:???
この中に数人テンプレートの意味がわかってない人がいますね。(w
53nobodyさん:03/03/21 20:30 ID:???
>>50
PHPが使えないサーバーか、quotaが1MBぐらいのサーバー。
54nobodyさん:03/03/21 20:51 ID:???
テンプレートの本質を理解していない>>52

という印象を受けた。
55nobodyさん:03/03/21 21:07 ID:???
>>54
本質を聞きたいといってみる。(w
56nobodyさん:03/03/21 21:46 ID:???
>>50
WebARENAだがなにか?
57 ◆AngelH/kMI :03/03/21 23:50 ID:???
んー。
safemodeがonになっていても使えるけど>Smarty
後使えない可能性ってなんだろう。
58 ◆AngelH/kMI :03/03/21 23:51 ID:???
というか基本的なことだけど。
「使えない」という状態がいったいどういう状態なのかを
言ってくれないと、アドバイスのしようもない。
59nobodyさん:03/03/21 23:56 ID:???
>>58
冷静に考えて、エラーメッセージやエラーの分析を怠る奴がモジュールの導入をミスなくこなしている
可能性は低いと思う。
60nobodyさん:03/03/23 16:35 ID:GUMN7n0B
使えないのはSmartyじゃなくて、そいつの頭。
61nobodyさん:03/03/24 00:18 ID:???
Smartyってつかったことないが、なんかテンプレートというより
別の構文の言語ってかんじに見える。
おれは patTemplateの方が純粋にテンプレートっぽくって好き。
http://www.php-j.com/tutorial/php/template.php
62 ◆AngelH/kMI :03/03/24 08:18 ID:???
>61
出来ることが多いから自分も最初は
「何となくめんどくせー」
と思って使ってなかったんだけど、
実際に使ってみるとそうでもないよ。
必要ない機能は使わなければいいし。

header、footer、ループ部分を別にするテンプレートは
WYSIWYGなエディタ使えないので個人的にはあまり…
という感じ。

・Smarty
・PHP4 テンプレートクラスライブラリ改(tmpl2.class.php)
・HTML::Template_IT (PEAR)
自分が使ってみて使いやすかったのはこのあたり。
Smartyで注意することはSJISのテンプレートを使うときに
プリフィルタ/ポストフィルタを使って文字エンコードを変えないと
テンプレート内に「宮」とか書かれてるとエラーになってしまうあたり。
ttp://ns1.php.gr.jp/pipermail/php-users/2003-February/013595.html
このあたり参考に。
63nobodyさん:03/03/24 16:20 ID:???
Smarty使ってみた感想は多機能なので面倒です。
おまけに、smarty関連のディレクトリでいっぱいになって、
漏れのような小物野郎には大袈裟すぎと気付きました。
大規模システムには使い道があるんだと思うけど、

誰か、気軽に同封できるような、おすすめテンプレート情報もとむ。
64nobodyさん:03/03/24 16:21 ID:F52n5d8W
アホで申し訳ないのだが
Smartyの利用条件とかってあるの?
65nobodyさん:03/03/24 16:37 ID:???
売るの? 売っちゃダメだよ。
66nobodyさん:03/03/24 17:39 ID:???
食べるのはOK?
67nobodyさん:03/03/24 17:52 ID:bvsiZdot
Smartyを利用してるアプリで、売られてるものも多数ある。
ライセンスはGNU LGPLなんでそれさえ守っておけばいい。
68あぼーん:あぼーん
あぼーん
69nobodyさん:03/03/24 17:59 ID:???
Smartyを売っちゃダメだよ。
70あぼーん:あぼーん
あぼーん
71nobodyさん:03/03/24 19:30 ID:???
>>67,69
ありがとさんすー
72nobodyさん:03/03/25 12:43 ID:FOZw8qka
>>69
そうなの?
73nobodyさん:03/03/25 14:04 ID:CVcoKJbJ
smarty 使ってみたよ。
マニュアル翻訳された方、ありがとう&お疲れ様。

PHP自体がある程度テンプレート的な使い方が出来るので、
確かに小規模なプロジェクトでは導入コストに較べてメリットは少ないですね。
プラグインとか使って見たいけど、私も使う機会なさそうだな。

ところで、[php] ... [/php] タグの存在に戸惑っています。
テンプレートとロジックを一緒に管理する事ができますッテ…(汗
テンプレートをコンポーネント化するより、
そのテンプレートを呼び出すメソッドを実装して、
その中に初期化など共通する処理を書いた方がいいと思うのだけど…
どうなんでしょう? php とか php_include タグの評判は。
アイデアは確かにいいんですけど、これって別にSmarty使う必要ないですよね?PHPでは。
ロジックの分離という点に置いては、テンプレートには不要だと思う。

PHPにループ用のタグを導入してくれればいいのになぁ…。
74nobodyさん:03/03/25 14:30 ID:???
PHPでテンプレートとか言われるとジェネリックプログラミングを想像してよろしくない。

まぁ、形無し言語でそんなもん語っても仕方ないがしかし・・・。
75nobodyさん:03/03/25 16:24 ID:FOZw8qka
PHPという文脈でテンプレートと出てきたら、普通はジェネリックプログラミング
なんて浮かばないって。

PHP5の例外処理サポートが楽しみだ。
76 ◆AngelH/kMI :03/03/25 23:51 ID:???
強行日程な出張から帰還〜

>73
とりあえず、[php]タグは忘れてるよ(笑
デザイナーにも教えてない。
余計なことされて事故って後から自分が修正・・・とか嫌だし。

というか、自分はデザインとの分離さえ出来ればいいから
変数への代入とループさえ出来れば困らないんだけどね・・・。
77nobodyさん:03/03/26 00:11 ID:???
>>76
余計なことができるような設計にしてる方が問題な訳だけれどね。
78nobodyさん:03/03/26 05:55 ID:Zn78/v4/
>>77
一応、[php]タグは禁止する事もできるようになってる。
http://sunset.freespace.jp/smarty/SmartyManual_2-5-0RC1J_html/variable.security.html

うっかりセキュリティの脆弱を招かないためにも、
できれば$security = true、これ推奨。

Smartyはちょっと多機能になりすぎてる感があるね。
例えば最近、テンプレートからphpのオブジェクトのメソッドやらにアクセス出来る
機能が追加されたりしたけど、ロジックとデザインの分離が目的なのであれば、
本当は必要ないと思う。Smartyで何でもかんでもやろうとしすぎている。
せっかく他のテンプレートエンジンと比べて、キャッシュやカスタム関数による拡張性が
優れてるんだから、あんまり飛躍しすぎてヘンな事になってほしくないなぁ。
79nobodyさん:03/03/26 10:58 ID:???
>>78
あんたの言うビューとロジックの分離はロジックにビューのいくつかの処理をやらせると言うことでは?
80nobodyさん:03/03/26 16:43 ID:???
>>79
あんたデザインとロジック一人で全部やってるだろ?(w
81nobodyさん:03/03/26 17:17 ID:???
>>80
はいはい、勝てないからって話をそらさない。
 
8273:03/03/27 07:18 ID:illH7cXT
[php] タグは見なかったことにしよぉ ... *sight*

> できれば$security = true、これ推奨。
THX これ探していました!!
これで安心してSmarty導入出来そうです(感謝)

>テンプレートからphpのオブジェクトのメソッドやらにアクセス出来る
>機能が追加されたりしたけど、
テンプレートに渡すオブジェクトにはgetメソッドしか実装しない/実行できない様にすれば少しは安全になるかも。
例えば、getDateメソッドに日付の表示フォーマットを引数に指定する等、
テンプレート側で指定できるとちょっと便利かな、と思ったりして。
でも、余計な事が出来てしまうリスクが痛いよなぁ。

ちなみに、テンプレートからオブジェクトのメソッドを呼ぶにはどう記述すればいいんでしょうか?
ドキュメントに、プロパティへのアクセス方法は見つけたのだけど…、
versionが古いのかな。見つけられませんでした<2.3.1です
昨日 2.5.0 RC2 リリースされたみたいなので updateしておこぅ〜っと。

>>79
それって、コンポーネント化と逆の発想?それとも、
例えば、「メールアドレスがある場合、名前にリンクを張る」という処理を
処理してからテンプレートに送るのか、テンプレート側で処理するか、って事ですか?

>>79-81
論点が解からない…。77, 78 は、自分には「Smarty本体には、デザインとロジックの分離の利点を損なう実装を許すような
余計な拡張機能は必要ない」という風に聞こえるのですが、何か勘違いしてる?フォローお願いします。
83nobodyさん:03/03/29 15:15 ID:CQcFf7wk
73さん

Smartyで開発するときに注意したほうがいいこと(プログラマと
デザイナの取り決めなど)があったらお教え願えませんか?

(当方PHPは一週間の初心者ですが、今後社内のデザイナと
協力して社外向けWebプログラムを開発します)
8473:03/03/29 23:32 ID:5Ovapm1S
>>83
当方も、smartyは1週間の初心者です。
どちらかと言うと、教えてもらいたい側の人なのですが、
導入時に考えていた事を叩き台に書き出して見ます。
参考になればいいけど・・・。

まず、注意しないといけない事って、XSS問題とかですよね。
テンプレートに渡す値がエスケープされてるかどうか、
それとも、テンプレート側でエスケープするのか等。
セキュリティの問題の他にサイトのレイアウト崩壊とかも、
XSSで(重要度は違えど)起こり得るので、デザイナの方の理解を得て、
明確にしておいた方がいいとおもう。
セキュリティがデザイナさんの作るテンプレートに依存してしまう状況
というのは、ちょっと怖いので。

それと、情報の隠匿。社内のデザイナということなので、リスクは少ないと思いますが。
でも、不用意にオブジェクトをテンプレートに渡したりて、余計なところにアクセスされたりすると困るかも知れないので。
私も、>>76,>>78 に習って、
”デザイナーには教えない”,”設定で禁止する”と言う方針を見習おうかと思っています。

ところで、grep -E '{.+?}' *.tpl でテンプレート内の埋め込み文全部拾えるかな?
テンプレートの簡単なチェック・スクリプト作っておくと便利かも知れない。
実際の動作テストは、別に用意する必要あるだろうけど。
8573:03/03/29 23:34 ID:5Ovapm1S
以下、自己補足。

>>73 コンポーネントで管理すること自体は便利な場合もあるけど、
テンプレート内にコードを含めるのは、自分にとってはリスク。
どうしても必要な場合は、[php]タグより include_php を使お〜っと。
上級ユーザではないので、コードが混ざったテンプレートを保守出来る自信ない;;
それに、テンプレート導入の利点がなくなるし。

> テンプレートからオブジェクトのメソッドを呼ぶ
Document 15. Advanced Features -> Objects 内に見つけましたm(_ _
テンプレートから利用できるプロパティ/メソッドを制限できるみたいなので、
セキュリティ面での心配は杞憂だったみたいです。
86あぼーん:あぼーん
あぼーん
87nobodyさん:03/03/30 06:50 ID:7nc9kl8w
>>84, 85
ご意見ありがとう。

デザイナーにphpタグを教えると、
「私にプログラム組めっていうのかさぁ」
とか言われそう(^^;
コード保守上も、Simple is Best だと思いますから、
phpタグは使わないようにしたいと思います。
(というか、ふつう最初からphpタグ使おうなんて考えないでしょうね)

「XSS」という言葉が理解できません。教えてください。

それから、Smartyはコンパイル処理があるようですが、
漢字コードが含まれていても大丈夫なのでしょうか?
(SJIS、EUCともOK?)
88nobodyさん:03/03/30 10:11 ID:ho1IX9Y5
XSS クロスサイトスクリプティング、かな。
89nobodyさん:03/03/30 10:30 ID:???
横からスマソが、俺はCSS以外にXSSっていう書き方もあるって言う事は知らなかった。
クロス=Xなのね。
ひとつおりこうになれたYO
ありがd

       /■\
   ∧_∧ (;´Д` )
    (・ω・)丿 ッパ
.  ノ/  /
  ノ ̄ゝ
いっしょにおにぎりたべませんか?
90 ◆AngelH/kMI :03/03/30 10:33 ID:???
>>87
>それから、Smartyはコンパイル処理があるようですが、
>漢字コードが含まれていても大丈夫なのでしょうか?
>(SJIS、EUCともOK?)

>>62を参考に
91nobodyさん:03/03/31 13:53 ID:D0ex7lz/
>>89
CSSじゃCascading Style Sheetsと紛らわしいからね。
92nobodyさん:03/03/31 18:47 ID:???
今度からXSSにしよう。
93nobodyさん:03/03/31 18:48 ID:???
ごめんなさい。3つ上を見てなかった。
94nobodyさん:03/04/02 04:49 ID:???
漢字コードについては、
SJISの2バイト目に { や } が含まれることがある問題ですよね?
デリミタを、文字コードに依存しない他の文字に変更する。
文字コードに依存する部分は全て別のリソースにする。
等も、別の解決策として選択肢にいれておいてもいいのでわ。
95nobodyさん:03/04/03 18:46 ID:???
>>63 誰か、気軽に同封できるような、おすすめテンプレート情報もとむ。
http://hoover.ktplan.ne.jp/kaihatsu/php/index.php?type=top
これわかりやすくていいよ。
DW上でも埋め込めるし。
96nobodyさん:03/04/04 04:21 ID:CWbmmlFZ
テンプレートの中で他のテンプレートをインクルード
しています(ヘッダとフッタを入れている)。

すべての画面でデザインを統一しようとすると、どんな
小さな画面でもテンプレートにしてやらないと、ヘッダと
フッタが表示されません。
これでは非常に面倒なのですが、何かよい方法はない
でしょうか?
97nobodyさん:03/04/04 11:37 ID:???
>>96
テンプレートをメインスクリプトあたりから直接弄ろうとしているからいちいち面倒なんだよ。
viewクラスを作って、「ヘッダとフッタはいつもの奴、メインボディはこれで」って感じで渡して
やればいいんじゃない。

#説明ベタ&Smartyは使ってないので外しているかもしれんが
98nobodyさん:03/04/05 05:35 ID:WWynoIxP
>>97
あそっか。
Smartyクラスをextendsしたクラスをつくって
やればいいわけですね。

たいへん参考になりました。ありがとう!
99nobodyさん:03/04/09 02:13 ID:???
/www/index.tpl
/subdomain/index.tpl

とか別ディレクトリに同じ名前のテンプレートがある場合は、
どーすればよいの?

同じSmarty.class.php は使えないのかな?
100nobodyさん:03/04/10 15:06 ID:Gsybxm64
>>99
98と同じ回答でいけるよ。

Smartyクラスをextendsした自分のクラスのコンストラクタ
で、各ディレクトリを指定してやればよいと思うが。
101あぼーん:あぼーん
あぼーん
102nobodyさん:03/04/12 10:21 ID:1gFMXfRc
2.5.0 release age
103nobodyさん:03/04/13 03:48 ID:???
>>100
回答ありがとうなのだが、意味がわからんので勉強してきまつ
104山崎渉:03/04/17 12:05 ID:???
(^^)
105nobodyさん:03/04/20 21:11 ID:PaIMcwUL
同じ テンプレート名は許されないのか???

同じ名前のテンプレートを違うディレクトリに置いて使っていたのだが、
まったく意図しない動きになりびびった。
106nobodyさん:03/04/20 21:22 ID:???
>>105
結局どのように対処しましたか?

/public_html/www/index.php
/public_html/sub/index.php
/public_html/info/index.php

などサブドメインを作りたいんですけど、個別にインストールするのも
メンテ性が悪いですし…
107105:03/04/20 22:15 ID:???
ttp://smarty.php.net/manual/en/installing.smarty.extended.php
のようにラッパークラスを作ったり、

あとは、いちいち 

$smarty = new Smarty;
$smarty->compile_dir = "/path/to/somewhere";

のようにディレクトリをしていしたりとか。。。

でも、めんどくさい。

ていうか、同じテンプレート名が使えないってのは仕様なんですか?
最初バグかと思ったんですが。
108nobodyさん:03/04/23 01:25 ID:???
>>107
ここに書いてあった。

異なるディレクトリに置かれたテンプレートを使用する方法
http://sunset.freespace.jp/smarty/
109nobodyさん:03/04/23 01:29 ID:???
>>108
読んでみたがいまいちよくわからんかった。

結局
>display() の引数 compile_id, cache_id を利用する事で可能となる。
この場合のやり方は、どうするの?

>1つのSmartyを複数のプロジェクトで使用する場合は、display( PROJECT_TPL_DIR . 'index.tpl'); とかになるのかな?

??
どういうことなのでしょうか?
110nobodyさん:03/04/23 05:14 ID:/AFbvcV5
>>107-109
横からすみません。。。

アプリごとにラッパークラスを作って、その中で
$template_dirを指定すればいいと思いますが、
何か問題があるのですか?
111あぼーん:あぼーん
あぼーん
112nobodyさん:03/04/23 08:06 ID:???
ようするに人それぞれか?
113nobodyさん:03/04/27 07:29 ID:???
>>107-
俺の場合たいていこうしてる

display($template_file, $_SERVER[REQUEST_URI], $_SERVER[REQUEST_URI]);
114nobodyさん:03/05/02 19:49 ID:rrWLpWsV
今日からSmartyを触り始めたものです。設定について
ttp://sunset.freespace.jp/smarty/SmartyManual_2-5-0J_html/
の「基本的なインストール」をみながら設定しました。

上記に沿ってテスト用のファイルを作成して表示してみましたが
下記のようなエラーが出てしまって困っています。
Warning: Smarty error: unable to read template resource: "smarty_test.tpl" in /usr/local/lib/php/Smarty/Smarty.class.php on line 1042

Smarty.class.phpファイルの1042行目あたりは以下のとおりでした。
-------------------------------
function trigger_error($error_msg, $error_type = E_USER_WARNING)
{
trigger_error("Smarty error: $error_msg", $error_type);
}
-------------------------------
何が問題なのでしょうか。

環境:
 RedHat 7.3 Apache 1.3.27
 PHP 4.2.3 multibyte
 PHPlib 7.4-pre1 Smarty 2.5.0 Source
115114:03/05/02 19:53 ID:rrWLpWsV
続きです。
設定は以下のようにしました。

Smarty本体は以下のように格納しました。
/usr/local/lib/php/Smarty/Smarty.class.php
/usr/local/lib/php/Smarty/Smarty_Compiler.class.php
/usr/local/lib/php/Smarty/Config_File.class.php
/usr/local/lib/php/Smarty/debug.tpl
/usr/local/lib/php/Smarty/plugins/*.php

webサーバのドキュメントルートに以下のようにフォルダを作成し、chmod 770しました。
/usr/local/apache/htdocs/php/smarty/
/usr/local/apache/htdocs/php/templates/
/usr/local/apache/htdocs/php/templates_c/
/usr/local/apache/htdocs/php/cache/
/usr/local/apache/htdocs/php/configs/

php.iniの設定は下記のとおりです。
include_path = ".:/usr/local/apache/htdocs/phplib/php:/usr/local/lib/php/Smarty/"

ttp://sunset.freespace.jp/smarty/SmartyManual_2-5-0J_html/installing.smarty.basic.htmlExample
上記のサイトの「2-2. Smartyのインスタンスを作成する」のとおり
テストしてみましたがSmarty.class.php file could not be found という
エラーは出ませんでした。
116114:03/05/02 19:54 ID:rrWLpWsV
更に続きです...

テスト用に下記のようにファイルを設定しました。
templatesフォルダ内に「smarty_test.tpl」
----------------
{* Smarty *}
<html><body>
Hello, {$name}!
</body></html>
----------------

smartyフォルダ内に「smarty_test.php」
----------------
<?php
require('Smarty.class.php');
$smarty = new Smarty;
$smarty->template_dir = '/usr/local/apahce/htdocs/php/templates/';
$smarty->compile_dir = '/usr/local/apahce/htdocs/php/templates_c/';
$smarty->config_dir = '/usr/local/apahce/htdocs/php/configs/';
$smarty->cache_dir = '/usr/local/apahce/htdocs/php/cache/';
$smarty->assign('name','Ned');
$smarty->display('smarty_test.tpl');
?>
----------------
もー何が何やら( ´д`;)
ナガクテスマソ...
117nobodyさん:03/05/03 13:57 ID:???
debug onにしてやってみたら?

多分PATHが間違ってるだけか、パーミッションの問題のような気がするけど。
ファイルのオーナーはどうなってる?
あと、セーフモードはon?off?
118114:03/05/03 17:06 ID:ucISI8En
>117 レスThanks!
debug on ってphp.iniの設定でつか?
セーフモードはoffです。
パーミッションとファイルのオーナーは普通に
アップロードダウンロードできるんで問題なさそうな気がしますが
そういう問題じゃないでしょうか?

エラーの内容がSmarty.class.phpが違ってるって事だったんですが
やっぱりパスのせいなんでしょうか?
パス違ってたら最初から読み込めないんじゃないかと思ったんですがいかがでしょう?
119あぼーん:あぼーん
あぼーん
120nobodyさん:03/05/04 12:42 ID:???
>>118
debug onはSmartyの。今はあんま関係ないかも。

パーミッションは、UL,DL関係ない。
apacheがtemplates_c とか cache に書き込めるかが重要。 だけど、これも違うエラーがでるから関係ないかな。

Warning: Smarty error: unable to read template resource: "smarty_test.tpl" in /usr/local/lib/php/Smarty/Smarty.class.php on line 1042
をそのまま訳すとテンプレートのリソースが読めん!!ってことだから、

templates/smarty_test.tpl が読めないんでしょ?

だから、smarty_test.tpl のパーミッションか、
その上位ディレクトリのバーミッションじゃない?
121114:03/05/04 21:05 ID:PMPOUjrA
> 118 レスThanks!!

> templates/smarty_test.tpl が読めないんでしょ?

なるほど!Smarty.class.phpが違ってるって事じゃないんですな。

> だから、smarty_test.tpl のパーミッションか、
> その上位ディレクトリのバーミッションじゃない?

templates/ あたりは全部115に書いたとおり770にしました。
青マンモス本には700に書いてあったんで、そっちも試したけど同じでした。

問題はsmarty_test.tplファイルのパーミッション。
このファイルは、WindowsXPで作成して、FFFTPで該当ディレクトリにアップしました。

その後は、そのままで全くいじってないんだけど、このままだと
もしかして書き込みができないから駄目とか??
.tplファイルはアップロードしたら権限を修正するべき物でしょうか?
122あぼーん:あぼーん
あぼーん
123nobodyさん:03/05/05 01:21 ID:???
>>121
パーミッションを全部書いてみ。

templates_c は777でないと動かない時があるって、QUICKINSTALLかなにかに
書いてあったの読んだ?

templates_c,cache のファイルオーナーが、Webサーバと同じにならないなら、
777でないとダメじゃなかったっけ?

わからんのなら、全部777にしてみろ。
124114:03/05/06 10:47 ID:aSOV5r0L
>123 ありがとうございます。

templates_c は777でないと動かない時があるって言うのは知りませんでした。
とりあえず、全部777にしてみました。実行結果は同じエラーでした。
パーミッションとディレクトリ構成はこんな感じです。

/usr/local/apache/htdocs
--Webファイルをおくディレクトリでユーザとオーナーはwwwです。

この中にphpというディレクトリがありパーミッションは以下のとおりです。
/usr/local/apache/htdocs/php
drwxrwxrwx 7 www www 4096 5月 2 19:35 php

このphpフォルダ内に、smarty用のディレクトリを入れ777にしました。
drwxrwxrwx 2 www www 4096 5月 2 17:53 cache
drwxrwxrwx 2 www www 4096 5月 2 19:19 configs
drwxrwxrwx 2 www www 4096 5月 2 18:16 smarty
drwxrwxrwx 2 www www 4096 5月 2 19:18 templates
drwxrwxrwx 2 www www 4096 5月 2 17:53 templates_c

テンプレートディレクトリ内に下記ファイルがあります。
-rwxrwxrwx 1 www-data www-data 56 5月 2 19:24 smarty_test.tpl

もしかして、これらのディレクトリはWEBファイルを置くディレクトリ
直下に置かないとダメなんでしょうか?それとも、WEBファイルを置くディレクトリの
外に置くべきものだったりしますか?ここ読んでるんですが↓
http://sunset.freespace.jp/smarty/SmartyManual_2-5-0J_html/installing.smarty.basic.html
青マンモス本と書いてある事が微妙に違っていて、よくわからなくなってしまいました。。。
とりあえず、全部削除してもう一度始めから設定しなおしてみます。
125あぼーん:あぼーん
あぼーん
126あぼーん:あぼーん
あぼーん
127114:03/05/06 16:37 ID:aSOV5r0L
とりあえず、下記のようにすることでできるようになりました。
ありがとうございました。

アプリケーション用のSmartyのディレクトリをドキュメントルートの外に作成。
 templates/ templates_c/ configs/ cache/
cache/ templates_c/にwebサーバのオーナとユーザに設定し、
cache も templates_c も777で設定。

これで、下記の拡張セットアップまでできました。
http://sunset.freespace.jp/smarty/SmartyManual_2-5-0J_html/index.html

128114:03/05/06 16:39 ID:aSOV5r0L
しかし >>127 のような構成になっていると、templates/が、ドキュメントルートの
外なので tplファイルがWindows側からアップロードできません。

マニュアルによれば、「セキュリティの心配を避けるためにドキュメントルート外に
これらのディレクトリを配置する事が推奨されます。」とあるので
ドキュメントルートの中においてもセキュリティ面を除けば問題ないんじゃないか
と考えて、再度ドキュメントルート内に設定してみました。

ドキュメントルート内のSmarty用のディレクトリと、ファイル全てを
パーミッションを777、webサーバのオーナとユーザに設定しましたが
やはり >>114 のようなエラーが出てしまいます。

Warning: Smarty error: problem writing temporary file '/usr/local/apache/htdocs/smarty/php/cache//%%306/%%30660664/3eb76264e8132' in /usr/local/lib/php/Smarty/Smarty.class.php on line 1042
Hello, Ned!

ドキュメントルート内に置くのは不可なのでしょうか?
他の方はtplファイルのアップロードはどうなさっているのでしょうか?
Webサーバで直接書いてらっしゃるのでしょうか?
何度もスミマセン。
129nobodyさん:03/05/06 18:19 ID:6G0ArJzR
>>128
ドキュメントルートより1つ上の階層にファイルを
アップロードできないってのがなんか違うな。
130nobodyさん:03/05/06 19:48 ID:???
>>128
なんでアップできないかがよくわからんな。
そんなことありえないと思うが、どのようにできないわけ?

で、そのエラーはやっぱりパーミッションの問題だ。
templates_c 以下にできるファイルのオーナーが違うでしょ?
131114:03/05/07 11:05 ID:ejEp7kPZ
>129サン >130サン レスアリガd

> で、そのエラーはやっぱりパーミッションの問題だ。
> templates_c 以下にできるファイルのオーナーが違うでしょ?

おっしゃるとおり、オーナー違ったし書き込み権限もなかった(´・ω・`)
ここの拡張セットアップ↓を使わなければうまくいくようになりました!
http://sunset.freespace.jp/smarty/SmartyManual_2-5-0J_html/installing.smarty.extended.html

ドキュメントルートより1つ上の階層にファイルをアップロードできないって変ですか?
/usr/local/apache/htdocsここの一つ上だから
/usr/local/apacheここがFTPした時に見えないってことですけど。

FTPの設定を変えたら見えるようになると思いますが、それって危険ではないかな?
そういうことじゃないでしょうか??あれれ?
132 ◆AngelH/kMI :03/05/07 13:30 ID:???
>>131
というか、そのあたりのファイルはユーザ別に作って
そのユーザのディレクトリに入れた方がいいのでは・・・。

ドキュメントルート
/home/username/www

Smartyのコンパイルディレクトリ
/home/username/lib/templates_c

自分ならこんな感じ。
133114:03/05/07 15:32 ID:ejEp7kPZ
>131san ありがとー!

なるほど。ユーザディレクトリ使えばできますね。
それでやってみます!

みなさん、長いことお付き合いいただきありがとうございました!
おかげさまで無事設定できそうで、大感謝です!
134あぼーん:あぼーん
あぼーん
135nobodyさん:03/05/08 10:29 ID:???
>>133
もし感謝してるなら、自分が色々わかるようになった時、他にわからない人がいたら
やさしく教えてあげるようにしてねー。
136114:03/05/08 13:03 ID:???
>135
オオー!素敵なコメントありがとう!
もちろん、絶対恩返しします!
137nobodyさん:03/05/15 22:03 ID:???
>>135
ほんとうに素敵なコメントだ。
きみ、人間としてすばらしいよ。
心が洗われた。
138135:03/05/16 10:49 ID:???
>>136-137
そのコメントは僕の考えたコメントじゃないんですけどね…
僕も今まで色々質問ばかりしてきて、たくさんの親切な人にいっぱい教えて
もらいました。その時言われたのが>>135のような言葉です。

多分UNIX系の方々の考え方だと思いますが、僕もその考えに賛同して、
その恩を他の困っている人に返しています。

UNIX板など行くと商業サポートかと思うくらい、質問に答えてばかりの人が
いますが、多分その方も誰かから色々教わったたり、フリーソフトウェア、
オープンソフトウェアの恩を返しているんだろうなぁと思います。

#smartyというこんなに労力のかかっているソフトを無料で配布している
作者さんに対しても恩を返していることになるのかなぁ…
139nobodyさん:03/05/21 19:08 ID:p8eRICbY
ちょっと質問です。
ひとつの変数を使いまわして、新たな値を入れたい時は、
毎回clear_assign()使った方がいいんでしょうか?
使わなくても動いてるみたいだけど。。。
140あぼーん:あぼーん
あぼーん
141139:03/05/21 19:13 ID:p8eRICbY
も一つ質問です。
Smartyって、if とか loop が使えるじゃないですか。
これってとても便利なんですが、デザイナーさんもこういうのをある程度は
理解しないといけないですよね。

そうするとデザインとロジックの分離からちょっとずれてしまう気がするんですが
実際デザイナさんと作成されている方はこの辺どうされてるんでしょうか?
142 ◆AngelH/kMI :03/05/21 20:46 ID:???
>>141
if文は使ってないなぁ。
loopは使えないとお互い不幸になりそうなので使ってます。

・とりあえずloopとか変数とか無しでデザイン作ってもらう
・その後、自分がloop箇所や変数箇所を追記・修正
・デザインや文章に変更が生じた場合、命令部を破壊しないように変えてもらう

自分はこんな感じでやってるよ。
143山崎渉:03/05/22 01:57 ID:???
━―━―━―━―━―━―━―━―━[JR山崎駅(^^)]━―━―━―━―━―━―━―━―━―
144139:03/05/22 10:34 ID:???
>142 san
ありがとうございます。
デザインが先で、あとは {...} が付いている所はさわらないで
もらうって感じですね。

if 文使ってないというのは、例えば、状況によって画面の表示を変えたい時
どのようにされてるんでしょうか?権限によって画面を変えたいときとか。
145 ◆AngelH/kMI :03/05/22 11:50 ID:???
>>144
>権限によって画面を変えたいときとか。
ファイルそのものをわけちゃう。
Dreamweaver等でデザインファイル(html)をみるときもその方が
見やすいと思うのだけどどうだろう。

このあたりは人によって開発手法違うだろうから
他の人の意見も聞きたいなぁ。
146nobodyさん:03/05/22 19:56 ID:???
サブディレクトリ、またはサブドメインごとに軽くデザインを変えるようなシステムを
みなさんはどのように作っていらっしゃいますか?

自分も今作っているのですが、設定ファイルがあちこち行ってしまって複雑になってしまい
ました。
title,descriptionなどを入れた、configs/sub.conf
サブごとのラッパークラス includes/sub.lib.php
そして、各phpファイル www/sub/index.php

みなさんはどのようにやっているんですかねぇ?
147あぼーん:あぼーん
あぼーん
148あぼーん:あぼーん
あぼーん
149あぼーん:あぼーん
あぼーん
150山崎渉:03/05/28 17:07 ID:???
     ∧_∧
ピュ.ー (  ^^ ) <これからも僕を応援して下さいね(^^)。
  =〔~∪ ̄ ̄〕
  = ◎――◎                      山崎渉
151nobodyさん:03/05/31 13:59 ID:???
>>146

スクリプトファイルとテンプレートファイルを同じディレクトリに置いて管理してます。結局これが自然な気がします。ヘッダやフッタのような共通ファイルは別場所でまとめて管理。
PEAR を継承してテンプレート制御用のクラスを作りその中で Smarty を初期化してます。
この中で例えば $obj->smarty->display() のような関数に対して $obj->display() のようなラッパーを作り、そこで template_dir や compile_id の制御を行います。
でそのクラスをさらに extends して特定ブロックごとに合わせています。
実行はこんな感じ。
$tpl = new TemplateAreaName;
/* .. snip.. ここで処理&変数のアサインを行う */
// レンダリング
$tpl->showHeader();
$tpl->showMenu();
$tpl->display('index.tpl');
$tpl->showFooter();
152nobodyさん:03/05/31 19:10 ID:???
>>151
>スクリプトファイルとテンプレートファイルを同じディレクトリに置いて管理してます。

なるほど。確かに更新するとき、両方のディレクトリを行き来したりする必要はなくなりますね。
これだと、テンプレートファイルも外から見えますよね?
問題ないんですかね。
153nobodyさん:03/05/31 20:19 ID:???
>>152
う〜ん、、どうなんでしょう。今回 Smarty を初採用し、アプリケーションの完成度も 40% というところなので正直手探りでやっています。
もっと良い方法があればいいのですが。

ご指摘の危険性は考えましたが元々テンプレートをさくさく差し替えれるようにテンプレートには極力情報を埋め込まないようにしており、
テンプレートへの直接のアクセスも拡張子によるアクセス制限で回避出来ると思ってこの方法でやっています。
154nobodyさん:03/06/01 12:57 ID:???
>>152
もう一つ思い出しました。
テンプレートの先頭にスクリプトを埋め込むか、テンプレートをPHPとして認識させて define などを使ってダイレクトアクセスを防ぐ手段も考えられます。
PHPBB のライブラリとかこういうやり方だったような。
155nobodyさん:03/06/07 06:42 ID:dfQas5D8
Smarty 2.5.0 を、PHPのsafe_mode="On"で実行すると、warningが出るのですが、
これは私だけ?
確か、Smartyクラスモジュールの2691行目だったと思います。
156 ◆AngelH/kMI :03/06/07 09:08 ID:???
>>155
$smarty->use_sub_dirs = false;
で回避できない?

意味はマニュアル参照。
157nobodyさん:03/06/10 07:06 ID:Fwh1UjxU
>>156
$smarty->use_sub_dirs = false;
やってますが、それでもwarning出てしまします。
ほかに思い当たる情報があればお願いします。
158あぼーん:あぼーん
あぼーん
159あぼーん:あぼーん
あぼーん
160あぼーん:あぼーん
あぼーん
161 ◆AngelH/kMI :03/06/10 17:19 ID:???
>>157
というかそのwarningの内容出してくれないと何とも。
cacheディレクトリとtemplates_cディレクトリに
書き込み権限与えてる?
162nobodyさん:03/06/12 18:20 ID:???
smartyで他のサイトのXOOPSのRSSを表示しようとしています。

googleで調べて、magpieというのがあったので、それを使おうとしています。
が、日本語が文字化けしてしまうので、変換させたいのですが、どこでどう変換させれば
いいのかがわかりませんでした。

以下が、smarty用サンプルコードをいじったものです。

$url = $_GET['rss_url'];
if ( $url ) {
// assign a variable to smarty for use in the template
$smarty->assign('rss_url', $url);
$rss = fetch_rss( $url );
// if fetch_rss returned false, we encountered an error
if ( !$rss ) {
$smarty->assign( 'error', magpie_error() );
}
//ここは文字化け対策成功
$rss->channel['title'] = mb_convert_encoding($rss->channel['title'], "EUC", "auto");

foreach ($rss->items as $item) {
//ここでどのような変数に代入すれば良いのでしょうか?
$title = mb_convert_encoding($item['title'], "EUC", "auto");
}

$smarty->assign('rss', $rss );
$item = $rss->items[0];

$date = parse_w3cdtf( $item['dc']['date'] );
$smarty->assign( 'date', $date );
}
163nobodyさん:03/06/13 04:36 ID:???
自己レス

foreach ($rss->items as $key=>$item) {
$rss->items["$key"]['title'] = mb_convert_encoding($item['title'], "EUC", "auto");
}

でOK。
164nobodyさん:03/06/20 01:36 ID:22HNzffu
mb関数使えない鯖で半角カタカナ全角にできるの?
165nobodyさん:03/06/20 10:35 ID:???
>>164
できるよ
166nobodyさん:03/06/22 01:38 ID:9+GBIMXB
>>165
どーやんの?
167nobodyさん:03/06/22 08:43 ID:???
168nobodyさん:03/06/28 01:23 ID:M0QDMJtS
>>167
わかんねー
169あぼーん:あぼーん
あぼーん
170あぼーん:あぼーん
あぼーん
171あぼーん:あぼーん
あぼーん
172あぼーん:あぼーん
あぼーん
173あぼーん:あぼーん
あぼーん
174あぼーん:あぼーん
あぼーん
175あぼーん:あぼーん
あぼーん
176nobodyさん:03/07/12 19:16 ID:P6mY9BCG
age
177nobodyさん:03/07/13 01:15 ID:iGC1lgy5
Smartyってどれくらい普及してんだ?
使われているサイト知ってる?
178nobodyさん:03/07/13 13:49 ID:???
>>177
自分の個人サイトだったら、ほぼ全部のページで使ってますが・・・
179nobodyさん:03/07/13 14:05 ID:Qv0LVgul
PHPから別ウィンドウを立ち上げる事ってできるんでしょうか?
例えば、エラーチェックを行って、エラーに引っかかると
別ウィンドウでエラー内容を表示する、等
require もしくは header 関数を利用して。
もしくはそれ以外の関数、コーディングで。
Ncurses関数は客の鯖問題でPHPをリコンパイルできません。。
180あぼーん:あぼーん
あぼーん
181nobodyさん:03/07/13 14:14 ID:48FuQ70+
>>179
今手元にないから分からないけど、
"Professional PHP プログラミング"に、それらしい例がのっていたような。
182nobodyさん:03/07/13 14:17 ID:Qv0LVgul
>>181 さん
早速ありがとうです。
調べてみます
183nobodyさん:03/07/13 15:19 ID:???
http://pc2.2ch.net/test/read.cgi/php/1057947512/12
smartyと関係ない上にマルチポスト
184nobodyさん:03/07/13 16:23 ID:???
MLにもポストしてたような?
できるの?コレ?
185山崎 渉:03/07/15 11:07 ID:???

 __∧_∧_
 |(  ^^ )| <寝るぽ(^^)
 |\⌒⌒⌒\
 \ |⌒⌒⌒~|         山崎渉
   ~ ̄ ̄ ̄ ̄
186nobodyさん:03/07/15 17:55 ID:wTgTaT8B
おお、久々にWebProg板に来たらSmartyのスレが。
コンテンツとデザイン〜の1です。

>>177
一応は本家公認のテンプレートエンジンって扱い(ですよね?)なので、海の向こうでの
使用頻度は高いんじゃないかと思います。xoopsに採用という実績もありますし。
国内でも自分みたいな糞田舎の情報システム部ですら2年前から使ってるので、それなりに
普及していると思いますよ。googleでも随分引っかかるようになってきましたね。
187nobodyさん:03/07/16 00:47 ID:???
DBからデータ持ってきてappendしてページ作ってる場合、
APCとかZendOptimizerとか使える?
188nobodyさん:03/07/21 14:35 ID:???
Smarty 使ってると何故かソースコードの記述が勝手にアサインされてるような、、
全く assign していない PEAR::raiseError のようなエラー処理の記述や print 文で勝手にエラー吐いてくれまつ。



…… Smarty のコードまで潜って 1h ほど戦って気付いた。
$tpl->display('hoge.php');
拡張子が .tpl ぢゃなくて .php で別ファイル指定してた。鬱だ氏のう _| ̄|◯
189 ◆AngelH/kMI :03/07/22 08:14 ID:???
>>187
別に問題ないかと。
APC1の頃は大丈夫だったし
現在はmmcache使ってるけど大丈夫だよ〜。
190nobodyさん:03/07/22 15:11 ID:???
素朴な疑問。
appendとassignって何が違うんでしょう?
191nobodyさん:03/07/22 17:16 ID:???
>>189
サンクス。やってみまつ。

>>190
assginは代入、みたいな。
appendはarray_push()、みたいな。
192nobodyさん:03/07/28 23:09 ID:Qst4s2Al
Smartyって、ページ全体のキャッシュじゃなく、
ページの一部分だけキャッシュのすることってできないですか?

自分、いわゆる「ぱんくず(※)」をキャッシュにしたいんですよね・・・

※トップページから現在のぺージまでの道筋を表したもの。
例)Yahoo!とかだと

ホーム > コンピュータとインターネット > ソフトウェア > インターネット > WWW > ブラウザ

っていうあれね。
193nobodyさん:03/07/28 23:36 ID:zAmscCpE
最高画質が揃った最高のサイトオープン!?
http://www3.free-city.net/home/espresso/white-snow.html
194nobodyさん:03/07/29 17:31 ID:aKRM8GxJ
>>192
insertを使えば出来る。
http://sunset.freespace.jp/smarty/SmartyManual_2-5-0J_html/language.function.insert.html

カスタムプラグインでテンプレート内に{breadcrumb 現在の位置="hoge"}ってかくと
自動でずらっとパンくず表示してくれるの作ったけど便利だよ。
他のサイトにも再利用できるし。
195nobodyさん:03/08/01 14:03 ID:???
テンプレートのデザインをいじる人にIBMホームページビルダーを
使わせたいんですが、Smartyタグのデリミタは何が無難でしょうか。

ページ内にCSSを書くこともあるのでデフォルトの { } は使わせたく
ないし、XOOPS2 なんかで定義されている <{ ]> でもいいかなと
思ったけど、< なんかに自動的に置換されてしまわないかと心配
です。それに、modifierのパラメータを " で囲むと " に置換
されるもよう。
196山崎 渉:03/08/02 02:23 ID:???
   ∧_∧
  (  ^^ )< ぬるぽ(^^)
197ぼるじょあ ◆ySd1dMH5Gk :03/08/02 04:51 ID:???
     ∧_∧  ∧_∧
ピュ.ー (  ・3・) (  ^^ ) <これからも僕たちを応援して下さいね(^^)。
  =〔~∪ ̄ ̄ ̄∪ ̄ ̄〕
  = ◎――――――◎                      山崎渉&ぼるじょあ
198nobodyさん:03/08/09 06:43 ID:ZOEKZBoK
さがりすぎage
199あぼーん:あぼーん
あぼーん
200nobodyさん:03/08/09 07:56 ID:0dlTg+8l
201あぼーん:あぼーん
あぼーん
202nobodyさん:03/08/09 15:33 ID:ZOEKZBoK
>>200
せめてキャッシュを実装してほしい。(中間ファイルでないよ)
タグが拡張できるようにしてほしい。
ちゃんとエラーハンドリングしてほしい。

このあたりを実装してくれれは少しは考えるが、
まだ今のところはSmartyのほうが使い勝手はいいな。
203あぼーん:あぼーん
あぼーん
204 ◆AngelH/kMI :03/08/12 12:14 ID:???
Smarty2.6.0RC1 リリース。
とりあえず変更点確認中。
結構色々変わってるかな?
205nobodyさん:03/08/12 13:45 ID:7lLuw4V/
RCなのに色々変わっているってのもアレだな。
いや、中身は見てないが。
206nobodyさん:03/08/13 10:54 ID:???
>>205
2.5.0 -> 2.6.0RC1だから変更点は多いと思うぞ?
207nobodyさん:03/08/13 11:24 ID:+vOr/IO1
>>206
普通、Release Candidate版って問題がなければそのままリリース版に
するものだから、仕様変更はその前の時点で落ち着いていて欲しいな。
その辺、PHPらしいと言えばらしいけど。
208nobodyさん:03/08/13 21:01 ID:???
RC -> Release の間は仕様を変えないのが普通だけど
旧ver Release -> 新ver RC は仕様が変わっててあたりまえじゃないか?
209nobodyさん:03/08/14 12:09 ID:Ayxn98z4
>>208
それもそうだ。
新ver RCと旧ver Releaseの間に新ver betaに相当するもの(CVS head)が
あったと考えれば問題ないな。スマソ。
210山崎 渉:03/08/15 22:32 ID:???
    (⌒V⌒)
   │ ^ ^ │<これからも僕を応援して下さいね(^^)。
  ⊂|    |つ
   (_)(_)                      山崎パン
211nobodyさん:03/08/16 17:32 ID:???
php側で、ログファイルから、1行1行読み出して、
それを配列にいれます。
その配列を1こずつ、ループさせて、テンプレートで
書き出すにはどうしたらいいんでしょうか。
勘で、

index.php
for($i=0; $buf=gets($fp, 8000); $i++)
{
    $msg[$i]=$buf;
    $smarty->assign('msg',array("$i"=>$buf));
}

出力側

{section name=msg_id loop=$msg}
    msg: {$msg[msg_id]}<br>
{/section}


とかやってみたんですが、うまくいかないです。
誰か教えてください。
212nobodyさん:03/08/16 17:45 ID:???
補足ですが、
$fpの中には、ログファイルが入ってます。
213nobodyさん:03/08/16 18:04 ID:???
appendつかったらできたー
(^○^)
214nobodyさん:03/08/23 08:07 ID:qE2mijHa
怒涛の勢いで下がっていくスレage
215nobodyさん:03/08/31 23:16 ID:OAFHlkE1
1週間ぶりに上げてやる
216nobodyさん:03/09/03 11:17 ID:???
PHPカンファはSmartyばかりでしたな
217nobodyさん:03/09/11 19:36 ID:???
te
218nobodyさん:03/09/12 09:35 ID:???
age
219nobodyさん:03/09/18 10:27 ID:bzSYta4I
patTemplateとどちらがいいですか?
220nobodyさん:03/10/02 10:36 ID:ZE4wxlxf
質問です。
Smartyを使ったプログラムを業者に頼んだら、あがってきたソースは
タグまでphp側で書いてきました。最初print文を使ってるのかと思いました。

$str ="<form name=f action=aaa.php method=post>\n";
$str .="<TABLE cellSpacing=0 cellPadding=5 width=620 border=0 >\n";
$str .="<TR $ABC>\n";
   ・・・
$str .="</TR>\n";
$str .="</TABLE>\n";
$str .="</form>\n";

こんな調子で300行くらい。で、最後にデータをassignしてました。

$tpl->assign("str",$str);

で、これではSmartyの意味がないので、タグ(デザイン)とプログラムを分離してください。
と伝えた所「タグとプログラムの完全な分離はできません」と言われました。

私はできるんじゃないかと思っていたのですが、Smartyでは「タグとプログラムの完全な分離」
は不可能なのでしょうか?
221nobodyさん:03/10/02 12:19 ID:???
その業者を使うのやめれ。デザインととプログラムを分離できないんならテンプレート使う意味ないじゃん。
端折ったコードで申し訳ないが
<table>
<tr>
 <th>header1</th>
 <th>header2</th>
</tr>
{loop}
 <tr>
  <td>{$data1}</td>
  <td>{$data2}</td>
 </tr>
{/loop}
</table>
Smartyはこんな風に使うんだよ、と教えてあげて。
222nobodyさん:03/10/02 12:20 ID:???
その業者を使うのやめれ。デザインととプログラムを分離できないんならテンプレート使う意味ないじゃん。
端折ったコードで申し訳ないが
<table>
<tr>
 <th>header1</th>
 <th>header2</th>
</tr>
{loop}
 <tr>
  <td>{$data1}</td>
  <td>{$data2}</td>
 </tr>
{/loop}
</table>
Smartyはこんな風に使うんだよ、と教えてあげて。
223220:03/10/02 13:42 ID:???
>221=222さん。
ご返事ありがとうございます。やはりおかしいですよね。
私はPHPは初心者なのですが、納入されたSmartyをみて
びっくりしました。参考にしようと思ったのに・・・。
今修正してもらってます。

ついでにいうと、納入された物を見ていたら、仕様書に
書いてある事でやっていないことがあったので、それを指摘したら
「じゃあ、仕様書をなおしておきます」と平気で言い放ちました。

(゚Д゚)ハァ? …タマゲマスタ!
全然関係ない話スマソ。
224nobodyさん:03/10/02 22:25 ID:???
その業者おもろいなぁ
225nobodyさん:03/10/02 23:06 ID:???
スマーチーはある程度スクリプチングの構文にゃら分かんないとあんま意味無いよね。
HTML分離させて渡したら、良く分からないので
このHTMLをSmarty用に書き換えてとか渡された。
わかんね−なら最初っからSmartyでとか言うんじゃ寝ェよ
226nobodyさん:03/10/08 14:23 ID:h0+MMd8V
ttps://www.stackasterisk.jp/tech/php/phpMvc02_01.jsp
上のサイトを参考にPHPでMVCってみたけど・・・しんどい・・
ログ読ませてもらったらよさそうなので今度のシステムで使わせてもらいます。
227nobodyさん:03/10/09 17:38 ID:???
$a[0]->b = 1;
$a[0]->c[0] = 2;
$a[0]->c[1] = 3;
$a[1]->b = 4;
$a[1]->c[0] = 5;
$a[1]->c[1] = 6;
$tpl->assign("a", $a);

こんな感じで

{section name=loop1 loop=$a}
{section name=loop2 loop=$a[loop1]->c}
{$a[loop1]->c[loop2]} {* ← ここでエラー *}
{/section}
{/section}

とすると
unidentified token '[loop2]'
と怒られます(涙)
なにかいい方法ないでしょうか?

$a[x][a]
なら行けるんですけど、assignが面倒で。。。
228227:03/10/09 18:42 ID:???
これで解決できました!
失礼しました!

{section name=loop1 loop=$a}
  {foreach key=key item=item from=$a[loop1]->c}
    {$key} = {$item}
  {/foreach}
{/section}
229nobodyさん:03/10/10 00:49 ID:???
あの、WinでSmartyは…
230nobodyさん:03/10/10 00:58 ID:oTftSrdr
Smartyって、共有サーバでSSH使えない環境でも、
自分の、ファイルを置ける領域に「Smarty」という名のディレクトリをつくり、、ファイル群をそこにアップロードして、、

define("SMARTY_DIR","/Smartyへのパス・・・・・・/Smarty/");

require_once(SMARTY_DIR."Smarty.class.php");

とやれば、使えるのでしょうか?
231nobodyさん:03/10/10 01:27 ID:???
>>230
で、試してみたのか?
232230:03/10/11 00:46 ID:U0DA9P6C
すいません、まだ環境がととのってないもので、試せないんです。。。
自分が借りてるレンタルサーバで、PHPが近々はいる予定なので、
関心があって訊いてみました
233nobodyさん:03/10/11 08:24 ID:???
使えると思いますよーん
234230:03/10/11 23:27 ID:???
>>233
ありがとうございます。
入ったら試してみます。
235nobodyさん:03/10/14 23:32 ID:???
>>230
PHPを実行するユーザーが、templates_cとcacheディレクトリを
読み書きできるように、場合によってはパーミッションを変更しないと
いけないのだが、そのへんは大丈夫?
236230:03/10/15 00:05 ID:???
>>235
パーミッション変えるだけなら、FTPソフト(FFFTPでもなんでも)でできるかと思ったけど、、、
ぼく、なんか勘違いしてます?(汗
237nobodyさん:03/10/15 06:29 ID:???
>>236
それならOK
238nobodyさん:03/10/15 08:58 ID:???
>>235
モチツケ
239nobodyさん:03/10/18 23:59 ID:???
Smartyで再帰的な出力をテンプレートにすることはできますか?

たとえば、
<ul>
{foreach item=c from=$node}
<li>
{$c->name}
<ul>
{foreach item=cc from=$c}
<li>
{$cc->name}
<ul>
{foreach item=ccc from=$cc}
<li>
{$ccc->name}
{* ... *}
</li>
{/foreach}
</ul>
</li>
{/foreach}
</ul>
</li>
{/foreach}
</ul>
みたいな感じでありったけ出力したいのですが。
240239:03/10/19 00:00 ID:???
>>239
あ、スマソ
<ul>
{foreach item=c from=$node->children}
<li>
{$c->name}
<ul>
{foreach item=cc from=$c->children}
<li>
{$cc->name}
<ul>
{foreach item=ccc from=$cc->children}
<li>
{$ccc->name}
{* ... *}
</li>
{/foreach}
</ul>
</li>
{/foreach}
</ul>
</li>
{/foreach}
</ul>
241nobodyさん:03/10/20 09:35 ID:???
>>239
これは再帰じゃなくて
ただの多重ループだと思う。
ためしてみた?
242239:03/10/20 10:08 ID:???
>>241
ループで書くとこうなってしまうってことです。
こういうのを再帰で書くのはSmartyでは難しいんでしょうか。

それでちょっと思いついたんですが、自分自身をincludeする
テンプレート片を作るとどうなんでしょう。自分でちょっとやって
みたら、変数のスコープの問題でつまづいてしまったんですが…。
243239:03/10/20 13:16 ID:???
再帰的includeでイケました! include でローカル変数名=値を渡して
やればうまくいきました。
244nobodyさん:03/10/21 14:41 ID:???
$a[0]
みたいに配列を直接指定する方法ってありますか?
245244:03/10/21 15:24 ID:???
すみません
できないのは $a[0]->b[0] でした。
できないのかなー?
246nobodyさん:03/10/22 17:20 ID:6TbJL0Yr
ネットで大人気のコスプレアイドルってニュースに惹かれてアクセスしたら
エラーがでてた。
これSmarty?
http://www.itv24.com/
247nobodyさん:03/10/22 18:48 ID:???
>>246
そんなんわからんわい
248nobodyさん:03/11/07 15:10 ID:KX2gQLRX
patTemplateのほうがいい。
249nobodyさん:03/11/07 19:42 ID:ZxETm7Q5
マニュアルに、以下のようにありますが・・・
---
$template_dir
テンプレートファイルを置くディレクトリです。ファイルをインクルードする際にリソースの種類を指定しなかった場合は、
このディレクトリから探します。デフォルトは"./templates"で、実行中のphpスクリプトが置かれた場所に存在する
"templates"ディレクトリを探す事を意味します。

テクニカルノート: このディレクトリをwebサーバのドキュメントルート下に置く事を推奨しません。
---
この最後の行、なんでなんでしょう?

直接のぞかれて問題のあるようなテンプレート(tpl)ファイルを置く方が、問題だと思うのですが・・・
実際、XOOPSなんかも、ドキュメントルート下にtplファイル置いてますし。。。
250nobodyさん:03/11/07 21:10 ID:???
>>249
何が言いたいんだ?

> 直接のぞかれて問題のあるようなテンプレート(tpl)ファイルを置く方が、問題だと思うのですが・・・
問題なんじゃん、じゃあこれであってるじゃん
251nobodyさん:03/11/07 22:32 ID:???
コメントの内容とか見られたらまずいこともあるし
処理方法がばれればクラッカーに解析される可能性など。
見られないにこしたことはない。
252nobodyさん:03/11/07 23:57 ID:???
>249
XOOPSの場合、レンタルサーバ等でhtml公開用のディレクトリ
以外がユーザに解放されていないケースにも合わせるため
XOOPSインストールディレクトリ以下に集中させる設計になっているから
必ずしもセキュリティ上ベストな選択がなされている訳ではないよ。
#敢えてレベルの低いところをターゲットとしている。全体的に
253nobodyさん:03/11/12 04:47 ID:FrBzA+Qu
すいません、
Smartyを導入しようとしているのですが、
Warning: main(/usr/local/apache/smarty/Smarty.class.php):
failed to open stream: Permission denied in /usr/local/apache/htdocs/index.php on line 23
となってしまいます。

でも、httpd.confは、
User www
Group www
としていて(いつお、apacheをリスタートさせた)
で、
chwon www:www smarty
chmod 770 smarty

chwon www:www smarty/*
chmod 770 smarty/*

としたのですが、
やはり、前述のエラーが出てしまいます。

ただ、1回、正常に動作したことはあったんですよね。。。
そのあと、smartyのディレクトリを場所変えたり、
些細なことしか(なにをしたかは失念してしまいましたが)してないはずなのに、こうなってしまってます。

いったい、どこらへんを疑えばいいのでしょうか?
ポインタだけでも示して頂ければ幸いです。
254nobodyさん:03/11/12 07:29 ID:FrBzA+Qu
smartyを入れる方法って、どれがベストなんでしょうか?対して変わらない?

Example 2-2. Smartyのインスタンスを作成する
require('Smarty.class.php');
$smarty = new Smarty;

Example 2-3. ライブラリファイルの絶対パスを指定する
require('/usr/local/lib/php/Smarty/Smarty.class.php');
$smarty = new Smarty;

Example 2-4. phpのinclude_pathにライブラリディレクトリを追加する
// php.iniを編集し、include_pathにSmartyのライブラリディレクトリを追加して
// webサーバをリスタートしたなら、以下を行ってください。
require('Smarty.class.php');
$smarty = new Smarty;

Example 2-5. 手動でSMARTY_DIR定数を定義する
define('SMARTY_DIR','/usr/local/lib/php/Smarty/');
require(SMARTY_DIR.'Smarty.class.php');
$smarty = new Smarty;

↓から引用しますた。
http://sunset.freespace.jp/smarty/SmartyManual_2-6-0RC2J_html/installing.smarty.basic.html
255nobodyさん:03/11/13 09:38 ID:???
>>253
その些細なことが原因なんだと思うが。。。
わからなかったらもう1度最初からやったほうがいいと思う

chwon を chownにしたらよいかも
256nobodyさん:03/11/13 21:49 ID:???
257nobodyさん:03/11/14 13:26 ID:maWzYQwN
>>195
俺も最近使い始めたんだけど、JavaScriptやCSSのタグに引っかかって
鬱陶しい。結局何に変更しました?
258nobodyさん:03/11/17 14:01 ID:EFGY3Z8y
青のマンモス本を見ながらSmarty導入しているんですが、
カスタム関数の追加ってどうやるんですかね?

動的な関数の追加はregister_function()を使用すればよいのですが、
もっと汎用的に使いたいんです。

マンモス本によりますと、Smarty.addons.phpというファイルに定義を
追加すればよいことになっているんですが、これはこの本の出版時点
のversion 1.5での設定法らしんです。

version2か2.5あたりから、そのあたりの使用が変わったらしい(changelog
を参照)
のですが、新しい設定法がわからなくて悩んでいます。

どなたかご教授願えませんか?
259nobodyさん:03/11/17 15:54 ID:???
>>258
オレも最初はマンモス本でやった
いろいろ変わってるよね。
ほい。
ttp://sunset.freespace.jp/smarty/SmartyManual_2-4-1J_html/index.html

たぶんpluginsディレクトリ内の
function.xxxxx.php
を適当にコピーして内容もそれを参考にいじれば
いけたような。。。
260nobodyさん:03/11/17 15:56 ID:???
>>258
そこまで分かっていて、日本語に訳されたマニュアルもあるのに
どうして読まないのでしょうか?

ttp://sunset.freespace.jp/smarty/SmartyManual_2-6-0RC2J_html/
261nobodyさん:03/11/17 18:48 ID:6jAm6LT2
>>259、260

有難う御座います。
マニュアルは一応一読したつもりですが、グローバルなカスタム関数の
登録に関して記述が見当たらなかったもので・・・。

それでやってみますです!
262nobodyさん:03/11/18 15:58 ID:???
chwon を chown にするついでに、chown -R と、-R もつけてみよう
263nobodyさん:03/11/18 17:06 ID:???
おそっ
264@@@@@:03/11/19 00:18 ID:Zaav6IG2
>
>‥∞‥。☆゜‥∞‥゜★。‥∞‥。☆゜‥∞‥゜★。‥∞‥。☆゜
> 
> ねえ、ちょっと・・・マジやばいんじゃない? この動画!!
>   ↓↓            ↓↓
> http://moro00.e-city.tv/ http://moro00.e-city.tv/
>
> ハッキリ言って、丸見え! 素人はお金のためなら何でもヤル。
> 撮られた時はこんなにバラ撒かれるとは思わなかったんだろね。
> けっこうカワイイ娘なのになぁ・・・ そのへん歩いてたりして!
>
>‥∞‥。☆゜‥∞‥゜★。‥∞‥。☆゜‥∞‥゜★。‥∞‥。☆゜
>
265nobodyさん:03/11/25 22:06 ID:???
?(`д´)?
266nobodyさん:03/12/05 20:56 ID:n07yC7qy
PHP質問スレッド Part11 から誘導されてきました。
http://pc2.2ch.net/test/read.cgi/php/1067635640/984

<p id="name">ここに名前</p>
  が、
$tpl->assign("name", "太郎");
  で
<p>太郎</p>

となるようにするにはどうすればいいのでしょうか。
今自分ことの環境はデフォルトなので、デリミタは { } となっています。
267nobodyさん:03/12/05 21:48 ID:???
>>266
Smartyはセットアップできたの?
あなたの質問の内容よりよっぽど難しいと思うけど。
で、セットアップ出来ているとしたら、セットアップする際に参照した
マニュアル(例えば>>1には日本語マニュアルが紹介されている)の
最初の方にあなたの求める答えが載っているのだが。
268266:03/12/05 22:20 ID:???
ttp://sunset.freespace.jp/smarty/SmartyManual_2-6-0RC2J_html/
を見てインストールし、
require('guestbook/setup.php');
$smarty = new Smarty_GuestBook;
$smarty->assign('name','Ned');
$smarty->display('index.tpl');
まではうまく動くことを確認しました。

いまマニュアルを読み返しているのですが、それらしき箇所を発見することができません。
デリミタのカスタマイズは$left_delimiterと$right_delimiterの値を変えるんだと
思うのですが、これをどういじっても

<p id="name">ここに名前</p> ⇒ <p>太郎</p>

とはならないような気がします。
269nobodyさん:03/12/05 22:46 ID:???
>>268
もう少しマニュアルを読めば分かると思うけど、index.tplに

<p id="name">{$name}</p>

と書けば置き換わるよ。
270266:03/12/05 22:57 ID:???
すみません、Smartyじゃできないみたいですね。

<element id="varname">ダミーの文字</element>

というテンプレートに対して、 assign('varname', 実際の文字) とすると
varnameというidの振られたエレメントの中のダミーの文字が置き換わって

<element>実際の文字</element>

となるようなライブラリを探しているんです。
これだと、「仕上がり見本」のHTMLをそのままテンプレートに使えるんです。
271nobodyさん:03/12/05 23:05 ID:???
>>270
ああ、そういうことね。
では、テンプレートにifとelseを使って、$hogeがあるときは$hogeの内容、
$hogeが無いときはデフォルトの文字列っていう風にしてはいかが?
272266:03/12/06 13:28 ID:???
<p>{if $name}加藤剛{else}{$name}{/if}</p>

っていうことですか? これ Smartyを通さないと <p>加藤剛</p> を得られませんよね。

デザイナーは普通のHTMLエディタで何の変哲もないHTMLを書けばいい、
というのが狙いなので。
273nobodyさん:03/12/06 13:46 ID:???
>>272
ああ、そこまでは無理やね。
というか、そんなの実現不可能だと思うけど。何使っても。

もしそういうライブラリーが見つかったら、報告よろしく。
274266:03/12/06 15:07 ID:???
RubyだとAmritaがあるんですよ。
ttp://www.brain-tokyo.jp/research/amrita/index_ja.html

PHPでというのが要件なので、探しているのです。
275nobodyさん:03/12/06 15:23 ID:???
>>274
へー。勉強になりました。
そのうち誰かPHP版を作ってくれるかもね。
276nobodyさん:03/12/08 19:04 ID:???
>>272
defaultを使った方が読みやすいよ。
<p>{$name|default:"加藤剛"}</p>
277nobodyさん:03/12/10 17:44 ID:d5KtgpUB
「Chapter 4. 変数/phpから割り当てられた変数」というのは、assign などを
使って割り当てたもの、という意味なんでしょうか?
出力したい変数が多数あるのですが、テンプレート内で{$hoge} とする
だけでは出力しないものなんでしょうか?
278nobodyさん:03/12/10 17:48 ID:???
<?=$vari?>
でいいじゃん
279277:03/12/10 17:51 ID:???
あああ・・ バカな質問をしてすみません。
ちゃんとマニュアルを読めば分かることでした(汗
assign などを使わないと、どこからも割り当てられていない変数を
表示しようとしちゃうんですね。あうー  はずかちー
280nobodyさん:03/12/12 00:15 ID:BBYj3pBU
PHPは使えるけどSmartyを知らない人に、
「デザインとプログラムの分離」ができるという点で、
良さを伝えたいのですけど、PHPそのものでいいじゃんと言われてしまいます。

社内にSmarty広めたいのだけど、どうすればいいのだろう?

(キャッシュとかできて高機能だよ、とは言えるんだけど、
「デザインとプログラムの分離」の点で、説得できない・・・)
281nobodyさん:03/12/12 00:18 ID:???
なんか、
{$vari}も
<?=$vari?>

標記的にはほとんどかわんないし、
べつに<?=$vari?>でイイじゃん
って思うんだけど、
なんでわざわざ
smartyなの?
282nobodyさん:03/12/12 01:04 ID:C20HZJQr
処理用のPHPを作ってしまえば、処理と表示わかれるのは簡単だぞ。
おれはそうやって作ってる
かなり見やすいしさ。Smartyはちょっと見たけど、あまり魅力を感じない。
現時点ではね。
283nobodyさん:03/12/12 01:53 ID:???
>>281
今時ショートタグ有効にしてあるのは嫌な感じ。
284nobodyさん:03/12/12 10:18 ID:???
プログラマとデザイナが同じ人物なら
PHPだけでやればよい。
そうでないなら分けたほうが絶対便利。
あとはテンプレートエンジンの比較のはなし。

PHPで独自のテンプレートエンジンつくればいいっていう
頑固おやじはデザイナにそれの使用を強要して
使いにくいは、マニュアルもないはで、
「これだからプログラマは・・・」って言われるのがオチ
285nobodyさん:03/12/12 11:49 ID:???
PHPで独自のテンプレートエンジン = smarty
286nobodyさん:03/12/12 11:51 ID:???
俺はSmartyをメインに使ってるんだが、逆にSmartyを使わない
人たちは、

1.入力フォーム表示
2.内容確認ページ表示
 入力エラーがあった場合は1に戻ってエラーメッセージを表示
 「再入力」ボタンが押された場合は、入力内容を保持して1を表示
 入力エラーが無ければそのまま確認ページを表示
3.処理結果表示
 処理中に問題があった場合は2に戻ってエラーメッセージを表示

というフローを実現する時にどうしてるの?
287nobodyさん:03/12/12 12:01 ID:???
1 2 3
でページを分けて
セッションを使いつつ
リダイレクトさせればOKじゃないの?
288286:03/12/12 12:12 ID:???
>>287
ファイルを分けた場合、2で生成したエラーメッセージは
どうやって1のフォームに表示しますか?
セッションに持つんじゃダサすぎるよね。
289nobodyさん:03/12/12 12:15 ID:???
ヘーヘーヘー

セッションじゃだめなの?
別にPOSTでもいいけど

セッションがいやならPOSTにすればいいんじゃないの?
290286:03/12/12 12:39 ID:???
>>289
セッションが使えない場合にエラーメッセージが表示されなくなるのは
アプリケーションとして問題ありじゃないですか?
常にセッション前提の開発が出来るんなら別ですけど。

あと、2でPOSTにエラーメッセージを詰め込んでから
1にリダイレクトしても意味ないような気がしますが…。
291nobodyさん:03/12/12 12:43 ID:???
セッションが使えない場合ってあるのか?
それならポストが使えない場合、GETが使えない場合とか
考えるとキリがないと思うんだが。

あと、何で意味無いのかわからない。
じゃあ、どうするの?

というか、これ全然smartyに関係ないと思うんだが。
292286:03/12/12 12:53 ID:???
まあ、ショボいロードバランサーを使ってるケースでもない限り
今時セッションが使えない場合ってのはないかもね。
でも、POST/GETメソッドが使えない場合なんてある?

リダイレクトってLocationヘッダを使うってことだよね?
そうすると$_POSTの内容ってまっさらになってしまう気がするんだけど。

俺の場合、>>286で書いたフローを実現するのに単一のファイルに
input()、confirm()、commit()みたいな関数を作って処理してる
のだけど、こういう構造にするとHTMLとコードを混在させるのはまず
不可能なのでHTML部分はSmartyで別ファイルにしています。

で、「Smartyイラネ」とか言ってる人はこの辺どうやってるのか不思議だったんですが。
293nobodyさん:03/12/12 13:27 ID:???
一般的なphpの使い方

<?php
〜〜〜〜〜
〜〜〜
処理、このなかで出力するテキストなどを
変数にセット
〜〜〜
?>

<HTML>
<BODY>
<? echo "$phpでセットした変数"?>
<?=$phpでセットした変数?>
294nobodyさん:03/12/12 14:02 ID:???
私の場合は、
main.php:
<?php
if (!is_numeric($hoge)) {
$status = "ng";
$message = "数字を入力して下さい";
}
if ($status == "ok") {
include ('complete.html');
exit;
}
include (question.html);
exit;
?>

question.html:
<?php print $message; ?>
<form action='main.php'>
<input type='text' value='<?php print $hoge; ?>'>
</form>

みたいにして、question.html をドリームウェーバーor 手書きで編集してました。
なので、あまりSmarty は必要ないかな、と思っていましたが、入力エラーのときに
option やcheckbox のvalue 値を引き継ぐのはSmarty の方が便利でした。
295nobodyさん:03/12/12 15:12 ID:???
入力エラーってどういうケースを想定してるのかしらんがjavascriptで処理しちゃいかんの?
わざわざ鯖に仕事させなきゃ駄目?
296nobodyさん:03/12/12 15:14 ID:???
>>295
クライアントがJavascriptを切っていたらどうする?
297nobodyさん:03/12/12 15:48 ID:???
なんだかアホなはなしやめようよ

javascriptとかリダイレクトとか。
そんなの言ってるの趣味でやってる学生とかだろ?
そんなのスルーでお願いしますよ
298286:03/12/12 16:07 ID:???
>>295
商品情報編集ページを作るとして、入力してもらった商品IDをもとにデータベースを
見に行ったが該当する商品が無かった場合に「入力されたIDは存在しません」みたいな
表示をする場合はどうしますか?

そもそも、クライアントサイドでの書式チェックとサーバサイドでの内容チェックは別物ですよ。。
299nobodyさん:03/12/12 19:57 ID:???
{html_options}を使うと<option>にlabel属性がついちゃいますけど、
みなさんは無視してます? ソースに手を付ける? 
それとも付いてると何かいいことがあるのかしらん??
300286:03/12/12 20:15 ID:???
>>299
<label>要素が付くと、チェックボックス部分だけでなく文字列を
クリックしてもトグルできるようになるよ。

[x] この文字列をクリックでもOK

IEはどうか知らんけど、Firebirdではちゃんと動くから俺は
気にせず使ってる。
301nobodyさん:03/12/12 21:55 ID:???
javascriptをバンバン使ってる企業サイトもあるわけだが。
302286:03/12/12 22:37 ID:???
>>301
JavaScriptをオフにするとまともに閲覧できない企業サイトもあるわけだが。

と言うか別にJavaScriptを使うのは構わないんだけど、エラー処理を
JavaScriptだけで行おうとするWebプログラマはアホということ。
303nobodyさん:03/12/13 00:34 ID:lh7ZJy1b
smartyもこれを使う人もsmartじゃないんですね。w
304nobodyさん:03/12/13 00:44 ID:???
>>303
wを使う人
305nobodyさん:03/12/13 14:25 ID:???
デザインとコンテンツの分離とか言ってる奴に限ってコンテンツは糞。
306nobodyさん:03/12/13 15:55 ID:???
それはディレクターの責任ですから
307nobodyさん:03/12/13 18:03 ID:???
もう少し正しく言うなら"デザインとロジックの分離"なワケで
あのスレは途中でタイトルが間違ってる事を指摘されてたワケだが。
実際に仕事とかで「デザインとコンテンツの分離が・・・」とか言い出したヤツがいたら
あぁコイツは分かって言ってねーんだなぁと9割方思っていい。
308nobodyさん:03/12/13 19:59 ID:???
>>292
んんと、Smarty使ってるような感じで
そのまま別のPHPファイルをincludeしてる
SmartyはSmartyで便利と思うんだけど
Smartyのコードだと外部ファイル側で小回りが利かなくなるというか・・・
309nobodyさん:03/12/13 22:37 ID:ittzKU4p
SmartyをWindows上で利用しているのですが、以下のエラーが出て動いてくれません。

Warning: Smarty error: problem writing temporary file '/home/sites/site40/templates_c/\%%117\%%1172603085\3fdb11ae15d5f' in d:\home\sites\site40\smarty\Smarty.class.php on line 1144
Warning: touch(): Unable to create file /home/sites/site40/templates_c/\%%117\%%1172603085\index.tpl.php because No such file or directory in d:\home\sites\site40\smarty\core\core.write_compiled_resource.php on line 31
Warning: fetch(/home/sites/site40/templates_c/\%%117\%%1172603085\index.tpl.php): failed to open stream: No such file or directory in d:\home\sites\site40\smarty\Smarty.class.php on line 1291
Warning: fetch(): Failed opening '/home/sites/site40/templates_c/\%%117\%%1172603085\index.tpl.php' for inclusion (include_path='.;c:\php4\pear') in d:\home\sites\site40\smarty\Smarty.class.php on line 1291

チェックすべき点や参考になるサイトなどがあったら教えていただけないでしょうか?

環境
Windows2000 professional
php4.3.4
310309:03/12/13 22:44 ID:???
>>309
$smarty->template_dir = '/home/sites/site40/templates/';
という風にしていたのを
$smarty->template_dir = 'd:/home/sites/site40/templates/';
としたら動きました。

スレ汚し申し訳ないです。

今からしっかりと勉強してSmartyの世界につかろうと思います。
311286:03/12/14 01:13 ID:???
>>308
んー、なるほどね。
俺は逆にincludeするファイルがPHPで書かれていると、<?php ?>タグが
デザイン(HTMLタグ)とごっちゃになっちゃう気がするのでSmartyにしてます。

いざとなればSmartyのテンプレートファイル中に
{php}
// PHPのコード
{/php}
とすることもできちゃうし。
まあ、実際にはPHPのコードを書かなければいけない状況になったことは無いですけど。
312308:03/12/14 04:19 ID:???
>>311
俺もSmarty化しようと思って
実際使ってみてやっぱり辞めた派なので
HTMLタグとの区別がスッキリするというのはよくわかります

辞めた理由としては
やっぱりインラインでデザイン側にいくつか変数欲しくなった時でも
いちいち呼び出し側でassignしなきゃいけないのが面倒でした

今は事実上Smartyみたいな構成にして
PHPコードで書かれたデザイン用ファイルを用意して普通にincludeしてます
HTMLタグとの混合はショートタグでだいぶましにはなります
それでもやっぱりスマートじゃないよう気がしますが・・・
やっぱりPHPネイティブのテンプレート機構が
あるのが一番いいなと思います
313286:03/12/14 13:22 ID:???
>>312
「いちいち呼び出し側でassignしなきゃいけない」ということは、
デザインとロジックの分離が強制されるということなので気にしないようにしてます。

あと、ショートタグを有効にしているとXHTML(XML)を記述する時にハマるのも
気をつけたいところ。
314nobodyさん:03/12/14 13:33 ID:???
>>312
$aaa->c1 = "111";
$aaa->c2 = "222";
$tpl->assign("aaa", $aaa);
$tpl->display("xxxx.tpl");
-------------------------
{$aaa->c1} {$aaa->c2}

変数増えても平気だ
315nobodyさん:03/12/19 10:20 ID:hqiHAaNv
Smartyを便利に使用していますが,foreachやsectionなど配列をループさせる
関数はありますが単純に数値でループさせるにはどうすればいいのでしょう。
例えば10という数値をアサインして,テンプレートで10回処理を繰り返す
(例えば改行を10回入れるなど)といった処理です。
forは無いようですし,doやwhileもありませんよね?
316nobodyさん:03/12/19 11:22 ID:???
>>315
Smartyの良いトコの一つとしてプラグインによる拡張があるワケで、
こういうタグが無いぞ!と思ったら
http://smarty.incutio.com/?page=SmartyPlugins
から探すか、もしくは自分で作る。
ちなみに回数を指定して繰り返したいなら、BlockRepeatPluginで
そのものズバリの事が出来る。
317nobodyさん:03/12/19 11:27 ID:???
>>316
なるほど。
forのような基本的な関数が無いはずが無いとマニュアルを何度も探していたのですが,
プラグインを使うのですか・・・

紹介していただいたサイトとプラグインをよく読みます。
ありがとうございました。
318nobodyさん:03/12/19 13:00 ID:???
>>317
forやdoやwhileは、その条件や回数がテンプレート(View)とは無関係なものだから
テンプレート内では使えないようになってるんでしょう。

改行を10回入れたい場合はコードのほうで、
$smarty->assign('loop', 10);
とやっておいて、テンプレートでは

{section name=foo loop=$loop}
<br>
{/section}

でOK。
319nobodyさん:03/12/19 13:06 ID:???
>>318
そ、そうなのか?
320nobodyさん:03/12/19 13:15 ID:???
>>319
そうなのか?ってどっちのこと?
forやwhileが無い理由はそういうことだと思うけど。

動的にページの要素を増減させたいケースっていうのはつまり、
「商品の数が増減するからテーブルの行も増減する」とか
「User-Agentによって一部分を表示させたくない」とか
ロジックによる処理ばっかりでしょ。
321317:03/12/19 13:36 ID:???
>>318
> {section name=foo loop=$loop}
> <br>
> {/section}

確認しました。こんなことが出来るんですね。
何で今まで試さなかったんだろう・・・orz

いままで,array_padでダミーの配列を作ってループしていたので,
メモリも節約できて助かります。
$smarty.section.hoge.indexも使えるのでsectionが使えれば万々歳です。

ありがとうございました。
322nobodyさん:03/12/19 15:42 ID:???
ソース見てみたら
$output .= "{$section_props}['loop'] = is_array($attr_value) ? count($attr_value) : max(0, (int)$attr_value);\n";

ってことだった。
loopには配列しか指定できないもんだと思ってたよ。
323nobodyさん:03/12/20 21:52 ID:???
だれかDreamweaverとかでSmarty使ってる人いません?
やっぱりみんな手で組んでるの?
これじゃ、せっかくデザインを分離できてもなーー
324nobodyさん:03/12/21 05:53 ID:???
>>323
使ってますよー
325nobodyさん:03/12/21 10:01 ID:???
>>324
ど、どうやって?
ヒントでも教えて〜
Smarty&PHP側に細工?
ドリ側で細工?
326nobodyさん:03/12/22 21:59 ID:???
>>323
Dreamweaver使ってないんだけど、どういう問題?
SmartyタグのせいでHTMLが正しく解釈されず、デザインビューがメチャクチャになるって事?
多少の対策として、デリミタを{ } から <{ }>みたいにしてるね。xoopsとかは。
327nobodyさん:03/12/23 00:10 ID:???
>>326
デザイナが編集するときにきれいに表示されないってことです。
{section xxxx.....}
とかはそのまま表示されてしまいますし
もちろん
{if xxx}
xxx
{else}
xxx
{/if}
とかも表示が崩れます。
if文の中でタグの開始とか終了とかやってると顕著です。

xoopsかー
ちょっと見てみようかな
328nobodyさん:03/12/23 00:41 ID:???
>>323
そういうときに >>266-275 のAmritaが良いわけですよ。Rubyだけど。

329323:03/12/23 23:30 ID:???
>>325

自分は、趣味で作ってるサイトでやってるだけなので、
ドリにタグが出ても、問題ないです。

職場でもphpとかで開発してるけど、
Smarty?何それ?と言われた(泣く
330nobodyさん:03/12/24 01:11 ID:???
DreamweaverのSmarty Extension・・・いつになったら・・・ウウゥ・・・
331nobodyさん:03/12/24 01:24 ID:???
この手の奴いくつかあるけど
どいつもこいつも独自仕様なんだよな。
大差ねえ野に。
332nobodyさん:03/12/27 20:35 ID:???
smartyって別に個人が1人でレイアウトからプログラムまで全部やる場合は
特にメリット無いよね?
オーバーヘッドが無いとか色々書いてあったけど、
別にこれを使う事で開発が楽になったりプログラムの実行速度が速くなったりはしない?
333nobodyさん:03/12/27 22:12 ID:???
>>332
その色々がもたらすメリットが理解できないなら使っても一緒かな〜と。
オーバーヘッドの意味、分かってる?
334nobodyさん:03/12/28 09:49 ID:???
>>333
クラスとか関数の定義を読み込んだりする
最初にかかる時間の事だと思ってますが
ちゃんとした本とかで勉強した事が無いので合ってるかどうかは分かりません。
335nobodyさん:03/12/30 11:17 ID:???
現在333はオーバーヘッドの意味を勉強中です。
しばらくお待ちください。
336nobodyさん:04/01/02 22:22 ID:???
あけましておめでとうございます。
今年もSmartyを使っていろいろ開発していきましょう!

という自分は、現在自分のサイト(趣味で作っているヘボサイト)を
勉強をかねてSmartyを利用して再構築しています。

正月休みは、マニュアルを読みながらひとつひとつの動きに
感激しっぱなしでした。

仕事でJavaServletやJSPを利用したWebシステムの開発をしているので、
Smartyは非常にとっつきやすいです。
337nobodyさん:04/01/04 01:15 ID:LkXOe+SC
英語圏の人向けにXHTMLでページをつくってるんですが、
tplファイルに<?xml version="1.0" encoding="utf-8"?>
としても特に問題起こらないですか?
(もちろんtplファイルの文字コードはutf-8。ただし、phpスクリプトはEUC)


338nobodyさん:04/01/04 09:10 ID:???
>>337
やってみたの?
339337:04/01/05 22:52 ID:SHqc05oc
>>338
いちお、いまんとこ問題なさげなんだけど・・・
340nobodyさん:04/01/05 23:33 ID:???
>>337を含め、最近のphp界隈は問題ありすぎ
341nobodyさん:04/01/06 16:18 ID:???
>>340
PHPどうのこうのっていう以前の問題が多すぎだね。
建築しらない人が、日曜大工でビル建てようとしてるような人が多すぎる。
342nobodyさん:04/01/11 21:34 ID:ESnicSkb
     ______
    /_      |
    /. \ ̄ ̄ ̄ ̄|
  /  /  ― ― |
  |  /    -  - |
  ||| (6      > |
 | | |     ┏━┓|   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| | | |     ┃─┃|  < 正直、Smartyはスマートだ。
|| | | |  \ ┃  ┃/    \________
| || | |    ̄  ̄|
343nobodyさん:04/01/12 02:03 ID:???
どこがスマートだよ。
全然デザインとロジックの分離ができてねーじゃん。
糞杉。
344nobodyさん:04/01/12 03:28 ID:???
いくらスマートなモノでも使い方がスマートでないとスマートにはなりませんよ。
345nobodyさん:04/01/12 12:58 ID:???
スマートなら自前で実装するよ
346nobodyさん:04/01/12 14:36 ID:XY33XXMX
     ______
    /_      |
    /. \ ̄ ̄ ̄ ̄|
  /  /  ― ― |
  |  /    -  - |
  ||| (6      > |
 | | |     ┏━┓|   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| | | |     ┃─┃|  < 正直、Smartyは名前の通りスマートだ。
|| | | |  \ ┃  ┃/    \________
| || | |    ̄  ̄|
347nobodyさん:04/01/12 19:22 ID:???
古いAAだな。久々に見たぞ
348nobodyさん:04/01/12 23:29 ID:???
いまやハワイのチャンピオンだからな
349nobodyさん:04/01/18 13:31 ID:stryZ884
盛り上がっていこうゼ
350nobodyさん:04/01/19 08:48 ID:vtz23jMl
2.6.1
351nobodyさん:04/01/28 19:47 ID:???
QuickFormとSmartyの連携
352nobodyさん:04/02/12 11:33 ID:KTntpHdL
smartyと相性のいいホームページ作成ソフトって何ですか?

私はホームページビルダー7を使ってますが、画面をデザインした
あとに、必ずHTMLを見て修正する必要があるんです。

例えば、適当にHPビルダーでフォームとか配置して部品を付けると、
それぞれの部品が<form>でくくられてしまったり・・・

なのでデザイナさんに画面を作ってもらっても、結局それをデザイ
ンを壊さないようにエディタで修正するハメになるのです。

ホームページ作成ソフトで作ったら、そのHTMLは見なくていい。
そんなホームページ作成ソフトはないでしょうか?
353nobodyさん:04/02/16 06:31 ID:fxjTO9Xi
>255
同感です。
私も、いいホームページソフトを教えてほしいです。
354nobodyさん:04/02/18 05:55 ID:Rpd68eXE
>255
Dreamweaverなどは?
いちおうPHPなどにも良さそうなことがメーカのHPに書いてありますが・・・
355nobodyさん:04/02/18 08:05 ID:bgploQOu
すいません、Smrtyの入れ子ってどうやるのでしょうか?
もともと、
------------------------------------------------------------
<html>
(略)
{php}
include("./category/" . getParam( 'cat' ) . ".inc");
{/php}
(略)
</html>
------------------------------------------------------------
というtmpl(テンプレートファイル)があるのですが・・・

(ちなみに、getParam関数は↓こんなかんじ)
function getParam( $name )
{
$val = $_GET[$name];
if( $val == "" ){
$val = $_POST[$name];
}
return( $val );
}

で、catの値によっては、
includeしたファイルの中で、さらにsmartyを使いと思ってます。
マニュアル見たり試行錯誤してもわらなかったので、
どなたかご存じの方、いらっしゃったら、教えていただければ幸いです。
356355:04/02/18 09:04 ID:???
自己レス
incファイルの中で、

global $smarty;

$smarty->assign("foo", $line[1]);

$smarty->assign("bar", $line[2]);

とやったらできてしまいました。
(するとこれは、「入れ子」とはいわないのかな。まぁいいや)
357355:04/02/18 09:07 ID:???
前言(>>356)撤回。何も表示されてませんでした。んー、どうすればいいのだろう。
358nobodyさん:04/02/18 09:44 ID:???
>>355
そもそもその incファイルでは $lineは定義されているのか?
俺ならテンプレートリソースにするのが簡単かつ安全だと思うけど。

あと、脱字大杉
359355:04/02/18 10:55 ID:???
>>358さんありがとうございます。
>$lineは定義されているのか?
はい。

「テンプレートリソース」というものを知らないので、勉強してそっちでやってみるかもしれません。
ありがとうございます。

>あと、脱字大杉
どうもすみませんでした。
360 ◆AngelH/kMI :04/02/28 23:27 ID:???
久々に書き込み。
引っ越しして超ナローバンドなためきつい・・・。
後2週間はこのままかと思うと気が重いっス。

http://sourceforge.jp/projects/phpoot/
ネタ投入。
見る限りではなかなかよさそうなんだけど、
誰か使ってみた人いますか。
自分所では動作しなく・・・。

>>352-354
自分はDreamweaver使ってますよ。
設定すれば勝手に書き換えたりしなくなるし。
(比較的)まともなHTMLはき出してくれるので、ver1.2の頃から愛用しています。
361nobodyさん:04/02/29 08:02 ID:???
>>360
俺も翻訳者のwebみて知ってこれ良さそうと思ったけど
何ひとつサンプルが動かないのは如何なものか(´д`;)
ぜったい テストされてねぇ〜・・・・・

とりあえずソース何ヵ所かいじったら動いたけど<img><br>タグ閉じてないよっておこられまくって
ふて寝しますたorz
362 ◆AngelH/kMI :04/02/29 14:47 ID:???
>>361
む、動きましたか?
触った箇所教えてくれると助かりまつ。

<img><br>が動かないのは、XHTML準拠、とのことでエラーになってるのかと。
それぞれ
<img src="hogehoge" />
<br />
にして試してみてー。
363nobodyさん:04/02/29 16:53 ID:???
>> 360-362
phpoot::_compileに渡す compiled_fileの作成の仕方が間違ってるね。
存在しない pathに対して realpath()を使っていらっしゃる。

× $compiled_file = realpath($this->_compiled_dir . '/' . basename($this->_template_file) . PHPOOT_EXT);
○ $compiled_file = realpath($this->_compiled_dir . '/' . basename($this->_template_file)) . PHPOOT_EXT;

<img><br>ってのはサンプルにはないよね?
試しに書いてみたけど、<img> -> <img />に補正されるし、<img><br>は削除されるし、
こいつは XML_HTMLSaxのせいか? PEAR使ってるなら、命名規則も従ってくれると良いね。

Amrita意識してるようだけど、この品質なら、今から使うメリットはなさそうだと思った。
Smartyは枯れてきてるし、PEARなら HTML_Template_Flexyのほうが`まだ`出来が良い。
364 ◆AngelH/kMI :04/02/29 21:46 ID:???
>>363
サンクス。
こっちでも一応動作確認出来ました。
まあ、今後に期待ってことでSmartyに戻ります(笑

うちの環境だと、一回目のアクセス時(つまりcompileするときに)
phpoot.parser.phpがundefined index出しまくりで気になる・・・。
365nobodyさん:04/03/08 07:32 ID:???
{$hoshu}
366nobodyさん:04/03/11 16:02 ID:???
書籍のデータベースを検索して表示するページを作っています。
現在すべてのページで
<?php
include 'header.php';
//メイン処理
include 'footer.php';
?>
としていますが、これをSmarty で記述する場合、
main.tpl の中でindlude or include_php するのが良いのか、
main.php の中で、
func_assign_header();//ヘッダー用の表示をアサインする関数
func_assign_footer();
$smarty->display('header.tlp');
$smarty->display('main.tlp');
$smarty->display('footer.tlp');
みたいにすれば良いのか、或いはもっとべつの良い方法があるのか・・・というより、
ありそうだなあ、と悩んでいます。。。
>>96 さんとほぼ同じケースだと思うのですが、アホなので>>97 さんのアドバイスが
良く分かっていません。
ヒントへのポインタでも結構ですのでアドバイスをお願いできますでしょうか??
367366:04/03/11 16:11 ID:???
言い忘れていました、header の部分も、ページごとに動的に変化します。
今のところ<title>xxxx</title> に表示するデータの一部を入れているだけですが。。。
368nobodyさん:04/03/12 01:00 ID:9XQjrMWL
最新のPHP+SmartyでSafe modeをonにすると...
pluginsがエラーになるんですけど...
ちなみにSmartyは/usr/local/lib/php/Smarty/以下にインストール
しています。オーナーはrootです。
アプリのオーナーはroot以外のユーザーです。

プログラムは{html_options}のリファレンスのサンプルです。
エラーメッセージは
Fatal error: Smarty error: [in XXXXXXXX.tmpl line nn]: [plugin] unknown tag - 'html_options' (core.load_plugins.php, line 118) in /usr/local/lib/php/Smarty/Smarty.class.php on line 1102

Safe mode系のエラーの場合は
SAFE MODE何たらかんたらとかuid/gidがなんたらというメッセージが多いと思うんだけど...

アプリのオーナーをrootにしたりSafe modeをOffにすると正しく動くのよね。
php.iniがいけないのかなぁ?
369nobodyさん:04/03/12 13:35 ID:???
>>366
自分でテンプレートもPHPのコードも書くならどっちでもいいんじゃないすか?
370nobodyさん:04/03/12 21:47 ID:???
>>366
Smartyのサブクラスを作成(例:mySmarty)して、
親クラスのメソッド:display()をサブクラスでオーバーライドしれば?

mySmartyの生成時にヘッダ・フッタのデータを渡して、
$mySmarty->display()したときにmySmarty内部で、
ヘッダ・フッタをassignして、親クラスのdisplay()を呼ぶみたいな。
371nobodyさん:04/03/13 00:31 ID:???
>>366
main.php では、
func_assign_header();
func_assign_footer();
$smarty->display('main.tpl');

main.tlp 内で、
{include file="header.tpl"}
{include file="footer.tpl"}

僕ならこうする。
どうするのが良い悪いよりは好みの問題でしょうね
372nobodyさん:04/03/15 13:25 ID:???
>>366

先週から使い始めました。

header.tlp
footer.tlp

上記の2ページの内容or作る人のスタイルにもよると思いますが、
ヘッダー・フッターが静的なHTMLなのであれば、テンプレート側で読み込んだ方が、
テンプレートを作る人のことを考えれば理解しやすいんじゃないでしょうか?

テンプレート作る人が、呼び出し元のPHPを読まないと、
ページ構成を理解できないっつうのは、Smartyの利点を1つ殺してる気もするし・・・
373nobodyさん:04/04/20 02:11 ID:???
Smarty plugin のpager
http://smarty.incutio.com/?page=pager
これの使い方が今ひとつ分かりません。どなたかヒントいただけないでしょうか?
374nobodyさん:04/04/20 19:31 ID:???
PEARのPagerとかDB Pagerを参考にしてみたら
使った事ないからなんともいえないけど
375373:04/04/21 14:27 ID:???
アドバイスありがとうございます。PEAR の方を見ながらいろいろと試行錯誤してみました。
今のところ次の方法で使えてます。

基本的には
{pager rowcount=レコード総数 limit=ページ内に表示する数 txt_first=""}
で、各ページへのリンクがずらずらと並びます。

細かなパラメータは、
show='page' or 'record'  //表示される数値をページ数とするかレコード数とするか
posvar='now_page'  //現在位置を識別するための変数名
forwardvars=$forwardvars  //$forwardvars=array("hl"=>"ja","lang"=>"lang_ja") など、
ページ間で引き継ぎたい変数と値
txt_prev='<<<' //「前のページ」
txt_next='>>>' //「次のページ」
separator='-' //ページorレコード数の区切り文字
shift='1' //posvar の初期値
・・・等々

なお、こちらで使用しているスクリプトとの兼ね合いから、function.pager.php の142 行目の
!empty($value) をisset($value) に変更する必要がありました。注釈文にあるように、
$_REQUEST で変数を受け取るなら変更は必要ないのかも知れません。

で、一応使えるようにはなったのですが、参考にしたPEAR/Pager のほうが使いやすそうですね。
Smarty との連携をどうすれば良いのかまだちょっと見えていないのですが・・・。
#PEAR のDB_Pager って今後はDB_common::limitQuery() の方を使うほうが良いのかな??
376nobodyさん:04/04/21 17:55 ID:???
>>375
limitQueryでもlimitつけたSQLでも同じなんだけど
SQLの時点でlimitをつけちゃうと実質の総レコード数が取れない
25レコードあったとしてlimit 10, 20のクエリでnumrowsすると10が返って来る
ページャのロジック書こうとすると総件数がいる
DB_Pagerの便利なとこは引数投げるとfrom-limit間のレコードだけを
fetchする状態の結果セットを返してくれる
だから俺はDB_Pager使ってる
377nobodyさん:04/04/23 13:02 ID:???
{section} のネストをうまく動作させることが出来ません。

{section name=book loop=$main_dat}
{$main_dat[book].name}
{$main_dat[book].memo}
  {section name=book_sub loop=$sub_dat[book]}
  abc
  {$sub_dat[book][book_sub].job}
  {$sub_dat[book][book_sub].personid}
  {$sub_dat[book][book_sub].name}
  {/section}
<br>
{/section}
section の例を見ながら↑のようにしてみたのですが、内側のループが実行されません。
元になるphp 側では、
while ($i < $num) {
  $main_dat = $result[$i];
  $smarty -> append("main_dat", $main_dat);
  $j = 0;
  while ($j < $sound_sub_num) {
    $sub_dat = $result_sub[$j];
    $smarty -> append("sub_dat[$i]", $sub_dat);
    $j++;
  }
  $i++;
}
こんな感じでassign しています(こまかな処理は省略しています)。
378377:04/04/23 13:03 ID:???
また、{debug} でみると変数には
{$main_dat}
Array (2)
0 => Array (3)
id => 266
name => fmlバイブル
memo => empty
1 => Array (3)
id => 267
name => PostgreSQL完全攻略ガイド
memo => empty
{$sub_dat[0]}
Array (2)
0 => Array (3)
personid => 2437
name => 深町某
job => 著者
1 => Array (3)
personid => 358
name => 佐々木某
job => 監修
{$sub_dat[1]}
Array (2)
0 => Array (3)
personid => 291
name => 石井某
job => 著者
1 => Array (3)
personid => 648
name => 山本某
job => 出版
こんな感じに表示されます。
379377:04/04/23 13:04 ID:???
php から渡された変数には値が入っているので、ループ無しで直接{$sub_dat[0][0].job} としても表示されませんでした。
バッククォートあたりだとは思うのですが{`$sub_dat[0][0].job`} とすると
syntax error: unrecognized tag のFatal error が出てしまいます。

アドバイスをお願いできますでしょうか? 長文ごめんなさい。
380377:04/04/23 13:42 ID:???
あああ。。。
{$sub_dat}
 Array (2)
  0 => Array (2)
   0 => Array (3)
    personid => 2437
    name => 深町某
    job => 著者
   1 => Array (3)
    personid => 358
    name => 佐々木某
    job => 監修
  1 => Array (2)
   0 => Array (3)
    personid => 291
    name => 石井某
    job => 著者
   1 => Array (3)
    personid => 648
    name => 山本某
    job => 出版
こうならないとsection の例文は使えないんですね。すっかり煮詰まってました。
php 側をちょっと直せばできそうです。うう、、、スレ汚し済みませんでした。
381nobodyさん:04/05/14 17:14 ID:???
smartyって、
外部ファイルを書き出すことはできますか?
382381:04/05/14 19:38 ID:???
あるいは、PHP版HTML::Templateで外部ファイルを書き出すことはできなすか?
383nobodyさん:04/05/14 20:12 ID:???
>>381
出力せずに一旦変数へ取り込んで、書きだしゃいいだろ。
384381:04/05/15 01:31 ID:???
いったん変数にとりこむって、どうすればいいのでしょうか?
$smarty->displayだと、出力しちゃいますよね。。。
385nobodyさん:04/05/15 01:50 ID:???
いくらなんでもマニュアル読まなさ杉
せっかく日本語であるのに
386381:04/05/15 02:01 ID:???
をを、みのがしていた、
// 出力を取り込む
$output = $smarty->fetch("index.tpl");
ですね。ありがとうございました。
387nobodyさん:04/06/06 14:52 ID:???
smartyは配列の使い方が面倒だなぁ。
連想配列はまだいいんだけど。
388nobodyさん:04/06/10 14:49 ID:???
ttp://www.phpinsider.com/php/code/SmartyFormtool/
のformtool_move, formtool_moveallを使いたいんだけど、

The "save_from" and "save_to" parameters are the names of a hidden fields in the form that the new orders are saved into, comma separated.

この文の意味が理解できない。orz
FORMを作るときに"save_from" と "save_to"という名前を持つ hidden フィールドを
作れということ?NAMEはいいとしてVALUEには何を入れるのだろうか?


389nobodyさん:04/06/10 19:33 ID:???
試さずにカキコ。

>>388 例題をそのまま入力して{debug}したら何か分かったりしませんか?
390nobodyさん:04/06/10 20:03 ID:???
>>389
例題をそのまま試すと、テーブルは表示されるのですが、中のボタンが表示
されるところで、

Warning: Smarty error: formtool_moveup: missing 'save_from' parameter
in C:\Apache\Smarty\Smarty.class.php on line 1102

というWarningがでます。
391nobodyさん:04/06/11 15:12 ID:???
ちょっとだけ試してカキコ

{formtool_moveall from="colors5[]" to="colors6[]" save_from="dd" save_to="ff" button_text=">>"}
のように{formtool_moveall ・・・} と{formtool_move ・・・} の中に、
save_from="dd" save_to="ff"
を入れておくと取りあえずmove は出来るようだ。

dd, ff はjavascript で
<input type=button value="<<" onClick="formtool_moveall(this.form.elements['colors6[]'],this.form.elements['colors5[]'],this.form.elements['dd'],this.form.elements['ff'])">
のように展開されるので、適切なものに変更すれば良さそう。

javascript は詳しくないので、あとは調べて還元してくれると嬉しい。
392388=390:04/06/11 16:54 ID:???
>>391
お手数おかけしましてすみません。

demo画面のソースをみると、ddやffはcolors5_saveやcolors6_saveなんかに
置き換えると良さそうです。
しかし、実行してみるとページエラーが発生してmoveができませんでした。
JavaScriptコンソールでみるとformtool_moveは定義されてないとエラーが
でています。

私もJavaScriptはよくわからないのですが、この機能は是非使いたいので
調べてみます。
393nobodyさん:04/06/11 17:24 ID:???
.tpl ファイルに
{formtool_init src="/hoge/javascripts/formtool.js"}
は入れた? パスは適宜直してね。
394388=390:04/06/11 18:04 ID:???
>>393
動きました!

javascriptへのパスが一文字間違ってました。
どうもありがとうございました。
395nobodyさん:04/06/28 15:15 ID:???
PHP 質問スレッドの方から誘導されて来ました。
過去ログさらってみましたが見あたらないので質問をば。
--

Smarty を久々にバージョンアップした所、動作が変わって対処に悩んでまつ。

定義されていないテンプレート変数、例えば {$hoge} に assign が無ければ、
以前はスキップしてくれたのですが、バージョンアップ後は
>FATAL .. Undefined index hoge
とエラーを吐いています。
いちいち {if isset($hoge)} と囲うのも鬱陶しく、どう対処すべきかな〜、と。

# Smarty の設定かと思いマニュアル見直しましたが適当な設定は見あたらず。
# $smarty->undefined = NULL とかも試しましたが変化無しでした。
396nobodyさん:04/06/28 15:55 ID:???
>395
違うかもしれんが、
{$hoge|default:""}
でいいんでないかい?
397395:04/06/28 16:08 ID:???
>>396
if で囲むよりそちらの修正子の方が分かりやすいですね。
取り敢えずそちらで逃げる事にします。
謝謝。
398396:04/06/28 16:51 ID:???
HelpのTips & Tricksにも書いてあるけど、
テンプレートの最初のほうとかに
{assign var="hoge" value=$hoge|default:""}
見たいに書いとくとすっきりするかもね。
単発で使うのなら{$hoge|default:""}でよさげ。
399nobodyさん:04/06/28 23:20 ID:???
もうこうなっちゃうと
テンプレートというより新しい言語のようだ。
乗り換えることにする。
400nobodyさん:04/06/29 00:19 ID:???
>>399
どんな優れたライブラリでも、使い方次第で単純にも煩雑にも書けるわけで。
smartyにいたってはテンプレートにロジックを書く事を許容しちゃってるので
mvc(もう少し適切な言葉がありそうだな・・・)を意識しないとsmartyを
使用する有り難味が薄れるだろうね。まぁ俺はとっくに乗り換えたんだけれど・・・。

>>395
$smarty->undefined はもう無くなったよ。未定義の場合は基本的にnullで決めうちになった。
ただ、テンプレート変数のtypoがあった場合に何も表示されないだとデバッグに困るから
$smarty->debugging = true; の時だけエラーが出るようになってる。
だからこれをfalseにしたらどう?一応2.6.3で確かめてみたところ大丈夫だったが。
401395:04/06/29 02:54 ID:???

>>400
情報感謝。
で、勘違い爆裂でしたので経過報告 _| ̄|◯

コンパイル後に生成されるコードはそれぞれ
修正子有り <?php echo $this->_tpl_vars['hoge']; ?>
修正子無し <?php echo ((is_array($_tmp=@$this->_tpl_vars['hoge'])) ? $this->_run_mod_handler('default', true, $_tmp, 'funi') : smarty_modifier_default($_tmp, 'funi')); ?>

で、旧バージョンの Smarty でも確認してみると生成されているコードは同じ、、という事は Smarty の問題ではない。
同じマシン上で PHP も php.ini も同じ物を使用していて両者の違いは、と言えば採用している他のライブラリ。
結局原因は Mojavi のエラー制御にある模様。
お手数かけますた、、

PHP 4.3.4 (Win)
Smarty 2.6.3

>>399,400
よろしければ遷都先のテンプレートなぞを、、
自分は次は Flexy 使ってみようかな、とか考えとります。
402400:04/06/29 03:57 ID:???
>>401
生成されるコードに違いはなくても、debugging = false した時に
fetchメソッドの内で error_reporting() & ~E_NOTICE されるようになってるんだけど。
mojaviはE_ALL前提で作られてるし、(ていうかコードの初っ端がerror_reporing(E_ALL);)
途中でエラーレベルも変更したりしないから、やっぱsmartyか原因かと思うんだけど・・・違う??
403395:04/06/29 05:20 ID:???
>>402
勉強になります。

Mojavi を使っていない方のアプリケーションの Smarty を 2.6.3 に入れ替えてみた所、問題は発生しませんでした。
って事でやはり Mojavi かな、と。。

> fetchメソッドの内で error_reporting() & ~E_NOTICE されるようになってるんだけど。

Mojavi によりエラーハンドラに errorLogger::standard() が設定されており、
件の <?php echo $this->_tpl_vars['hoge']; ?> で E_NOTICE レベルのエラーが発生し上記エラーハンドラが呼ばれています。
で、E_USER_* 以外の振り分けが考慮されておらず、errorLogger::fatal に回されて FATAL として解釈され、
FATAL ..(snip).. undefined index
のようなエラーメッセージが出力されている模様。

errorLogger::standard() の中で error_reporting の値をとってみると 2039 になっており E_ALL ^ E_NOTICE と等価でした。
php.ini と mojavi では error_reporting に E_ALL を指定しています。

眠くてまとまらないのですがこんな所で、、

# 問題が Smarty にあると思い込んで突っ走ってしまったのが敗因、、orz
# でも色々と助言をいただき良い勉強の機会になりました。多謝です&お手数かけました。
404nobodyさん:04/07/06 17:04 ID:???
PHP二年やってきて今更PEARとSmarty使ってコーディングしてみたんだけど、これはすごいね。
俺のアドレナリンが吹き出る。

あとはPHP エディタで対応してくれれば文句なしー。
405nobodyさん:04/07/14 10:40 ID:???
>>388のSmartyFormtoolですが、Javascriptがおかしいですね。

何かをセレクトして右から左へ移動…1
何もセレクトせず左から右へ移動…2

1のときと1+2のときでフォームから送られてくる値が違う
(2の操作で値全体が入れ替わってしまう)。
Javascriptがわかれば直すんだけど…

406nobodyさん:04/07/17 11:11 ID:ckMFe6vn
Smartyのwordwrapは日本語にかけても大丈夫でしょうか?
エンコードはUTF-8を使ってます。
407nobodyさん:04/07/17 11:38 ID:???
>>406
かけてみた?
408406:04/07/17 12:16 ID:???
>>407
いくつかの文章で試してみました。
EUC-JPの時は文字化けしてたけど、UTF-8なら一見すると大丈夫かと思ったら
よく見ると文字が一部消えたりしてました。やっぱダメそうですね。
409nobodyさん:04/07/22 17:59 ID:gMMxLyKo
たまにはageてもいいじゃない
やまない雨はないじゃない
410nobodyさん:04/08/01 00:39 ID:QU2e9+ue
一つ聞いてやるSmartyなんか使わなくてもMVCはできるだろぉう?
なんで、みんなSmaryマンセーなの?
411nobodyさん:04/08/01 04:46 ID:???
態度が気に喰わない
412nobodyさん:04/08/01 08:44 ID:QU2e9+ue
>411
えー、そんな事言わずに教えてよぉー。
413nobodyさん:04/08/01 13:32 ID:???
女だったら教える。
414nobodyさん:04/08/01 17:08 ID:???
要はさ、PHPって難しいのよ。
プログラミング言語としては簡単な部類に入るかも知れないけど、
HTMLくらいしか理解できないヤシにはとっつきにくい。
例えばforeach構文とか、デザイナーに理解できるか、と言えば
(人それぞれなのはもちろんだが)確実には理解できないと言っていい。

Perlの話になるが、代表的なTemplateとして、HTML::TemplateとTemplate::Toolkit
と言うのがある。Template::Toolkitは、様々な構文やら他のPerlモジュールを呼び出す機能やら、
その他もろもろの機能がついている。逆にHTML::Templateはif分のtrueとfalseの判定、
そしてループ機能くらいしかついていない。
どっちがいい?と聞かれれば、プログラマ的にはTemplate::Toolkitの方が楽。
でも、デザイナーには多分HTML::Templateのほうがわかりやすい。

PHP単体でMVCするのもいいんだけど、Smartyにしてある種の機能制限の方がわかりやすいって人もいるんだろう。
漏れはPHP単体のMVCだけどw
415nobodyさん:04/08/02 03:23 ID:???
これだけロジック書ける・書かないと動かないテンプラで機能制限も糞もない。
ビューをデータが規定するタイプのものならともかくそれ以外ならどれも変わらね。
410には馬鹿馬鹿しくて答える気がおきね。
416nobodyさん:04/08/02 14:58 ID:???
結局は流行かよ。
ちゅまんね〜。
417nobodyさん:04/08/02 14:59 ID:???
おまえら全員ハルヒコだよ。
418nobodyさん:04/08/03 00:05 ID:???
だまれナツチュウ
419nobodyさん:04/08/03 18:16 ID:???
基地外を弄るな♪
420nobodyさん:04/08/04 16:49 ID:T7C0bXmt
フォームから正の整数を入力して送信すると、1からその数までの整数の並びを表示するPHPスクリプトを作らなくてはならないのですが皆目検討がつきません…(つД`)
なにかアドバイスをお願いします。
421nobodyさん:04/08/04 16:56 ID:???
>420
宿題は自力でやろうな坊や
てか、ここで聞くな馬鹿
422nobodyさん:04/08/04 23:15 ID:???
ageるとロクな事がないな
423nobodyさん:04/08/05 21:11 ID:???
range()
424nobodyさん:04/08/05 23:41 ID:???
キャッシュをONにすると色々問題が起きます
425nobodyさん:04/08/06 11:13 ID:???
phpのnumber_formatに相当する関数ってないですよね。
っと、書き込もうとして気づいた。register_functionで追加すればいいのか。
426 ◆AngelH/kMI :04/08/08 22:37 ID:???
>>425
number_formatならregister_function使わなくても呼べますよ
427nobodyさん:04/08/09 01:33 ID:???
>>426
あら本当だ。フィルタ的に使えるのね。

つーか、引数1つで戻り値があるPHPの関数は以下の要領で使えるんですね。
{$number | number_format}
{$string | md5}
引数が複数の場合はどうするんだろう。出来ないのかな?(そんな機会はそうそうなさそうだが)
マニュアルに書いてありましたっけ?
探してみたんですけど、どこに載っているのか見つけられなかった。
428 ◆AngelH/kMI :04/08/09 05:02 ID:???
>>427
引数が複数ある場合は第2引数以降をコロン区切りで。

かなり極端な例だと
{long_multibyte_string|mb_strimwidth:0:40:"..>"}
こんな感じ。
まあでも、ここまでテンプレートに書くのはどうかとも思う・・・。
「見た目の変更」だからテンプレートに書いてもいい気がするけど

{long_multibyte_string[i].titile|escape|mb_strimwidth:0:40:".."|defaust:"データ無し"}
とかどうなのかと(苦笑
429425=427@ ◆Kiss.FX29M :04/08/09 09:33 ID:???
>>428
いろいろどーもです。
>>425のregister_functionに気づいた時点で書き込みをやめようと思ったんですが、
書き込んでよかった。勉強になりました。

//何気に古い酉を晒してみりゅw
430nobodyさん:04/08/09 18:15 ID:???
うお!誰かと思ったら(笑
431nobodyさん:04/08/13 16:34 ID:???
modifire?
432nobodyさん:04/09/01 16:13 ID:DiPaFBrX
age
433nobodyさん:04/09/02 00:30 ID:???
modifierでmb_truncateとかmb_wrapだの色々用意してはみたのだが、デザイナさんが使ってくれなくて寂しい
434nobodyさん:04/09/02 11:15 ID:???
>>433
デザイナがHTML作って、
プログラマが組み込んでいるので使い放題!

・・・・(T-T)
435nobodyさん:04/09/11 11:24:55 ID:vqhAT/1H
同じ例えば xxxx.php 内でユーザーがログインしてるかしてないかによって
表示を変えて使う場合、smartyのキャッシュ機能が問題起こす可能性はあるでしょうか?
誰かがログインした状態がキャッシュされてしまって
ログインしていない人にそのページが見えちゃうとか。
436nobodyさん:04/09/11 12:35:32 ID:???
2.6.4入れたら、単純な四則演算(+とか/とか)でエラーが出るよぅ。
437nobodyさん:04/09/11 18:28:06 ID:K5FwXM+0
>>435
キャッシュ、意外と使えなかった・・・。

テンプレートにアサインした結果をキャッシュするから、
テンプレートが同一なら問題起こる可能性あり。

>>436
どんな式?
438nobodyさん:04/09/12 01:33:02 ID:???
Smartyのキャッシュ機能かぁ、使ったこと無いが需要あるのかな。
php使った動的ページで、しかもログインページなんて
ブラウザのキャッシュすら一応Metaタグとかで無効にしといた方が良い気がするが。

テンプレートエンジンのオーバーヘッドが気になるのなら
それこそ、動的な出力とインクルードしたテンプレートから生成された出力結果を
ファイルに書き出して静的htmlファイルを公開フォルダに置いた方が
良いだろうし。
439nobodyさん:04/09/12 02:45:25 ID:JBS0QrEF
>>435
キャッシュIDをうまく使ってやれば平気。

>>438
テンプレートエンジンより、assignする値をDBなんかから持ってきてるときにオーバーヘッドがでる。
440nobodyさん:04/09/12 04:22:23 ID:???
Smartyってあんまメリットなくない?
PHP自体で十分デザインとテンプレートの分離はできるし、
キャッシュ機能つくるのも特に大して手間じゃないし…

441nobodyさん:04/09/12 04:33:01 ID:???
>>440
まずは自分のレスだけでいいから省みてみろ
442nobodyさん:04/09/12 05:08:05 ID:???
>>441
まずは自分のレスだけでいいから省みてみろ
443nobodyさん:04/09/12 05:18:14 ID:???
>デザインとテンプレートの分離

ワラッタw
444nobodyさん:04/09/12 06:21:43 ID:???
>>439
??そりゃDBだろうがlogファイルからだろうが、演算結果だろうが
動的に出力する値は全部オーバーヘッドになるだろうさ。
Smartyのキャッシュ機能とはまるで関係ないのでは?
そこが気になるならWebアプリ自体使えないと思うが。
445nobodyさん:04/09/12 06:31:44 ID:???
>>440
Smartyのメリットはプログラマよりデザイナに対してのものだと思う
446nobodyさん:04/09/12 06:37:44 ID:???
いま、>>445がいいこといった。 メモしとけ。
447nobodyさん:04/09/12 06:45:25 ID:???
>>444
いちいち値取りにいくのがオーバーヘッドになるから
その為のキャッシュ機能ですが?
448nobodyさん:04/09/12 08:27:29 ID:7xfelydB
キャッシュをONにしたら、2,3割の確率で、しかもランダムな箇所で、
エラーを吐くようになったのですが・・・。

これってどうしようもないですか?

ひょっとして、テンプレートファイルのなかで
{php}
ほげほげ
{/php}
を数カ所使ってるのがいけないのでしょうか・・・
449nobodyさん:04/09/12 13:42:47 ID:???
>>445
いや、デザイナの為ならなおさらSmarty使わないほうがいいだろw
DWとかはPHPタグで囲んだ部分は表示されないようになってるし
450nobodyさん:04/09/12 15:17:40 ID:???
>>448
せめてエラーメッセージを書かないと。
451nobodyさん:04/09/12 15:31:00 ID:???
>>448
すいません、同時にPHPを5.0.1にあげたんですが、4.3.8に戻して、
smartyのキャッシュを有効にしても、全然問題なかったです。

PHP5.0.1のせいだったみたいです。どうもすみません。
//しかしPHP5のSOAP使いたい・・・
452436:04/09/13 00:26:30 ID:???
>>437
遅レスすまんす。
普通に{$hoge+100}とかです。
本家のフォーラム見たら同じ問題が出ていて、CSV版では問題ないよ。って書いてあった。
めんどいから2.6.3に戻しましたけど。
453nobodyさん:04/09/13 02:45:25 ID:???
>>449
オーサリングツール使ってhtmlファイルだけ渡して後は知らねぇってデザイナと、
デザイン上の修正の度にプログラマにも修正依頼しなきゃいけない様な
状況でしか仕事したことないなら、その環境は恥じた方がいいよ。
454nobodyさん:04/09/13 10:46:56 ID:???
別にオーサリングツールで編集しやすいって言っただけでなんで…
勝手に勘違いして人の仕事環境妄想して、妄想で創った人物像相手に
レスする癖は恥じた方がいいよ?
例えばSmartyのforeach文が修正できてphpのそれが修正できないなんて奴いねぇだろw
対応エディタもマニュアルも多い分Smarty使うよりPHPタグで分けた方がデザイナ的にも
やりやすいってだけの話なんだけど?
455nobodyさん:04/09/13 11:07:47 ID:???
PHP-users とはまた違った痛さがこのスレにはある!
456nobodyさん:04/09/13 11:46:10 ID:u+cNXRva
>>449
Smarty用のDWプラグインがあるよ。
457nobodyさん:04/09/13 12:00:43 ID:???
>>456
それXOOPSだと使えないよね
458nobodyさん:04/09/13 12:02:37 ID:???
あぁごめんXML修正すりゃいけるか
459nobodyさん:04/09/13 13:27:37 ID:???
なんかそのままだと日本語との兼ね合いで調子悪いな>DWプラグイン
変なとこでSmartyタグ扱いされちゃう。
460nobodyさん:04/09/13 14:17:29 ID:???
>>459
SJISだと { } が悪さをする。ってかそれはSmarty全般じゃない?
461nobodyさん:04/09/13 17:27:51 ID:E8MZljJ1
>>459-460
結構困るよな。パーサをマルチバイト対応させる必要があるよな。
462nobodyさん:04/09/13 17:45:08 ID:???
>>461
泥臭くデリミタをオーバーライドしてるよ。俺。
463 ◆AngelH/kMI :04/09/14 02:16:54 ID:???
>>451
あー。まだ見てますかね。
謎エラーはSmartyが原因ではなくてPHP本体が原因。

--enable-zend-multibyteつけてmakeしてませんか?
4.3.8以降/5.0.0β3以降あたりから出る模様です。
464451:04/09/14 10:32:41 ID:???
>>463
>--enable-zend-multibyteつけてmakeしてませんか?
ビンゴです。

つけないで、5.0.1入れてみます!
ありがとうございます。
465451:04/09/14 13:59:25 ID:???
>>464
無事PHP5.0.1入れられました。エラーもおこりません。
ありがとうございます。

さぁ、SOAPであそぼう。。。
466nobodyさん:04/09/15 16:10:31 ID:sZX1kIS0
smartyで携帯サイト作れるのかな?
467nobodyさん:04/09/15 17:19:27 ID:???
>>466
作れます。
468nobodyさん:04/09/15 18:59:41 ID:???
SJISでややこしいことになりそうだが・・・
469nobodyさん:04/09/15 19:07:40 ID:???
>>468
大丈夫ですよー。
内部エンコードこそ EUC とかで書きつつ
mbstring.http_output の値を SJIS にしちゃえば OK です (´ω`)

470nobodyさん:04/09/15 20:41:54 ID:dqyUiMN9
>>469
それやんないと能とか条が化けるんだよな。
471nobodyさん:04/09/15 22:01:32 ID:???
>468
普通にSJISで問題ないよ
>469
EUCにしちゃうと絵文字のバイナリでの入力ができなくなるから使いづらい。
>470
どんな使い方してるんだ?
472nobodyさん:04/09/15 22:21:33 ID:C49Dq6Pt
>>471
>>470ではないけどテンプレート中の文字が化けるっしょ?
--enable-zend-multibyteを付けてビルドして、mbstring.script_encoding=SJISを設定してれば
SJISをちゃんと扱えるようになるけど、パフォーマンスが落ちるし。

絵文字は確かに扱いづらくなりますな。
キャリア間の非互換やPCでの表示もあるから、絵文字はプレースホルダを
端末に応じて置換してテンプレートに渡してるんだろうけど、
assignの段階では置換せずにoubput_handlerに
SJISへの変換と絵文字プレースホルダの置換をする関数を指定すればいいんじゃないかな。

まさかユーザーから入力された絵文字を生のままログに保存してたりしないよね?
473nobodyさん:04/09/15 22:50:59 ID:???
PHPの書籍で入門以外のってないのかな。
どれも入門ばっか・・・
474nobodyさん:04/09/15 23:02:47 ID:???
>>472
471ですが、鯖の設定は他人任せだからよーわからんです。
夜間だと秒間8〜12アクセスある携帯サイト運営してて
体感的に遅くなったことはないです。
携帯相手だから速度は気にする必要ないのかもしれんが。

絵文字とhdmlはoutputfilterで自動変換させてる。
PCは絵文字画像ね。

ユーザーの絵文字はiモードの絵文字(バイナリ)にしてから
mysqlに入れてるけど何か問題ありますか?
ちょっと前まではbase64_encodeしてから入れてましたが
面倒なのと問題がないのとでそのまま入れてます。
単純にわからないので教えてください。
教えて君でスマン。
475nobodyさん:04/09/16 03:23:52 ID:???
>>474
なるほど。納得。
iモードのやつに統一してあるならOKっす。
>>472の意図はDoCoMo/au/Vodafoneで別々の絵文字を
そのまま扱ってたらアレだなあと思ったので。

満足なパフォーマンスが出てるなら気にすることもないです。
それ以前にmbstring.scriptl_encodingは未設定で、
たまたまうまく動いている可能性が高いですが。
476nobodyさん:04/09/16 05:22:54 ID:???
なんかすげーためになった。ありがと。
今のとこ携帯サイトの仕事は無いんだが・・・
477nobodyさん:04/09/17 00:34:45 ID:???
>>475
ケイタイサイトは泣けるぞ。
端末ごとに動作違ったりするから、真面目にやろうとすると大量のケイタイとにらめっこだ
478nobodyさん:04/09/18 17:46:27 ID:???
>>475
なんかセキュリティーホールがあるのかと思ってすごいビビってましたよ。
絵文字は各機種ごとにそのまま保存してても
問題ないと思いますね。ようはユーザーに対しそれをどう扱うかだし。
うちはiモード重視だからi基準にしちゃってますが。
mbstring.script_encodingは未設定ぽかった。
試しにaaacafeとc-sideで試したらOKでした。

>>477
かなり泣けるよね。
特にEZ端末で同じ会社の端末でも挙動が違ったり
locationが使えなかったりとかもろもろと・・・。
479nobodyさん:04/09/18 18:47:21 ID:???
480nobodyさん:04/09/18 20:43:00 ID:???
>>479
畜生、モニタが滲んでよく見えねえよ・・・
481nobodyさん:04/09/19 19:04:37 ID:???
こわくてみれません。
482nobodyさん:04/09/19 19:10:05 ID:???
感動話だよ。
483nobodyさん:04/09/19 20:18:01 ID:???
泣けます。
484nobodyさん:04/09/19 21:45:49 ID:???
なぜこのスレに張るのかがイマイチ分からないけど泣ける。
485nobodyさん:04/09/22 01:32:35 ID:???
意図がわからんが、泣ける。
486nobodyさん:04/09/22 02:08:38 ID:???
#セ\NAugmc
487nobodyさん:04/09/22 20:46:22 ID:S3VBXifE
php.iniは
output_buffering = On
output_handler = mb_output_handler
mbstring.internal_encoding = EUC-JP
mbstring.http_input = auto
mbstring.http_output = SJIS

$buffer_euc = $smarty->fetch('index_m.tpl',$smarty_cache_id);
$buffer_sjis = mb_convert_encoding($buffer_euc,"SJIS");
//---------------------------------------------------------------------------
header( 'Content-Type: application/xhtml+xml; charset=Shift_JIS' );
header( 'Content-Length: ' . strlen( $buffer_sjis ) );
//--------------------------------------------------------------------------
$smarty->display('index_m.tpl',$smarty_cache_id);
としてるのに、出力がEUCになってしまいます。

どんな原因が考えられるのでしょうか?
488nobodyさん:04/09/22 22:03:51 ID:???
泣いた
489nobodyさん:04/09/22 22:05:55 ID:???
・phpのバージョンくらいは書く
・$buffer_euc, $buffer_sjis等の出力の文字コードをチェックするなりして、問題を絞り込む
・キャッシュが更新されずに古いものが使用されてないか?
490nobodyさん:04/09/22 23:09:16 ID:???
>>489
>>488が泣いたのはそんな理由じゃないと思うよ。
まずoutput_buffrering不要。
一応mb_convert_encodingの第三引数に"EUC-JP"を入れといた方が無難。
極め付けに痛いのが $smarty->display('index_m.tpl',$smarty_cache_id);
echo $buffer_sjis; でええんちゃうかと。
491487:04/09/23 11:59:14 ID:???
>>488-490さん、ありがとうございます。

すいません、情報不足で。PHP5.0.1です。
キャッシュは、全部けしてもおなじ状況でした。

で、まさかと思って調べてなかったのですが、
$buffer_euc = $smarty->fetch('index_m.tpl',$smarty_cache_id);
のちの$buffer_eucは空でした。
なので文字コードは、$buffer_euc、$buffer_sjisともに空で、
ただし、
$smarty->display('index_m.tpl',$smarty_cache_id);
はなぜか(EUCで)表示できてます・・・。

>>490
echo $buffer_sjis; でええんちゃうかと。
いや、どうしても重くならざるをえないページなので、
キャッシュをつかいたかったもので。

やはりPHP5.0.1というのが相性悪いのでしょうか?
ただ、スクリプトの他の部分では、$smarty->display成功してるんですよね。(ちゃんとSJIS)

変数やファイル名が違うだけで、そこといっしょのことをしてるはずなんですが・・・
492nobodyさん:04/09/23 12:05:14 ID:???
>>491
意図したコードと違うことが書いてある気がする。もういちどよく見直せ。
適切なタイミングでnew Smarty()してないとかw

んで、>490ではないが、featchの内容とdisplayの内容が同一で、
SJISに変換したものが$buffer_sjisに入ってるなら、それを出力してやったほうが処理は早いぞ。
493nobodyさん:04/09/23 12:41:42 ID:???
488だが>>479について泣いたつもりだったんだよな
494487:04/09/26 01:42:15 ID:ORPXRj+I
>>487です。
とりあえず文字化けは「解決」しました。というか、あきらめました。
application/xhtml+xml;をあきらめて、"Content-type: text/html";にしたら、
文字化けしないようになりました・・・

ただ、別の問題が生じてます。
>>487のソースで、
HTTPヘッダが「Content-Length: -」となってしまいます。
どうにかして、smartyを使いつつ、「Content-Length」を正常に表示させる方法とかないでしょうか?

ob_関係の関数使おうかと思ったのですが(ob_get_lengthとか)
「smarty->display」でブラウザに表示されるときはSJISですが、
その直前まではEUCなので、文字数がずれてしまいます・・・
どなたか裏技っぽい方法でもいいので、お助けいただければ幸いです。
495あぼーん:あぼーん
あぼーん
496nobodyさん:04/09/26 19:15:27 ID:???
結局>>495のアドレスは何だったんだろう?
497 ◆AngelH/kMI :04/09/28 02:48:49 ID:???
>494
$smarty->fetch()で表示内容取得して
文字コード変換かけてstrlenで測るとか?

・・・かなりダメそうな方法だ(苦笑
498487:04/09/28 11:55:20 ID:???
>>404
いや、それ、>>487でやってます。(content typeは違うけど)

そしたら、「Content-Length: -」となってしまうので。。
499nobodyさん:04/09/28 15:25:48 ID:???
>>494
アウトプットフィルタプラグインとかどうよ
500487:04/09/29 12:13:50 ID:???
>>494

ん・・・・・あんまり概念が理解できてないから、自作はきびしいかも。。。
501487:04/09/29 12:14:03 ID:???
もとい、>>499さん。
502nobodyさん:04/10/11 16:58:02 ID:RLUAfbkL
HDMLの携帯サイトを作るのにsmartyは使えませんよね。
503nobodyさん:04/10/11 18:13:33 ID:???
>>502
どうせフレームワーク組んじゃうんだろ?
んじゃpattemplateのほうがシンプルで扱いやすいだろ。
smartyはあくまで、いろいろ自分で組めない厨向けのテンプレだぞ。
504nobodyさん:04/10/12 12:14:58 ID:???
>>502
使えますってか使いました。
505nobodyさん:04/10/12 14:58:47 ID:???
>>503
まず出来上がりの早さを求めるのであって
自分で出来るか出来ないかの問題ではない

そこから、どう不都合になるか考える。
出来てから考える。

誰でも自分で作れるよ。でも1年かかります。そんなの待てるか。
といわれちゃうよ
506nobodyさん:04/10/12 16:27:47 ID:bb34UBPS
>>503
まあ、それをいうならPHPはあくまで、いろいろ自分で勉強できない厨向けの環境だからな。
507nobodyさん:04/10/12 16:42:18 ID:???
ということにしたいのですね:-P
508nobodyさん:04/10/12 17:24:13 ID:bb34UBPS
そういや、PECLってどうなったん?
あと、なんかCPANみたいなのやるっていう話なかった?
509nobodyさん:04/10/12 19:39:43 ID:???
誤爆してるぞ
510nobodyさん:04/10/16 23:33:47 ID:OMhy7HMx
便利そうなのでSmarty使ってみようと思ったけど
インストールすら出来ない(´・ω・`)
初めのHello!,Ned1が出ないし

きちんとinclude_pathを設定して...Example 2-9でエラー
unexpected T_STRING in c:\〜 in 20

はて、config_dirのパスが設定出来ないらしい
Windowsの絶対パスはc\:からだよね?
511nobodyさん:04/10/17 05:34:27 ID:???
 ・ ”C:\〜” ではなく ”C:/〜” を使ってみる
 ・ 相対パスを使ってみる
512511:04/10/17 05:35:51 ID:???
なんか腹が立つな
>(´・ω・`)
513nobodyさん:04/10/17 07:09:37 ID:???
こころが狭いか、2chに不慣れなやつだな。
514nobodyさん:04/10/17 17:17:49 ID:???
自分のせいじゃなくシステムのせいにする人格の象徴⇒(´・ω・`)
もしくは某板の糞コテ
515nobodyさん:04/10/17 18:11:08 ID:???
なんか、nobodyさんはすべて同じ人物だと思ってるのと同じ程度の痛さだね。
516nobodyさん:04/10/17 18:18:34 ID:???
字句解析までしか出来ない駄目AIの僻み
517nobodyさん:04/10/17 21:08:07 ID:2DZWHiAE
511さんのオカゲで出ました。ありがとう
やはりC:/〜でした。
518nobodyさん:04/10/27 11:44:54 ID:5LD6Mw3o
アプロードしたtemplates_cの中のファイルが削除できない。
templates_cそのものも削除できない。
なぜかな?
519nobodyさん:04/10/27 12:38:36 ID:???
templates_cの中のファイル群はWebサーバの動作権限(ユーザー)で作成されるから。
520nobodyさん:04/11/09 09:28:23 ID:RHwN8VlW
smarty使ったblogの開発で人募集してるので
オープンソースに興味がある人とか参加してみたら?
--------------------------
【2ちゃんブログ】次世代開発中心 Part2@ブログ
http://pc5.2ch.net/test/read.cgi/blog/1092616279/l50

391 名前:忍ロボ ◆O6dempau.2 本日のレス 投稿日:04/11/09 01:48:13 GsdPVZqn
ちゃぶだい
開発に参加してくれる人募集します〜

・開発者さん(PHPで開発できるひと)
・デザイナーさん(デザインテンプレート作成)

こちらのメールフォームから連絡よろしくですー

http://chbox.com/mail/
■ハンドルネーム
■連絡先メールアドレス(フリーメール不可)
■ホームページ/weblog URL
■(開発者? / デザイナー? / その他)
■連絡事項(あれば)
521matsumoto:04/11/10 22:33:26 ID:6T9+fSCp
smartyでテンプレートには設定しているけれど、assignし忘れた場合、
Arrayと出力されてしまうけれど、これを 表示しないようにする簡単な方法はないのでしょうか。
522nobodyさん:04/11/11 00:19:20 ID:???
>>521
それは、
テンプレートで参照してるけど、
assignしていない場合に、Arrayと出力されていて、
その現象を回避したいってこと?
523nobodyさん:04/11/11 01:14:01 ID:???
別にArrayなんて出ないけどな。違うものassignしてるんじゃないの?
524matsumoto:04/11/11 02:52:04 ID:IGJG68qY
■テンプレート
{$aaa} -- {$bbb}

■PHPプログラム
$smarty->assign("bbb" , "BBB");
// $aaaについてはassignしない

■出力
Array -- BBB

となってしまいます。わたしだけでしょうか?
他の方はなりませんか?
525matsumoto:04/11/11 02:55:24 ID:IGJG68qY
追記:
524の場合で、こうなってほしい。
PHPプログラムは同じ。
■テンプレート
{$aaa}--{$bbb}
{if $aaa}{$bbb}{/if}

■出力
--{$bbb}

こうなってほしいのですけれど。
つまり、単独では空文字になって、ifで使用した場合にはFALSEの扱いになるような...
526matsumoto:04/11/11 02:56:49 ID:IGJG68qY
すみません。出力間違いです。
■出力
--BBB

です。
527nobodyさん:04/11/11 11:07:43 ID:???
$smarty->debugging=TRUE;
にしてみ。
絶対、他の値が入ってる。
528nobodyさん:04/11/12 18:43:42 ID:???
間違いなく入ってるね。

>>524
PHPのなかみ 出し惜しみするなよ。
529nobodyさん:04/12/08 01:12:49 ID:???
これって元になったテンプレートエンジンとかあるんでしょうか?
源流ってどのへんになるんだろ?
530aya:04/12/09 17:20:27 ID:hK+hWFtH
windows2000(IIS)でのsmartyの設定でつまづいてしまっています。

まずダウンロードしたSmarty-2.6.6.tar.gzを解凍し、その中のlibsの中身
を、
c:\php\smarty というフォルダを作ってコピーし、
C:\WINNT\のphp.iniのinclude_pathを下記のように変更しました。

// 変更前(既に入れたpearのパス)
include_path=".;C:\php\pear;c:/php/includes;c:/php/pear"
// 変更後(smartyへのPATH)
include_path=".;C:\php\pear;c:/php/includes;c:/php/pear;c:/php/smarty
"

これで、smarty/demo/index.php(SMARTYのテストプログラム)にアクセスすると

---------------------------------------------------------------
Warning: main(Smarty.class.php): failed to open stream: No such file or directory in c:\inetpub\wwwroot\nyuukin\demo\index.php on line 4

Fatal error: main(): Failed opening required 'Smarty.class.php' (include_path='.;C:\php\pear;c:/php/includes;c:/php/pear;c:/php/smarty') in c:\inetpub\wwwroot\nyuukin\demo\index.php on line 4

---------------------------------------------------------------
のエラーが出てしまいます。 smartyへのpathを通すのにはどうすればいいんでしょう?
不躾ですみません。


531nobodyさん:04/12/10 04:49:38 ID:gB4mZSIs
PathはSmarty.class.phpがある場所にしなさい
と出てますが・・・ちゃんとある?
532nobodyさん:04/12/10 10:44:56 ID:???
Smarty.class.php は libs の中にある。
533aya:04/12/10 10:58:34 ID:f65efB7J
>>524
そうなんですよね。ちゃんと設定したはずなんですが、pathが
通っていないんです。
既に稼動しているPEARのライブラリのパスは
include_path='.;C:\php\pear;c:/php/includes;c:/php/pear'で
pear配下のファイルがincludeできるのですが、
(include_path='.;C:\php\pear;c:/php/includes;c:/php/pear;c:/php/smarty'
として、
c:/php/smarty/Smarty.class.php
にアクセスするとエラーになってしまうんです。

include_pathは、ウィンドウズのシステム環境変数のPATH設定と
同じ感覚でセットアップしているのですが・・
どうしてなんだろう?





534532:04/12/10 11:14:16 ID:???
>>533
せっかく返事したんだから読めよ。

require_once('libs/Smarty.class.php');
でいけるんじゃねーか。
いけなかったら、libsにパス通せ。
535aya:04/12/10 12:22:05 ID:f65efB7J
>>533
ごめんなさい。間違えました。533スレッドは、
>>533さんへのレスポンスでした。しっかり読みました。

要は、解凍したlibの中身を、smarty直下に移動したわけだから、
c:/php/smarty'
とinclude_pathを追加したんです。

536532:04/12/10 20:07:24 ID:???
\ と / が混在してるのが気になる。

ひとまず\で統一してみれば?
537aya:04/12/11 13:42:57 ID:Jq/LlFpl
>>536
そうなんです。
ディレクトリセパレータを(/),もしくは(\)に統一して実行してみたの
ですが、PEARは正常に稼動し、SMARTYは相変わらずPATHが通っていない
状況が続いています。
538nobodyさん:04/12/11 21:58:48 ID:???
Pathは通ってるけどSmartyが未設定なんじゃないの。
だいたいPath通す必要性ないよ。
539nobodyさん:04/12/12 17:33:42 ID:???
>>537
Smarty-2.6.6\demo\index.php
> require '../libs/Smarty.class.php';
なわけだが。
540nobodyさん:04/12/13 17:56:41 ID:???
>>539
どうやら>>537はlibsの中身だけを
c:\php\smarty\ に置いてるらしいぞ。
今まで読んだ感じだと。
541nobodyさん:04/12/13 22:35:43 ID:???
ayaって釣り馬鹿の共有コテじゃないか
542nobodyさん:04/12/16 17:12:21 ID:RdrCSV2b
連想配列の添え字の指定を変数で行いたい時ってどんな書き方すれば良いんですかね?
{$DATA.$key}
こんな指定の仕方がしたいんですが…
543nobodyさん:04/12/16 22:21:21 ID:???
>>542
mk:@MSITStore:c:\php\HtmlHelp\php_manual_ja.chm::/ja/language.types.array.html
544nobodyさん:04/12/16 23:45:45 ID:???
>>543 ???
Smartyでの指定の仕方なのですが
545nobodyさん:04/12/17 01:16:41 ID:???
>>544
demo\index.php、demo\templates\index.tpl嫁よ。
546nobodyさん:04/12/17 01:52:06 ID:???
>>545 ???
どこにも連想配列のKeyを変数で指定している記述は見当たらないんですが
547nobodyさん:04/12/17 11:34:54 ID:???
てか、
{$DATA.$key}
これでできるでしょ…。試してないの?
{$DATA[$key]}
でもできるみたいだけど。
548nobodyさん:04/12/19 11:34:13 ID:???
Smartyって配列の扱いが面倒な気がするのですが
こんなもんなんでしょうか?
そのうちなれるのかな。
ほかのテンプレートはどうなんすか?
549nobodyさん:04/12/19 11:37:18 ID:???
>>548
最近気づいたんだけど
section
でなく
foreach
を使うと配列ラクだよ
550nobodyさん:04/12/19 15:48:21 ID:???
テンプレートの記述とは書いてないけどね
551nobodyさん:04/12/19 15:58:49 ID:???
>>550
言うたら何が面倒なのかも書いてないやろ。
552nobodyさん:04/12/19 16:36:21 ID:???
>>550
なにが面倒なの?
553nobodyさん:04/12/19 21:03:08 ID:???
誰がホセなの?
554nobodyさん:04/12/19 21:12:51 ID:???
だれがつまらんこと言ってるの?
555nobodyさん:04/12/19 21:40:23 ID:???
>>554
まずお前が鼻に付く
556nobodyさん:04/12/19 23:38:58 ID:???
そしてお前があごに付く
557nobodyさん:04/12/20 20:15:55 ID:???
>>556
何?同じようなこと繰り返せば面白いとでも思ってんのかバーカ
558nobodyさん:04/12/21 04:09:14 ID:???
>>557
なんか嫌なことあったの?
559nobodyさん:04/12/21 12:33:51 ID:???
SmartyとPear::Auth と HTML_QuickFormを併用してMVC設計してる人いないかな?
560nobodyさん:04/12/21 13:46:25 ID:t6MkBwt3
寒稽古してる人いる?
561559:04/12/21 13:49:27 ID:???
HTML_QuickFormを使うとMとVの分離が怪しくなる。
しかもSmartyとの連携も怪しくなってきたりして。
562nobodyさん:04/12/21 17:58:00 ID:???
>>561
同感。
563nobodyさん:04/12/23 06:26:50 ID:???
HTML_QuickFormじゃなくてSmartyValidatorのほうはどうですか?誰か使ってる人います?
564nobodyさん:04/12/27 15:43:31 ID:???
SmartyValidatorってはじめて聞いたので、ググってみた。
・・・情報が少なすぎる。
565nobodyさん:05/01/03 00:08:40 ID:???
最近PHP始めたのですが、ソースが肥大化してしまいSmarty化しているのですが、
while($row = mysql_fetch_array($left)) {
print("[".$row["month"]."/".$row["day"].]");
}
こんな感じのをSmarty化できずに困っています。
{foreach}{/foreach}などを使ってやるようなことは解ったのですが、
key とか name などの使い方が解りません。どなたか教えてください。
566nobodyさん:05/01/03 00:32:46 ID:wnsIsqHm
>>565
そんな単純なコードをいじったところで変わりぁせん
567nobodyさん:05/01/03 20:57:14 ID:???
>>565

こんな感じか。

PHPのコード
$rows = array();
while ($row = mysql_fetch_array($left)) {
$rows[] = $row;
}
$smarty->assign('rows', $rows);

テンプレート
{foreach from=$rows item=row}
[{$row.month}/{$row.day}]
{/foreach}

Smartyマニュアルの「第4章 変数」の「phpから割り当てられた変数」のあたりを
読むといいよ。
568nobody& ◆vGPd8m6uvw :05/01/03 21:01:00 ID:???
>>567さん
感謝です。
>Smartyマニュアルの「第4章 変数」の「phpから割り当てられた変数」のあたりを
>読むといいよ。

是非読ましていただきます。
569nobodyさん:05/01/04 23:38:34 ID:???
Smarty側でforloopを
使うことは罪に当たります。
570569:05/01/04 23:39:24 ID:???
2005年における初めてのネット上での書き込みが
こんなくだらないものだった。
もう少し考えてから書けば良かったのに俺。
571nobodyさん:05/01/06 13:52:57 ID:???
ところで、{foreach}間でeregを使って正規表現を使うには、どうすればいいですか?
572nobodyさん:05/01/06 18:12:11 ID:DWsuB/B6
html_optionsではき出してる各要素に、
onclickをつけてjavascriptを呼び出したいんですが、
何か良い方法ないですかね
573nobodyさん:05/01/06 18:23:57 ID:???
smartyってHTMLには便利なんだけど
メールのテンプレートに使おうとするとたいへん。
IF文をうまく書かないと
改行がへんなとこで入ったり、改行しなかったりして
結果、テンプレートが見にくくなる。
うまい方法ないかなー?

>>572
適当に html_options2 とか作って
パラメータを増やす
574nobody& ◆k0eA9hHNm2 :05/01/07 00:04:35 ID:???
mysqlから取り出したデータを表示させるチャットスクリプトなんですが、
自動リンクさせるためにregex_replaceを追加したのですが、エラーが起きてしまいます。
ソース:{$row.comment|regex_replace:"(https?|ftp)(://[[:alnum:]\+\$\;\?\.%,!#~*/:@&=_-]+)":" <a href=\"\\1\\2\" target=\"_blank\">\\1\\2</a>"}
どうすればいいですか?
575nobodyさん:05/01/07 00:09:56 ID:???
>>574
エラーメッセージを読め
576nobody& ◆QWv3R1XL8M :05/01/07 00:17:18 ID:???
>>574 追記
Warning: Unknown modifier '(' in ちょめちょめ on line 24
と出てします
577nobodyさん:05/01/07 00:38:20 ID:???
>>576
あんた誰?
578nobodyさん:05/01/07 01:34:57 ID:???
>>577
初心者です。
579nobodyさん:05/01/07 01:36:36 ID:???
もしかして>>574=>>576か?
だったら書き込み毎に変えるようなトリップ使わずに
元質問のレス番を名乗れ
580574:05/01/07 01:41:48 ID:???
>>579さんの指摘はごもっともです。以下気をつけます。
581nobodyさん:05/01/07 01:49:23 ID:???
Warning: Unknown modifier '(' in と出てもおそらく '(' が原因ではない。
'/' 3つをエスケープしてないじゃないか。
582574=580:05/01/07 02:07:47 ID:???
>>581さん指摘ありがとうございます。
ソース:{$row.comment|regex_replace:"(https?|ftp)(://[[:alnum:]\+\$\;\?\.%,! #~*/:@&=_-]+)":" <a href=\"\\1\\2\" target=\"_blank\">\\1\\2</a>"}

{$row.comment|regex_replace:"'(https?|ftp)(://[[:alnum:]\+\$\;\?\.%,! #~*/:@&=_-]+)'":" <a href=\"\\1\\2\" target=\"_blank\">\\1\\2</a>"}
に変えると正しく作動するようになりました。
583nobodyさん:05/01/07 02:12:01 ID:???
ところでこういう問題は起きていないか?
http://www.ironhearts.com/diary/archives/000365.html
584574=580=582:05/01/07 02:14:27 ID:???
>>583さん
まさにそれです。そのとうりです。
585nobodyさん:05/01/07 10:29:27 ID:???
>582
そんなのテンプレートに書くの?
modifierプラグイン書いたほうがいいよ
586nobodyさん:05/01/07 11:46:56 ID:???
>>585
俺もそう思う。
modifier.alink.php みたいな。
なんか落ちてそうだけどな。
587nobodyさん:05/01/14 00:43:42 ID:???
質問なんですが、インストールする場合は/usr/local/・・・っていう場所じゃなくてもOKです?
たとえばレンタルサーバにSmarty置いて動作させたりは可能なんでしょうか・・。
588nobodyさん:05/01/14 02:08:19 ID:???
>>587
まず試せ。
589nobodyさん:05/01/14 02:18:55 ID:???
>>588
その回答だと使えるんですね、サンクス
590nobodyさん:05/01/14 09:42:08 ID:???
ムッキー
591nobodyさん:05/01/14 20:49:49 ID:???
かわいい
592nobodyさん:05/01/18 16:40:18 ID:GbvmkgfT
誘導尋問のプロフェッショナル発見

・・・と書き込んでおこう
593nobodyさん:05/01/18 20:43:29 ID:???
その程度の回答で満足できるなら
なぜ最初に試さないんだろう・・・
594nobodyさん:05/01/20 08:23:23 ID:???
試すより聞くほうが楽だからだろ
595nobodyさん:05/01/20 10:25:20 ID:???
試す 同期型処理
聞く 非同期型処理
596nobodyさん:05/01/20 14:29:42 ID:???
試す 自分で行動
聞く 人に頼む
597nobodyさん:05/01/20 15:58:23 ID:???
試す すでに環境が用意できている
聞く まだ環境が用意できていない
598nobodyさん:05/01/21 00:30:18 ID:Q7KPWxeo
・1
 ・2
 ・3
  ・4
   ・5
  ・6
 ・7
  ・8

ttp://www.skullysoft.com/soft/ssc-board/bbs/main/c-board.cgi?id=cboard
このようなツリー型の掲示板に代表されるような木をSmartyで表示したいと思っています。
foreachやsectionでは決まった深さであれば入れ子にして表示することができるのですが

例えば2階層なら

{foreach .....}
・根
 {foreach .....}
 ・葉
 {/foreach}
{/foreach}

のようにして表示できるのですが、実行時に深さが決まる場合はどのようにすればよろしいのでしょうか?
ご存知の方がいらっしゃいましたらよろしくお願い致します。
599nobodyさん:05/01/21 00:43:39 ID:???
>>598
{foreach .....}
・根
 {foreach .....}
 ・葉
  {foreach .....}
  ・葉
   ....
  {/foreach}
 {/foreach}
{/foreach}
600nobodyさん:05/01/21 01:06:26 ID:???
>>242の方法はどう?
601nobodyさん:05/01/21 01:46:56 ID:???
>>598
最近この手のツリー式BBS作ったけどツリー作る所まではロジック側でやったよ。
表示順とインデントまで作ってSmartyの方では単純なループで表示させるだけって感じで。
602nobodyさん:05/01/21 03:01:42 ID:???
>>600
ありがとうございます
この方法で試してみたところ上手くいきました
(key val)が1つの葉で多分木の状態になっています

- base.html

<ul>
{include file="incl.html" root=$root}
</ul>

- incl.html

{if isset($root.key)}
<ul>
 {foreach from=$root item=node}
  {include file="incl.html" root=$node}
 {/foreach}
</ul>
{else}
 <li>{$root.key} - {$root.val}</li>
{/if}

>>601
確かにそちらの方がよさそうですね
恥ずかしながら上のを作っているときに無限ループにはまってしまって
デザイナーがやる仕事ではないと思いましたorz
issetを持ち出している所も、ほとんどPHPのプログラムになっていますし

ただ、予め作ってしまうと上で上げた単純な<ul>を使った方法や
ttp://www.skullysoft.com/soft/ssc-board/bbs/main/c-board.cgi?id=cboard
のようにしたいという場合にテンプレート側のみで出来なくなってしまうので非常に悩んでいます
603nobodyさん:05/01/21 17:13:04 ID:???
Smartyはdisplay関数で出力しますが、ブラウザに出力するのではなくファイルに出力したりできるんでしょうか?
ざっとマニュアル見てみたのですがそのような関数は無いみたいでした。
自分でソースを編集しないとダメなのかな・・(´・ω・`)
604nobodyさん:05/01/21 17:20:08 ID:???
fetch()
605nobodyさん:05/01/21 17:20:23 ID:???
>>603
ob_start();
$smarty->display();
$result = ob_get_contents();
ob_end_clean();

// あとはお好きなように
606605:05/01/21 17:21:25 ID:???
>>604
そんなのあったのね。サンクス。
607nobodyさん:05/01/21 17:28:58 ID:???
>>604-605さん
ありがとうございます
早速試してみます
608nobodyさん:05/01/21 19:47:12 ID:???
>>602
データにインデント数(何番目の階層か)まで持たせれば、
<ul>だの<li>だののループでどうにかなるんじゃないの?
609nobodyさん:05/01/21 20:32:27 ID:???
>>608
ならない
やってみれば分かる
610nobodyさん:05/01/21 22:03:06 ID:???
>>609
サンプルをくれ
611598:05/01/21 23:54:03 ID:???
>>608
私もそれを考えてみたのですが、どう実装すれば良いか分からず


そこでblockプラグインを作成しようと思ったのですが、blockの内部の変数は
既に変換済みで渡されるということなので、どうすればforeachみたいな事を
できるのかマニュアルと格闘していたのですが解決できそうな方法がありませんでした。

やはりテンプレート上のみで解決するには上で解決したような例でinclude再帰か
foreachの実装みたいなものをSmarty側で新たに組み込むかなど
上手い方法がなかなか思いつきませんorz
612598:05/01/21 23:57:53 ID:???
もう一つ思いついたのが、blockプラグインで変換済みで渡されるなら
Smartyの構文で渡すのではなく、特殊な文法でいくという感じでした

{html_tree ......}
this is [[node]]
{/html_tree}

これならpreg_replaceしながらでいけるのですが、新しい文法を作り出さないで
上手くいく方法がないか模索しています
613nobodyさん:05/01/25 17:14:22 ID:ShBI8nKK
Smartyで、{$link->setAction('MemberList')->addLinkParam('id', 24)}のように、
setActionオブジェクトのメソッドにアクセスしようとしたところ、syntax error: unrecognizedが発生してしまいました。
参照オブジェクトからのメソッドはコールできないんでしょうか?
614nobodyさん:05/01/26 19:05:19 ID:???
615614:05/01/26 19:06:32 ID:???
あ、よく読んでなかった。
テンプレートの中でメソッドコールのチェーンはできないと思います。
616nobodyさん:05/01/26 23:31:40 ID:???
というか、そういう状況って、モデルとビューを分離しきれてないんじゃないかと。
617nobodyさん:05/01/27 01:01:07 ID:???
BAA、BAA
618nobodyさん:05/01/27 18:57:53 ID:???
Mojavi+Smartyを組み合わせた環境で、
Shift-JISで書いたテンプレートに「施」の文字を入れると、
以降の一部が化けてコンパイルエラーになります。
Smarty単独でも起きたのでMojaviは関係ないようですが。

適当なテンプレートに「実施キャンペーン」と入れた結果:
Fatal error: Smarty error: [in hoge.html line 165]: syntax error: unrecognized tag: キャンペーン {$hoge|default:0 (Smarty_Compiler.class.php, line 417) in /usr/local/apache/mojavi/opt/smarty/Smarty.class.php on line 1088
619618:05/01/27 18:59:13 ID:???
途中で送ってしまいました。
スクリプトから直接echo()した場合や、
フォームからDBへの入出力等だと化けは発生してません。
620nobodyさん:05/01/28 00:11:19 ID:???
>>618
マルチバイト文字"施"のなかに'{'が含まれている罠
{literal}でかこっとけ。
621nobodyさん:05/01/28 00:22:59 ID:???
>>618
SJISで書いても良い事無いよ。素直にEUCか、UTF-8にしときなさい。
622nobodyさん:05/01/28 00:45:45 ID:???
>>621
i-mode専用サイトの場合絵文字が直接うめこめる。
623nobodyさん:05/01/28 05:06:57 ID:???
絵文字はフィルタつかわね?
624nobodyさん:05/01/28 06:48:39 ID:???
>>602
同じようなことで悩んでいるのですが、この例でassignしてある$rootの
配列の構造がどうなってるのか教えていただけないでしょうか…。
625nobodyさん:05/01/30 10:13:27 ID:???
>>624
ちょっといい例が思いつきませんが例えば下のツリーの関係なら
・あ
 ・赤
  ・ポスト
 ・雨
・か
 ・亀

こんな感じの配列です
(
 (あ
  (赤
   (ポスト)
  雨
  )
 )
 (か
  (亀)
 )
)
626624:05/02/01 00:46:14 ID:???
>>625
なるほど、理解できました。サンクスです。

自分でも調べてみました。
Pear::TreeやPear::DB_NestedSet(初めて知った)を使う、という手もあるみたいです。
ttp://www.codecomments.com/archive224-2004-3-151787.html
627nobodyさん:05/02/02 03:50:11 ID:???
HTML_QuickFormのバリデーションで、
「どれか1つが記入されていたらOK」というRuleは
どうやって設定すればいいでしょうか。

いまtextフォームが4つあるんですが、
単純にrequireにしただけだと空欄が認められないし、
何も設定しないと入力チェック自体が出来ないという状態に。
628nobodyさん:05/02/02 09:00:55 ID:???
Pearスレ向きな質問のような気がするけど..
addFormRuleでいいんじゃない?
http://hatotech.org/kumatch/archives/000331.html ここのPDFに
簡単に使い方が書いてあるよ。
629nobodyさん:05/02/02 14:12:50 ID:???
>>627
スレタイ嫁
630nobodyさん:05/02/03 12:42:41 ID:???
windowsXPでSmarty使おうと思ったんですが、template_cの中に
%%11^111^111BD1DF%%debug.tpl.php
のようなファイルができてしまい、アクセスできません。
どうしたら、正常なファイル名のファイルが作成されるのでしょうか?

Apache2
PHP5.0.1
を使ってます。
631nobodyさん:05/02/03 17:48:11 ID:???
>>630
コンパイル用ディレクトリの中はそれでいいんだよ。
632nobodyさん:05/02/03 18:51:23 ID:???
>>631
レスありがとうございます。
ですが、

Warning: Smarty::fetch(templates_c\%%11^111^111BD1DF%%debug.tpl.php)
[function.fetch]: failed to open stream: No such file or directory in Smarty.class.php on line 1252

というエラーを吐いて進んでくれないんです。
ファイルは確実に存在しているんですが……
ちなみにDemoフォルダ内を動かしています。
633nobodyさん:05/02/03 21:23:37 ID:???
>>632
根本的な解決じゃないかもしれないが、
use_sub_dirをfalseにすればなんとかなるんじゃない?
634627:05/02/04 19:35:24 ID:???
誤爆スマソ
635nobodyさん:05/02/04 20:51:56 ID:???
>>634
別に誤爆ってほどでもないかと。
Smarty+HTML_QuickFormは定番だしね。

ちなみに俺はデザインも自分でやってるので、
そういう場合は、JavaScriptをテンプレートに直書きしてる。
分離が出来てなくてダメな事はわかってるけどね・・・。
636nobodyさん:05/02/11 01:40:26 ID:???
>>632
フォルダのwrite権限ないんじゃない?
637nobodyさん:05/02/28 10:40:41 ID:???
>>632さんはもう解決した?
全く同じエラーがでて悩んでたんですが、私の場合は>>636さんのご指摘通りでした。

IISで動かしてたので環境は違うのですが、
wwwroot->プロパティ->セキュリティ->Everyoneで書き込みを許可したら動きました。

Smartyのcore_write_file.phpで@renameになっており、
ここでのエラーが出力されないため、解りにくかったです。
638nobodyさん:05/02/28 12:50:49 ID:???
>>637です
セキュリティの問題があるかもしれないので
wwwrootではなくtemplates_cを書き込みを許可するようにした。
639nobodyさん:05/03/05 18:32:35 ID:???
>>637
はじめにマニュアルを読んでから動かせば @renameとか関係ないんで。
自分の落ち度を他人のせいにするもんじゃない。
640nobodyさん:05/03/05 19:51:23 ID:???
テンプレもんだな
641nobodyさん:05/03/08 16:14:48 ID:AAd9Sq9Q
こんにちは。
購入したPHPのサンプル本で、希望する動きのがあったので
使用しようと思ったのですが、Smartyを使って紹介されていたんです。
Smartyで書かれている部分を、PHPに直すような高度な事も
出来ないので、大人しくSmartyをインストールしようとしてみた
のですが・・・。
書籍のCDROMに入っていたWindows用のSmartyが
Smarty-2.6.6tar.gzで、解凍しようとしても出来ないのです。

インストール方法を探してttp://sunset.freespace.jp/smarty/の
サイトも何度も読んで見たのですが、『ディレクトリファイルに
インストールしてください』という下りから始まっていて、
ウィンドゥズ対応の圧縮ファイル名などの記述すら見つけられなくて。

どなたか、Win用のインストール方法を詳しく教えて頂けない
でしょうか・・・。
お願い致します。
642nobodyさん:05/03/08 16:20:35 ID:???
>>641
はい、こんにちは。
ttp://www.vector.co.jp/ に行き、キーワードの欄に「gz」と入力します。
検索ボタンを押すと結果一覧が表示されるのでお好みのソフトを選択しましょう。
643nobodyさん:05/03/08 17:13:05 ID:???
う〜ん... 春ですねぇ。
644641:05/03/08 17:34:59 ID:AAd9Sq9Q
>>642
ぎゃー!出来ました。解凍、出来ました。
なんか、すごい恥ずかしい質問をしてしまった気がして
穴をほってでも入りたい気持ちでいっぱいです。
+Lahaで解凍できない=winファイルじゃない?
なんて思考回路になってしまった自分の馬鹿さ加減に
悲しくなりました。
ご指導、ありがとうございました。
今から設置に四苦八苦してまいります。
645nobodyさん:05/03/08 18:36:24 ID:???
ほほえましいな がんばれ
646641_| ̄|○ :05/03/08 21:33:23 ID:AAd9Sq9Q
何度もすみません。
インストール先がわからないです・・。
解説サイトさんによると
ディストリビューションの/libs/ディレクトリにSmartyライブラリファイル
をインストールして下さい
とあるのですが、ディストリビュージョンって何ですか・・?
検索してみたのですが、Linuxの・・というのばかりが
引っかかってきて、打ちひしがれるばかりです。
どなたか合いの手をお願いいたします。
647nobodyさん:05/03/08 22:05:41 ID:???
らは
648nobodyさん:05/03/08 22:07:59 ID:???
>>641への回答は↓に任せた
649nobodyさん:05/03/08 22:10:28 ID:???
>>646
インストール先はどこでもいい。
650nobodyさん:05/03/09 01:27:21 ID:???
>>641
ハッキリ言ってその程度の知識でサーバ管理するのはとても危険。
ついでに、踏み台にされるとはた迷惑。
いや、公開サーバじゃなくてただPHPの勉強してるだけならいいんですがね。
651641_| ̄|○いまだわからず・・・:05/03/09 04:43:26 ID:???
>>649さん
ご指導ありがとうございます。
適当な場所でインストールしてみたのですが、
なぜかMySQLの信号機が赤になってしまって
また打ちひしがれ中です_| ̄|○
PHPdevでSmarty使おうとしているのが悪いのかしら
とか思って検索中です。
>>650さん
まさか、ネット上で公開する気なんてまだまだ
先の先の事ですよぅ!
セキュリティの事もわからないのにっ。
一から色々と、勉強中なのです_| ̄|○
知らない事が多すぎて、覚える事ばかりで
沸騰しそうです。
踏み台にしているつもりは毛頭なかったです。
不愉快にさせてすみません・・・。
652nobodyさん:05/03/09 09:02:15 ID:???
[原文]
> Install the Smarty library files which are in the /libs/ directory of the distribution.

[日本語訳サイト]
> ディストリビューションの/libs/ディレクトリにSmartyライブラリファイルをインストールして下さい。

[正しかろう訳]
配布物の/libs/ディレクトリにあるSmartyライブラリファイルをインストールします
(ここでいう配布物ってのは、Smarty-2.6.6tar.gzを解凍した物の事)
653nobodyさん:05/03/09 10:14:49 ID:???
>>651
踏み台ってのは、君がここの回答者を踏み台にして…って話じゃなくて、
セキュリティの甘いサーバをネット上に放っておくと、そのサーバを”踏み台”にして、
悪事に利用されるよ、そしてそれは万人にとって迷惑な話だよ。って意味だよ。

ぼちぼちで、やったんさい。
654nobodyさん:05/03/09 10:41:51 ID:???
>>641
申し訳ないが前提となる知識が足りなすぎる。
足し算がわからない人に因数分解は無理。

書店で入門書を買ってきてコツコツやりな。
どうしてもわからないことは質問してもいいから。

だいたいディストリビューションっていう単語がわからなければ、
Googleで調べればすむ話でしょ?
自分で調べもしないのに聞くのはイクナイよ。

先は長いけどがんばれー。
655nobodyさん:05/03/10 11:16:13 ID:1EPX/SpT
すいません、ご存じの方いらっしゃればご教示頂きたく。

smartyのifでの比較演算なんですが、
{if "1010010001000110000115" eq "1010010001000110000115"}equals{/if}

{if "1010010001000110000120" eq "1010010001000110000115"}equals{/if}
の両方とも、出力がequalsになるんですが、
何故なんでしょうか?
656nobodyさん:05/03/10 11:36:31 ID:???
>>655
たまたまじゃないですか。
657nobodyさん:05/03/10 11:43:54 ID:???
昨日久しぶりにバージョンアップしてみたのですが、
{strip}命令って無効になったのですか?
そのまま{strip}って表示されてしまうのですが・・・。
658655:05/03/10 11:44:28 ID:???
>656
いや、たまたまじゃない。
つか、すげぇ下らない理由だった。

当然、文字列同士で比較していると思っていたのだが、
数字だけで構成しているとどうやら数値として比較するらしい。
で、有効な桁数以上の文字はカットされてしまい、
(俺のトコだと整数で18桁がボーダーのようだが、環境によって変わるかも。)
前方18桁だけ取り出して、数値としてみれば
両辺一致しているのでtrueになるようだ。

末尾にcatで"a"なんてくっつけてやれば、
文字列同士として比較するため、何の問題もでない。

そんな事にも気づかなかった俺って・・・orz
659nobodyさん:05/03/10 13:38:03 ID:???
>>658
いや、くだらなくはないよ。
660nobodyさん:05/03/10 15:16:46 ID:???
貴重なバッドノウハウよね
661nobodyさん:05/03/10 15:25:45 ID:???
PHPホンスレでガイシュツだけどね。
662nobodyさん:05/03/10 17:46:21 ID:8Bnn/FyN
>>657
カスタムタグ使ってると、そーなるバグ
smartyのフォーラムよく見ろ
663nobodyさん:05/03/10 22:24:02 ID:???
>>658
だからたまたま(有効範囲内が)同じだということだったんだが…
664nobodyさん:05/03/11 11:29:21 ID:???
文字列と数字を比較したりしてもそんな挙動することあるな
if( 0 == "test") とか多分true
そういうときに if( 0 === "test") ってやるんだっけか
665641:05/03/12 09:17:24 ID:???
Smartyのインストールが無事に出来ました
何日もかけて今頃やっとかよっ!って感じなのですが・・_| ̄|○

ご指導してくださった皆様ありがとうございました。
666641:05/03/12 11:31:22 ID:Eai46BlS
こんにちは。
何度もすみません。
Smartyをインストールできたのがうれしくて、書籍の
サンプルをそのまま使って、ローカルでテストしてみたのですが、
Fatal error: Cannot redeclare loginfunction()
(previously declared in C:\Program Files\Apache Group
\Apache2\htdocs\samples\chap5\mng\auth.php:12)
というエラーが出てきてしまいます。
667641 続きです:05/03/12 11:31:40 ID:Eai46BlS
エラーを調べてみたのですが、関数の二重定義 のために
起きているエラーだ、という所まで検討がついたのですが、
いかんせん、書籍に乗っているサンプルを何もいじっていない
コードなので、なにが悪いのか、わからないのです。
もしかして、知らない間に、どこかいじってしまったのかも、と
思って、再度CD−ROMから該当ファイルをインストールしてみたのですが
同様のエラーのままでした。

コードの該当部分は、下記になります。
<?php
require_once("DB.php");
require_once("Auth/Auth.php");
require_once("chap5/MySmarty.class.php");
$dsn="mysqli://php:php@localhost/sample";
$params=array(
"dsn" => $dsn,
"table" => "mng_usr",
"usernamecol" => "uid",
"passwordcol" => "passwd");
function loginFunction(){
$o_smarty=new MySmarty();
$o_smarty->display("login.tpl");
}
<略> ?>
どこが悪いのか、ご指導いただけないでしょうか・・・・。

よろしくお願いいたします。
668nobodyさん:05/03/12 11:47:33 ID:???
>>667
smartyとはもう関係無い話だと思うのだが。。
loginfunctionが二重定義されているという事ならば、
本当にそうなっているのか、
DB.php、Auth/Auth.php、chap5/MySmarty.class.phpの中や、
さらにその中でrequireやincludeされているファイルを
検索して確かめたらいいのでは?
その上で、どのfunction loginFunctionを使うかはそれを作った人の意向によるかと。
669641:05/03/12 12:31:08 ID:???
>>668さん
ご指摘ありがとうございます。
ファイル内を、検索して探してみます。

おっしゃる通り よく考えたら、確かにSmartyとは直接
関係なかったですね・・_| ̄|○
すれ汚し、大変失礼いたしました。
670nobodyさん:05/03/13 19:08:22 ID:8WQj/L10
Smarty入門~PHP5+テンプレート・エンジンでつくるMVCアプリケーション~
http://www.amazon.co.jp/exec/obidos/ASIN/4798108839

買おうか迷っているので感想キボンヌ
671nobodyさん:05/03/13 19:12:02 ID:???
>>670
オビを見るに微妙な内容だな
672nobodyさん:05/03/13 19:27:34 ID:???
入門する程のものなのか
立ち読みで十分な希ガス
673nobodyさん:05/03/13 19:56:38 ID:???
山田 祥寛 (著)はJavaのライターでは有名な人だな。
674nobodyさん:05/03/13 20:08:38 ID:???
まるごとPHPにも書いてるね。
・・・「かいてる」の変換候補一発目がなぜか「Keitel」でびびった。
675nobodyさん:05/03/13 21:11:31 ID:???
>>673
PHP界隈でも結構書いてる。ライター一本でちゃんと食っていくのには
そのぐらい書かないと駄目なんだなと、いつも思い知らされる訳だが。
676nobodyさん:05/03/13 22:03:03 ID:???
MVCってのは自前かな?
それともMojaviとか使ってるのかな?
677nobodyさん:05/03/13 22:56:19 ID:???
>>676
Mojaviを使っていたら、あの帯に書いてありそうな希ガス。
まぁ、それ以前にMVC=フレームワークじゃないし。
678nobodyさん:05/03/13 23:20:57 ID:???
smartyで、
$smarty->display([テンプレートファイル名]);
とやると標準出力(ブラウザ)にHTMLが出力されますが、
これをファイルに出力させることはできるのでしょうか?
679nobodyさん:05/03/13 23:28:24 ID:???
山田祥寛さんの書くものは疑ってかからないと駄目。
ttp://d.hatena.ne.jp/nadi/20040215#1076810117
ttp://d.hatena.ne.jp/nadi/20040306#1078484912
680nobodyさん:05/03/13 23:54:01 ID:???
>>679
でもこの人が書いた基礎PHPって本はホント良いよ。
初心者には超オススメ。

でもtemplate_cのパーミッションを777にしろって
書いてあったのはポカーンだったけど。
681nobodyさん:05/03/14 00:39:54 ID:???
>>670
ゴミ同然。買うな。
だいたいPHP5とか明示しててちゃんとPHP5のスタイルで書いてる書籍なんて
いまのところ一冊もない。Smartyが覚えたかったらマニュアルみれ。
日本語に翻訳されたドキュメントもあるしぐぐれば使い方はたくさんでる。
PHP5関連の内容についてはマンモス本の劣化コピー。

>>674
まるごとPHPが有名なのはPEARパッケージの開発者とかが執筆してるから。
コミュニティに一切貢献してない彼が執筆メンバにいることがかなり不思議。

http://angelicwing.net/diary/index.php?mode=one&parent_id=3801
MVC自体わかってない。わけたらいいってもんじゃない。
valueobjectって、、便利だと思ってるの?
そしてコメント欄に注目。PHPにおけるmysqlのdisconnectについて
まったくわかってない。明示的に指定しないのは常識。

>>680
現場でPHPのコード書いた事ない人間の書籍でよく勉強できるよな。
そうやってマニュアル読んだだけの素人が書いた書籍で勉強した
ダメプログラマがダメコードを作る。
この程度のレベルの人間が書籍を書いていることが問題。

でも(趣味で触るだけの)初心者にはいいかもね。
682nobodyさん:05/03/14 00:44:19 ID:???
>>681
>明示的に指定しないのは常識。
そうなの?
でも指定してもいいよね?
683 ◆AngelH/kMI :05/03/14 01:04:47 ID:???
>>682
どっちでもいいよ。

connectする -> プログラム終了とともに切断
pconnectする -> disconnectは無視する
だから、どちらにしろあまり意味ないと思うです。
684nobodyさん:05/03/14 01:10:40 ID:0xZUZ/dg
羽根の人キタ━━━━━(゚∀゚)━━━━━!!!!
685nobodyさん:05/03/14 01:29:18 ID:???
でも使ったあとは後始末、って癖は悪くはないと思うぞ
PHP以外の言語にも手を出そうというならなおさら(GCが増えてきたにしろ)
致命的な差異が出ないなら、初心者の頃はそういう考えから身につけてもいいんジャマイカ
ちなみに漏れは書くのめんどいので閉じないことが多い
686nobodyさん:05/03/14 02:11:46 ID:???
言いたい事は分かるが。
でも非機能要求を絶えず意識する癖なんて持っても PHP/web アプリで量的に重いコードを設計する人になられても困る。
ソレはソレ、コレはコレじゃないか。
原理原則やデータベース個々の基礎知識は弁えて当然というのはまた別のプロセスでしっかり身につける方が。
687nobodyさん:05/03/14 02:56:18 ID:???
Smartyと関係ないやん。
688686:05/03/14 03:46:48 ID:???
それもそうだ。スレ違いスマソ。
689nobodyさん:05/03/14 10:18:44 ID:???
>>678
fetchで出力内容拾って、phpのファイル出力で吐き出したら?
690678:05/03/14 11:14:44 ID:???
>>689
なるほど、検討してみます。ありがとうございます。

昨晩から試行錯誤を繰り返し、
現在のところoutputfilterで、出力直前の文字列を横取りし、
ファイルに吐き出すという、ややトリッキーな方法を行っています。
691nobodyさん:05/03/14 11:51:06 ID:???
ちゃんと管理して明示的に閉じてるならそれはそれでいいと思うよ
692nobodyさん:05/03/14 21:41:11 ID:???
明示的にdisconnectすることには機能的な意味の他に、リソースを
参照している範囲が明確になるという点もあるので「クローズ・削除
しない方が性能的に有利かつPHP的な使い方」というのはアホの理論。
693nobodyさん:05/03/15 00:50:43 ID:???
もういいって

>>690
ファイルに書き出すのはob_get_contents()使うのが一番楽と思うよ
694678:05/03/15 11:52:00 ID:???
>>693
ありがとん
695nobodyさん:05/03/15 17:25:00 ID:???
スレ違いかもしれないけどhtmltemplateってのはどう?
http://www.lyricfathom.com/htmltemplate/
696nobodyさん:05/03/16 10:24:48 ID:???
使ったことある。結構良いんだけど、自由度が足りない。
記述方法なんかは、スマーチーと似た感じ。ドットがスラッシュになった感じだったかな。
ロジックの追加とかも簡単、まあそれでも自由度が低い。elseとかやりたいなら2、3層前とかから書き直さないといけないから、意味ないし。
697nobodyさん:05/03/16 18:40:40 ID:???
>>695
HTMLtemplateのくわしい話MLに、最近ひさびさに
メール流れた〜と思ったら。SPAMでした…orz

2年近く放置してる作者も、それに登録したまんまの俺もどうかしてますが。
あ、でも新しい系列になって発展してたんですな。

俺の感想も>>696に似たようなもんだけど、
元々の割り切りからも考えるに、プログラマからすると
どうしても物足りなさはある。かといって発展拡張を考えるなら
高機能な標準的なテンプレートを使っちまう方が良いし というところ。

でも自分用の軽量なテンプレには部分的にはパクらせてもらった。
テンプレートを使うんじゃなくて、テンプレートを作る上で
参考にするのは良いと思うよ。作りが簡単だし。

698nobodyさん:2005/03/26(土) 16:50:17 ID:9cvI6Qz8
smartyでtplファイルの方で、文字列操作ってできます?
123456789
というデータをphpからうけとったのを
456
のところだけ切り取って出力するような・・・
699nobodyさん:2005/03/26(土) 16:59:08 ID:???
>>698
{PHP}
じゃダメなの?
700nobodyさん:2005/03/26(土) 17:01:27 ID:9cvI6Qz8
>>699
なるべくなら使わないでいたいんですけど、
それがいいのかなぁ
701nobodyさん:2005/03/26(土) 17:04:26 ID:???
>>698
修正子使えばできる。ないなら作れるし。
702nobodyさん:2005/03/26(土) 17:08:57 ID:???
>>698
substr()を修正子として使うのがよさげ
703nobodyさん:2005/03/26(土) 17:13:51 ID:9cvI6Qz8
>>701-702
レスありがとうございます。
http://sunset.freespace.jp/smarty/SmartyManual_2-6-3J_html/
にはsubstrは無いみたいですけど、>>699さんの方法か
何かで定義しなくても使えるものなんでしょうか?

教えて君で申し訳ないです。
704nobodyさん:2005/03/26(土) 17:22:08 ID:???
>>703
文字列関数はひっそりと修正子として使える。
705nobodyさん:2005/03/26(土) 17:25:59 ID:9cvI6Qz8
>>704
まじすか。
ありがとうございます。使ってみます−
706nobodyさん:2005/03/26(土) 17:32:21 ID:???
>>705
$securityをtureにしてると$security_settingで指定しないと使えないから気をつけろよ
707nobodyさん:2005/03/26(土) 17:33:45 ID:9cvI6Qz8
tpl上に{substr($hoge,4,3)}
と、書いてみたのですがエラーになってしまいます。
{$hoge}だと123456789と表示されます。
使い方間違ってるのでしょうか?
708nobodyさん:2005/03/26(土) 17:34:13 ID:9cvI6Qz8
>>706
あ、それかも。みてみますー
709nobodyさん:2005/03/26(土) 17:39:51 ID:9cvI6Qz8
>>706
もしかして、その設定はtpl上で変更するのは無理でしょうか?
私がいじれる権限があるのはtplのみなので鯖管理者に
お願いしないとだめでしょうか?
710nobodyさん:2005/03/26(土) 17:53:07 ID:???
>>707
マニュアル読んだ?
修正子の使い方、もうちょっとしっかり読めばできると思うよ。
書き方間違ってるから。
711nobodyさん:2005/03/26(土) 17:53:40 ID:???
>>707
修正子だっちゅーねん。
712nobodyさん:2005/03/31(木) 01:53:29 ID:D4Jqx9KW
こんにちは。

smartyで読み込んだhtmlの<head></head>のなかに覧の文字が
あると、エラーになってしまいます。
\とか\""\などでかこってみたりしたのすが、駄目でした。
どなたか回避方法をご存知ないでしょうか・・・?

よろしくお願いいたします。
713nobodyさん:2005/03/31(木) 02:02:54 ID:???
>>712
ガイシュツ。スレ嫁。

ヒント:SJISの覧には { がかくされている。
714nobodyさん:2005/03/31(木) 02:34:14 ID:D4Jqx9KW
>>713
ううぅ。このスレを通しで読んでみたのですが
わからなかったのです。
mbstring.http_output をSJISに、というのが
ソレかな、と思ったのですが、Smarty.class.php
の中に、mbstring.http_output なんてなかったぅ。
php.iniとhttpd.confはSJISに変えてみたのです。
715nobodyさん:2005/03/31(木) 10:54:23 ID:???
>>714
{literal}

{/literal}
でどうよ。
716nobodyさん:2005/03/31(木) 11:32:56 ID:???
これってめんどくさいよね
みんなどうしてるの?
タグを変えてるとか?

はやくマルチバイトに
完全対応してくれないかな
717nobodyさん:2005/03/31(木) 11:39:58 ID:???
そもそもPHPをSJISで書くのが間違ってる。
718nobodyさん:2005/03/31(木) 12:33:56 ID:???
Smarty側のタグ{}を別の表記に変えればよい
719nobodyさん:2005/03/31(木) 14:50:48 ID:???
>>716
テンプレートもコードもDBもすべてEUC-JPで統一。
出力の段階でSJISにして吐く、ってのは?

print mb_convert_encoding($smarty->fetch('index.tpl'), 'SJIS', 'EUC-JP');

とか、またはアウトプットフィルタで以下のようにするか。

function convert_to_sjis($output, &$smarty)
{
return mb_convert_encoding($output, 'SJIS', 'EUC-JP');
}

$smarty->register_outputfilter('convert_to_sjis');
$smarty->display('index.tpl');
720nobodyさん:2005/03/31(木) 17:13:50 ID:???
EUCでやっても
同じ問題がでるだろ?
721nobodyさん:2005/03/31(木) 22:31:52 ID:???
この辺参考にどうぞ。
ttp://ns1.php.gr.jp/pipermail/php-users/2003-February/013592.html

デリミタを他の文字に変えても可。<% %>とか。
722714:皇紀2665/04/01(金) 05:48:12 ID:jghdOqLB
>>715
出来ました!ありがとうございました。
723714:皇紀2665/04/01(金) 21:04:31 ID:jghdOqLB
名前にへんなのがついてる・・・・。
なんでしょうか。この現象は。びくびく。
724nobodyさん:皇紀2665/04/01(金) 22:04:34 ID:???
アップグレードお忘れなく!
725nobodyさん:2005/04/02(土) 19:13:00 ID:???
皇紀
726nobodyさん:2005/04/03(日) 12:34:52 ID:5tuC+LFk
>>724

ttp://www.netsecurity.ne.jp/1_2283.html より

▽ Smarty------------------------------------------------------------
Smartyは、regex_replace変換機能が適切なチェックを行っていないことが原因で
セキュリティホールが存在する。この問題が悪用されると、
攻撃者にテンプレートセキュリティコントロールを回避して任意のPHPコードを実行される可能性がある。 [更新]
2005/03/29 登録

危険度:高
影響を受けるバージョン:2.6.8未満
影響を受ける環境:UNIX、Linux、Windows
回避策:2.6.8以降へのバージョンアップ


っていうことは、regex_replaceを使ってないか、
勝手に他人がテンプレートを変更できる環境でなければ大丈夫ってことかな?

現状、平穏無事に動いているものをアップデートするって勇気がいるよね。。。
727nobodyさん:2005/04/03(日) 14:50:09 ID:???
別に現状被害が無くてもセキュリティホールがあるバージョンからアップデートするのは
当たり前の事だと思うんだが。
728nobodyさん:2005/04/03(日) 15:07:18 ID:???
現状実害が無いのなら、無用なアップデートをしないのが
当たり前の事だと思うんだが。
729nobodyさん:2005/04/03(日) 16:02:02 ID:???
>>728
おまえ、死ぬほど迷惑な奴だな。
730nobodyさん:2005/04/03(日) 16:56:18 ID:???
今動いているものを、機能が追加されたとかでむやみにアップデートしないというのは
コンピュータ分野だとまぁその通りなんだけど、セキュリティーホールが見つかって
その穴を埋めないのは保守する上で過失にならないか?
731nobodyさん:2005/04/03(日) 19:02:00 ID:???
>730
むやみに変更しないというのは運営者としては正しい判断だろう
頭を使える人はアナウンスをよく見てどちらのリスクが高いか考えるはず、
Apacheにしたってバージョンアップで不具合が起こった事は何度もある
緊急以外の件に関してはしばらく様子をみてやるのが賢い人だと思うね。
732nobodyさん:2005/04/04(月) 04:24:04 ID:???
穴の開いたままのバージョンを使ってると
自分側の仕様変更やらで、忘れた頃にあらまあなんて事もあるからね。
さっさとアップデートしておくのが無難だと思うけど。
733nobodyさん:2005/04/04(月) 05:11:45 ID:???
>>732
それこそ「動いているものを無闇に変えない」を
自分の書いてるプログラムにも適用ですよ。

とはいえ、自分がPHPを使うメインは個人的な便利なツールの作成だから、
PHP環境は実験的実装上等「常に最新」ですけどね。
734nobodyさん:2005/04/04(月) 11:47:50 ID:???
こういう流れでWEBアプリケーションは
現状維持で保守的になっていくわけですね
735nobodyさん:2005/04/04(月) 13:46:26 ID:???
実際問題そうだね
Webアプリって個人やSOHOで開発されてるケースが多いけど
数年後に変更しようにも業者が倒産したとか会社はあっても開発者が退職したとか仕様書が無い、といった具合でよくわからなくなってるのが多いよ
たまになんとかなりませんか? って話が来るけど殆どは予算無いっていうから
根本的な解決はせず無理やりつじつま合わせで対処することも多いよ。
話題がかなりそれちゃったな、ごめん。

でもSmartyとはツール使ってれば有る程度は標準的な手法でつくられている事が多いのでまだマシだよね。
736nobodyさん:2005/04/04(月) 15:53:31 ID:???
だな
そういうのに限って中見たら
崩れかけのジェンガみたいになってるよな
これでよく動いてるなみたいな
見た目はお城だからクライアントは
すぐ直せるでしょみたいな雰囲気で持ちかけてくるしな
ってこれただの愚痴だな、、、
PEARやSmarty使ってるならまだいいよ。。。
737nobodyさん:2005/04/04(月) 16:13:20 ID:???
壊れかけのRADIO
738nobodyさん:2005/04/21(木) 21:02:24 ID:SxD/0C5U
なぁ、ちょっと聞いていいか?
SmartyってPHPの標準じゃないんだろ?
普通はPHPの標準ライブラリであるPEARのHTML_Template系を
つかうべきじゃないのか?
739nobodyさん:2005/04/22(金) 01:38:38 ID:???
じゃあいつ使うの?
740nobodyさん:2005/04/22(金) 05:01:10 ID:xlQLPR84
実稼働させてる、
中規模程度以上のサイトでSmarty使ってる人いる?
将来開発が止まってしまうかもしれない、というリスクはあるから
中核に組み込むのはどうなのかと思ったりするんだけど
741nobodyさん:2005/04/22(金) 05:02:58 ID:???
現状でも十分使える気もする。
742nobodyさん :2005/04/22(金) 07:43:32 ID:NegODiov
こんにちは。
どなたか教えて下さい。
Smartyでテーブルを表示させているのですが、
テーブルセルの縦(height="25")の指定はちゃんと反映されて
いるのですが、横幅(width="100")が無視されてしまうのです。
日本語サイトなどをめぐってみたのですが、解決策が
見つからなくて・・・。
どうかご指導よろしくお願いいたします。
743nobodyさん:2005/04/22(金) 09:10:00 ID:???
>>742
それSmartyじゃなくてHTMLの問題だろーよ
744742:2005/04/22(金) 09:25:44 ID:NegODiov
>>743
いえ、それが、HTMLだと問題なく表示されるのですが、
PHPからSmarty(tplファイル)として読み込むと
とたんに横幅が無効になってしまうのです。
745nobodyさん:2005/04/22(金) 09:55:43 ID:???
うpして
746nobodyさん:2005/04/22(金) 10:34:08 ID:???
>>744
Smartyが生成したHTMLと
問題なく表示されるHTMLと
どこかが違ってるはず。
747nobodyさん:2005/04/22(金) 12:02:00 ID:1X8ubYE4
>>740
pearに登録されているからって開発中止にならんという訳じゃないよ
メンテナがやる気をなくせば開発は止まるのは一緒。
748nobodyさん:2005/04/22(金) 13:07:51 ID:???
Smarty を PHP4, PHP5 ともに使ってるよ。
複雑なものでもないし、自分で修正できるんじゃない?
つーか、もう安定して枯れてると思うし。
749742:2005/04/22(金) 13:59:44 ID:NegODiov
>>745 >>746 
レスありがとうございます。
テストしているのは、下記のコードで、拡張子をhtml から
tplに変えたのみなのです。
phpでは $smarty->display("test.tpl"); で読み込んで
います。
よろしくお願いいたします。
750742 コードです。:2005/04/22(金) 14:00:16 ID:NegODiov
<html>
<head>
<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<meta http-equiv="Content-Type" content="text/html; charset=shift_jis">
<title>新しいページ 1</title>
</head>
<body>
<table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#C0C0C0" width="300">
<tr>
<td width="200" height="20" bgcolor="#8284CE"> </td>
<td width="50" height="20" bgcolor="#8284CE"> </td>
<td width="50" height="20" bgcolor="#8284CE"> </td>
</tr>
<tr>
<td width="200" height="20"> </td>
<td width="50" height="20"> </td>
<td width="50" height="20"> </td>
</tr>
<tr>
<td width="200" height="20"> </td>
<td width="50" height="20"> </td>
<td width="50" height="20"> </td>
</tr>
</table>
</body>
</html>
751nobodyさん:2005/04/22(金) 14:11:23 ID:???
>>750
手元の環境ではそういう現象は起きなかった。
試すまでもなく、普通に考えても起きるわけないんだけどなぁ。
>>746が聞いてるけど、テンプレートとsmarty出力結果の差異はどうなのよ?
752nobodyさん:2005/04/22(金) 14:15:18 ID:???
>>750
ブラウザが見てるHTMLを比較してみな。

具体的には、各々のHTMLをブラウザのソースを表示を使って取得して、それらを比較するって事ね。
753742:2005/04/22(金) 14:40:09 ID:NegODiov
>>751 >>752
レスありがとうございます。
ソースを表示で見る事は思いつきませんでした_| ̄|○
さっそく見てきたのですが、きっちりwidth="50"だけが
消えていました。
なんでなのか、まったく想像がつかないです。
Smartyの嫌がらせとしか思えないです・・・・。
754nobodyさん:2005/04/22(金) 14:44:53 ID:???
>>753
なんでもそうだけど、プログラミングってのは、鏡だと思うと良いよ。
自分のやった事が、そのまま反映されてるだけだよ。

後、デバックの極意なんだけど、コーヒーでも淹れて、一服しな。
これは、本当に良く効く。いや、マジで。
755742:2005/04/22(金) 14:49:47 ID:???
>>754
ありがとうございます。 そーいえば2日徹夜でした。
気がつけばすごい眠いかもです。
・・・せっかくの有給なのに!なんてこったいです_| ̄|○
一回、寝てみます。
756nobodyさん:2005/04/22(金) 15:38:04 ID:???
キャッシュが効いてるだけじゃないの?
757742:2005/04/23(土) 08:45:37 ID:???
こんにちは。
おきてから、ふと思い立ってセルに折り返し無し指定を
付けてみたら、意図した横幅で表示できました。
ご指導してくださった皆様、ありがとうございました。
758nobodyさん:2005/04/23(土) 11:56:15 ID:???
>>756 に一票 おそらくそれでしょ
759nobodyさん:2005/04/23(土) 11:56:52 ID:???
>>757 を見ずにカキコしてしまいました。 鬱。
760nobodyさん:2005/04/23(土) 16:06:08 ID:???
教室の通路を通るときに、

   こんなところにたって雑談している女いると
    ↓
机 机女 机 机
   女
机 机  机 机

   わざわざここを通って女の尻にちんぽ擦りつけながら通った
     ↓
机 机女 机 机
   女
机 机  机 机
761nobodyさん:2005/04/23(土) 18:16:06 ID:???
えいじ
762nobodyさん:2005/04/24(日) 16:48:56 ID:f26GRMZz
質問です。
{foreach}{/foreach}なんかのループから抜けるにはどうしたら
よいのでしょうか。
php で言う break; がしたいのです。
763nobodyさん :2005/04/24(日) 18:32:34 ID:???
なんらかの意図によって変ってくるのでは?
764nobodyさん:2005/04/24(日) 18:43:22 ID:f26GRMZz
>>763
ありがとうございます。そういうことではなくて、
{foreach}
{if $hoge == $fuga}
{break}
{/if}
{/foreach}

といったような{break}なんてのがあればいいのですが、無いですよね。
相当するものってありますでしょうか。
765nobodyさん:2005/04/24(日) 21:16:16 ID:???
>>764
そういう処理はSmartyに配列をアサインする前に済ませておくものでは?
766nobodyさん:2005/04/24(日) 21:22:02 ID:???
>>764
僕もassign or appendする前に処理しとくべきだと思うが、
無理矢理やるならこんなかな

{eval var=0 assign="a_break"}
{foreach from=$a_array item=a_item}
{if $a_item == '以降break'}
 {eval var=1 assign="a_break"}
{elseif $a_break==0}
 {$a_item}
{/if}
{/foreach}
767nobodyさん:2005/04/24(日) 22:05:50 ID:???
showは使えない?
768nobodyさん:2005/05/02(月) 03:39:29 ID:zPNJQI1N
修飾子にオブジェクトのメソッドを指定する方法は
ないのでしょうか?
769nobodyさん:2005/05/05(木) 23:04:03 ID:HD8kZxJB
テンプレートの中にサブルーチンみたいなものを書くことはできない?
離れた場所に何度も出てくる要素を、サブルーチン呼び出しみたいに
一元的に記述したいんだけど。
あらかじめmodelで処理しておけばいいのかもしれないけど
視覚的要素だからテンプレートの中に入れておきたい
770nobodyさん:2005/05/05(木) 23:25:33 ID:???
プラグインとか{php}
771nobodyさん:2005/05/05(木) 23:28:23 ID:???
>>770
php直書き出来たんだ
激しくさんくすこ
772nobodyさん:2005/05/06(金) 00:15:12 ID:???
そしてそれが意味することの重大さに戦慄を覚えるのであった。。
いや、まぁ、デザイナと喧嘩してるんでもなきゃ別に問題ないんだけどね。
773nobodyさん:2005/05/06(金) 00:49:55 ID:???
コワイコトイワナイデ
774nobodyさん:2005/05/06(金) 01:25:35 ID:???
普通にinclude使うのが安全だと思うけどねえ。
パラメータも渡せるし。
まあ本人が満足なら良いんだけど。
775nobodyさん:2005/05/06(金) 01:28:58 ID:???
>>769
SSIじゃだめ?
776nobodyさん:2005/05/09(月) 10:21:54 ID:Ogk2vGAk
$aaa['111']['222']['333'] = 'あいう';
$bbb['123'] = '222';
と定義しておき
{$aaa.111.$bbb.123.333}
とし「あいう」と表示したいのですが
意図した通りには動作しません。感覚的には
{$aaa.111.($bbb.123).333}
というような事をしたいと思っています。
template tool-kitだと
[% $aaa.111 _ $bbb.123 _ 333 -%]
というような感じで出来たと記憶していますが
smartyの場合はどのようにすればよいでしょうか。
777nobodyさん:2005/05/10(火) 12:35:26 ID:???
{$aaa[111][$bbb[123]][333]}ってできない?
っていうかテンプレートにこんな変数書かなくてすむように
ロジックを工夫したほうがいいよ。
778nobodyさん:2005/05/10(火) 15:41:39 ID:???
レスありがとうございます。
>>777
>{$aaa[111][$bbb[123]][333]}ってできない?
これでは上手くいきませんでした。

>っていうかテンプレートにこんな変数書かなくてすむように
>ロジックを工夫したほうがいいよ。
MVCモデルを実現しようとした場合、このようなケースに遭遇する事は
多いと思うのですがいかがでしょうか。
779nobodyさん:2005/05/10(火) 17:11:51 ID:???
ほんとだ。{$aaa[111][$bbb[123]][333]}
ではコンパイルエラーになるね。
{$aaa.111[$bbb.123].333} ではどう?

コンパイルファイルのコードを確認してみたらいいかも。

どうしてもテンプレートでやりたきゃ
{assign var="ccc" value=$aaa.111} とかなんとか。
780nobodyさん:2005/05/10(火) 17:16:42 ID:???
どうも "[]"の入れ子がだめみたい。
781nobodyさん:2005/05/10(火) 17:53:28 ID:???
>{$aaa.111[$bbb.123].333}
これでも駄目でした。
>{assign var="ccc" value=$aaa.111} とかなんとか。
これも考えたのですがassign関数は$aaa.111を$aaa['111']とは見てくれず
「$aaa . ".111"」と解釈されてしまうみたなんです。
出来上がったキャッシュファイル、Smartyのソースを確認して検証してみます。
782nobodyさん:2005/05/10(火) 18:19:28 ID:???
{php echo $this->_tpl_vars['aaa']['111'][$this->_tpl_vars['bbb']['123']]['333']}

こんなこともわからんのか馬鹿どもめ!!!!!!!!
783nobodyさん:2005/05/10(火) 18:53:40 ID:???
{$aaa[111][$bbb.123][333]}

{$aaa.111[$bbb.123].333}

{assign var="ccc" value=$aaa.111}
{assign var="ddd" value=$bbb.123}
{$ccc[$ddd].333}

{php}
echo $this->_tpl_vars['aaa']['111'][$this->_tpl_vars['bbb']['123']]['333']
{/php}

すべて"あいう"と表示されるけどなぁ。
あと{php}は$security=trueで使えないってことだけ。為念。
784nobodyさん:2005/05/11(水) 13:47:45 ID:???
改めて>779、>782、>783の方法で確認してみた所、正常に表示出来ました。
しかし開発中のソースで試したところ、期待通りの動作をしませんでした。
原因を追ってみると数字と文字(配列と連想配列?)の場合で挙動が違うようでした。

・定義
$aaa['kkk']['222']['333'] = 'あいう';
・テンプレート設定
1={$aaa[kkk][222][333]}
2={$aaa.kkk.222.333}
・結果
1=
2=あいう
・キャッシュされたphpの中身
1=<?php echo $this->_tpl_vars['aaa'][$this->_sections['kkk']['index']][222][333]; ?>
2=<?php echo $this->_tpl_vars['aaa']['kkk']['222']['333']; ?>

感覚的には{$aaa['kkk'][222][333]}とかでいけそうですがエラーでした。
初めに提示した前提条件が自分の実環境と異なり、オマエらの労力を無駄に消費させてしまい申し訳ありません。
785nobodyさん:2005/05/11(水) 17:37:03 ID:???
Smarty_Compiler.class.php 1750行以降
[]のなかのインデックスは数字が変数じゃなければsection変数に変換されるね。
この挙動はこれでいいのかな?

確かに知らなきゃはまる。
786nobodyさん:2005/05/13(金) 12:08:00 ID:???
ぶっちゃけSmartyはデザイナーとの共同作業には向かないでしょ。
テンプレートにロジックは多少なりとも入れてはいけないと
思うのだが、なんでSmartyなんてヘンテコな物が流行るのか?
HTML_Template_Sigma使えよお前ら。
787nobodyさん:2005/05/13(金) 12:55:02 ID:???
>>786
もとデザイナーで今はプログラマーに転職した俺から言わせれば、
Smartyはデザイナーとの共同作業に向いてると思うぞ?

別にデザイナーにSmartyの形にしてもらう訳じゃない。
デザイナーには本当にデザインだけしてもらう。
レイアウトの関係上、ダミーでいいから勝手ににデータを固定で打ってもらう。
例えば、金額のところには、\999,999,999とか見たいな感じ。

そのデザインが出来上がったら、プログラマ側で、そのデータ固定になってた部分に
ロジックなりを書き込む。
此処で、デザインがちょっと・・・という事になっても、そのロジックが書いたままの
テンプレートをデザイナーに渡して修正してもらえば良い。

というのは、Smartyの記述がされていても、HTMLとして普通に開けて、
データ固定で売ってもらった所が変わってるだけだから、
デザインする上では何の支障も無い。
788nobodyさん:2005/05/13(金) 16:21:59 ID:???
>>787
じゃあ、ロジックを入れたあとにデザインの修正が出た場合はどうする?
デザイナーが持ってるマスターのテンプレートを修正してもらって
その後ロジック入れなおしだ。Smartyという名前なのにスマートじゃないね。
大体テンプレートにロジックいれたらテンプレートの意味ないんだが。
テンプレートってのは純粋なHTMLであるべきで、テンプレートをブラウザで
見たらどのような物か分かるべきで、オーサリングツールで何の問題もなく
開くことができるべき。
789nobodyさん:2005/05/13(金) 16:28:18 ID:???
>>788
ロジックって、ループとかその程度じゃないの?
表形式のデータの部分をループさせるとか。

それに、そういったロジック入れたままでもデザイン修正はできるよね。
ロジック入ったままのファイルをデザイナーに渡して、それを修正してもらえばいいんだし。

つうか、Smartyのロジックが掛かれてても、ブラウザで普通に見られるし、
何の問題も無いような・・・

Smarty使ったことないのかな・・・
790nobodyさん:2005/05/13(金) 16:42:31 ID:???
アンチSmartyスレ立ててそっちでやってね
791nobodyさん:2005/05/13(金) 16:45:25 ID:???
>>788
テンプレートにロジックを入れると気持ち悪いという主張は理解出来る。
ただ、php 自体 html にロジックを埋め込むための言語として出来たもんだし、
そういう問題意識は php プログラマには希薄なんだよ。
792nobodyさん:2005/05/13(金) 18:47:13 ID:???
>>788
PHPがリクエストに対する処理から吐き出しまでを行い、
処理データを取捨選択するのがsmartyという流れだと思えば良いんじゃない?
smartyは基本的に流れてるデータをキャッチするだけなんだしさ。
793nobodyさん:2005/05/13(金) 19:40:27 ID:???
PHPでテンプレートエンジンが使われるようになったのは
PHPコードにデザインが入っているのが「キモい」からだろ?
SmartyによってせっかくPHPコードからHTMLを分離したのに
HTML側にロジックが(多少なりとも)入ってしまったら
元の木阿弥だろっつーのよ。理解できんだろうなあんたらには。
794nobodyさん:2005/05/13(金) 20:12:17 ID:???
>>793
言わんとしてることは分かるけど、その問題はSmarty独自の問題なのか?
それは使ってる人自体の使い方などが悪いとかそういう問題じゃないの?
795nobodyさん:2005/05/13(金) 20:12:52 ID:???
>>793
>PHPでテンプレートエンジンが使われるようになったのは
>PHPコードにデザインが入っているのが「キモい」からだろ?

前提が間違っとる。

おれはSmartyってのはMVCのViewをデザイナに(半ばだまして)やらせて
プログラマが楽するものだと理解している。つまり、テンプレートエンジン
のなかで、ロジックが記述可能なものはそういう意図で作られているわけだ。


Viewの機能を受け持つ以上、あの程度のロジックは書けないと俺が困る。
796nobodyさん:2005/05/13(金) 20:21:31 ID:???
>>793
じゃあどうやって可変長の配列をテンプレートで扱うのよ?
「ロジック」ったってPHPコードをベタ書きするわけじゃなし。
797nobodyさん:2005/05/14(土) 00:24:43 ID:???
>>795
あんたと仕事をするデザイナーは余計なこと(Smartyの独自タグ)まで
覚えさせられて可哀相にな。プログラマが楽するためにデザイナーが
犠牲になるわけだ。つくづく自分勝手な考え方だな。

>>796
例えばHTML_Template_Sigmaでは、ループや分岐となる部分は
とりあえず<!-- BIGIN hoge -->と<!-- END hoge -->で囲むんだよ。
その囲んだ部分をどのように使おうと自由。
デザイナーはまったく変なロジックなど意識しなくて良いし、
何よりもただのコメントなので妥当なHTMLとなり、オーサリングツール
でも問題なく開けるし、ブラウザで開いてもどのようなテンプレートか
一目瞭然で分かる。
798nobodyさん:2005/05/14(土) 01:09:26 ID:???
色んな分業の仕方があると思うけど、
俺の関わったプロジェクトだと
・デザイナー:html/JSPによる値を画面に展開するロジック
・プログラマ:J2EE部分のビジネスロジック
だった。その程度のことが出来ないデザイナは要らないって。

ただ、これは社内のイントラの仕事だったので
デザインの比重が大きいものだと、本当に絵を描くだけ
アイコン作るだけのデザイン担当者も必要だと思う。
799nobodyさん:2005/05/14(土) 03:14:15 ID:???
>>798
そういうプログラマよりの自分勝手な考えの奴が多いから
プログラマは性格が悪いなどのレッテルを貼られるんだよ。
ちょっとは人の身になって考えるということをしてみたら?
そりゃデザイナーでもJavaScriptだのJSPやSmartyなどの独自タグ
覚えようとする前向きな人もいるけど、やっぱりデザイナーの仕事は
純粋なデザインであってコーディングはプログラマの仕事だろ。
逆にプログラマはHTMLやCSSなどの知識はあって当たり前で、
俺はDreamweaverで雛形作って渡したりしてるけどね。
800nobodyさん:2005/05/14(土) 03:23:02 ID:???
>>799
?それをデザイナよりの自分勝手な考えとは言わないのか?
801795:2005/05/14(土) 03:48:00 ID:???
>>799
でもさ、デザイナだってテーブルの行ごとに色分けしたくなったくらいで
プログラマの仕事が終わるのを待ってたら締め切りが守れないぜ。

けして意地悪からだけでデザイナの仕事を増やしている訳でなく、
そういったデザインよりのロジックはデザイナがやるのが良いという
局面もあるんじゃないかな。とくに細かい変更要請がクライアントから
頻繁に飛んでくるのにつきあわなきゃいけないとか言う場合には。


あと、BIGINじゃなくって、BEGINね。
Template_SigmaってなつかしのPHPLibのテンプレートみたいなのかな
あれには苦しめられた。

そういうpush型のテンプレートエンジンに興味があるならjavaだけどEnhydra
なんか面白いかもよ。機会があったら使ってみ。
802nobodyさん:2005/05/14(土) 04:08:42 ID:???
>>799
そういうデザイナーは、よっぽどものすごいデザインでもできなければ、淘汰されるだけだと思うけどなぁ。
803nobodyさん:2005/05/14(土) 04:27:24 ID:???
>>800
>799はプログラマとしてデザ寄りの考え方だから自分勝手じゃない。
自分はデザ側だから、逆に>798にも激しく同意なんですけどね
804nobodyさん:2005/05/14(土) 05:06:39 ID:???
HTML_Template_Flexyだと タグの属性に flexy:if="foo" とか
flexy:foreach="foo,key,value" とか書けるけどこれはどう?
おいらは気に入ってます。

ただPEAR一家のみなさんはinclude_pathにあること前提で書かれてるから
Mojavi3と組み合わせると(回避する方法がないわけではないけど)autoload絡みでちと面倒。
805nobodyさん:2005/05/14(土) 06:11:56 ID:???
>>803
ほんとに、デザイナーとして同意なのか?

俺は素人のお遊びサイト作るのに、Mojavi+Flexyで作ってるけど、以前と比べて、ずいぶん楽ちんになったぞ。
これ、プロ(金がらみ)の立場で見ると、制作にかかるコストが減るって事だろ。
そっちを優先しないで、デザイナーとかプログラマの職域がとか、言ってたんじゃ儲からんだろ。
806nobodyさん:2005/05/14(土) 09:45:30 ID:???
>>797
Smartyと比べても余り変わらなくないか?
Smartyのループは{section ループの条件式}と{/section}で囲むだけ。
コメントにはならないが、普通にHTMLでは文字として表示されるだけ。
オーサリングツールだろうが問題無く開けるし、ブラウザでも問題無い。

それに、なんか話がおかしくなってないか?
ロジック云々言っていたのに、HTML_Template_Sigmaでロジックの話になってる。
結局、ロジック書くんじゃん。

最初はロジック書くのがどうたら言ってたのに・・・
807nobodyさん:2005/05/14(土) 11:59:01 ID:???
>>806
797ではないし、Template_Sigmaは使った事ないんだけど、PHPLibの
テンプレートクラスと同じようなものだとしたら、テンプレートファイルには
基本的にブロックの開始/終了と変数のプレースホルダーしか書けない。

で、php側でブロックを繰り返したり、またはブロックの中身を読み込んで
適当に加工したり、あるいは完全に置き換えたりするわけ。
808nobodyさん:2005/05/14(土) 12:16:28 ID:???
Smartyでも、こんな感じでHTMLのコメントで囲めば動くでしょ。

<!-- {section ループの条件式} -->
ループする内容
<!-- {/section} -->
809nobodyさん:2005/05/14(土) 12:48:10 ID:???
>>808
「ループの条件式」ってところがロジックになってんだろ?
810nobodyさん:2005/05/14(土) 13:15:46 ID:???
何このスレ
必死すぎてキモイ
811nobodyさん:2005/05/14(土) 13:32:06 ID:???
良く分からんがSmartyより便利なものがあったら
じゃんじゃん教えてくれ
812nobodyさん:2005/05/14(土) 14:12:12 ID:???
つHTML_TEMPLETE
813 ◆AngelH/kMI :2005/05/14(土) 14:16:56 ID:???
|x・)っ HTML_Template_Flexy
まあ、でもなんだかんだ言っても一番広まってるってのは強みやね。

Flexyみたいに、デフォルトをHTMLエスケープありにしてほしいところだけど・・・。
814nobodyさん:2005/05/14(土) 17:25:25 ID:???
Smartyとかいう得たいの知れないモジュール使いたくないっしょ。
やっぱりPEARが一番安心。
815nobodyさん:2005/05/14(土) 20:04:33 ID:???
>>808
Smartyはそれで動くんだ。Flexyではそれは動かなかった。
816nobodyさん:2005/05/14(土) 21:08:32 ID:???
Flexy的には
<div flexy:foreach="array,key,value">
ループする内容
</div>
というのもありですな。
817nobodyさん:2005/05/14(土) 21:20:19 ID:???
>>816
Flexyで、if 〜 else と続く場合に、うまく隠す方法はあります?
818nobodyさん:2005/05/14(土) 21:42:44 ID:???
>>817
elseが入ると無理っぽい。
だから事前に
if ($foo) {
$flexy->setData('foo', true);
$flexy->setData('_foo', false);
} else {
$flexy->setData('foo', false);
$flexy->setData('_foo', true);
}
として、テンプレートでは
<div flexy:if="foo">〜</div>
<div flexy:if="_foo">〜</div>
とやってる。
elseifとか複雑な分岐があるときも似たような感じで。
819nobodyさん:2005/05/15(日) 04:10:00 ID:???
ところで、ここってPHPのテンプレートエンジンを比較するスレなんですか?
820 ◆AngelH/kMI :2005/05/15(日) 05:00:20 ID:???
優劣は決められるものじゃないと思うよ。
どれも一長一短はあるんだし。
821nobodyさん:2005/05/15(日) 13:05:08 ID:???
俺がSmartyを使わない理由

・独自タグによりロジックとデザインの分離ができていない。
・標準ライブラリではない。
822nobodyさん:2005/05/15(日) 18:50:44 ID:???
標準ライブラリしか使わないなんて将来見えてますね
823nobodyさん:2005/05/15(日) 18:58:47 ID:4RUI5R7m
テンプレートエンジンなんて
自作のシンプルのが一番使いやすいでしょ。
824nobodyさん:2005/05/15(日) 19:16:57 ID:???
>>822
Smartyなんか使ってるあんたの将来は終わってますよ?
825nobodyさん:2005/05/15(日) 20:18:52 ID:???
まぁ一応本家phpと同様 php.net 配布なわけだけどね。でもなぜPearに入らないんだろう?

独自タグっていうのもJSPと同じ位置づけと考えれば納得できると思う。
上で書かれているようにMVCのViewな訳だし。あれはあれで需要があるのは理解出来る。
826nobodyさん:2005/05/15(日) 21:39:42 ID:???
>823
Smatyをシンプルに使えばいいんじゃないの?

でも、オレも
・拡張が容易
・キャッシュ処理
あたりが同等で使い勝手がいいのがあればそっちに移りたい。
827nobodyさん:2005/05/15(日) 22:35:38 ID:???
新しいサイボウズってPHP+Smartyだっけ
828nobodyさん:2005/05/16(月) 00:05:33 ID:???
yes
829nobodyさん:2005/05/17(火) 07:47:44 ID:???
DBもMySQLの組み込みかなんかになるんだっけか
830nobodyさん:2005/05/21(土) 17:12:14 ID:???
Smarty使う奴は例外なく雑魚
831nobodyさん:2005/05/21(土) 20:23:48 ID:???
雑魚に雑魚とか言われてもなぁ(藁
832nobodyさん:2005/05/21(土) 21:57:23 ID:???
Smarty遅くね?
速度が何か気になるんだよなァ
833nobodyさん:2005/05/21(土) 22:11:55 ID:???
ウチはそういう時はキャッシュをメモリディスクに入れてる。
まぁ、ホントに smarty が悪いのか調べるのが先だろうけど。
834nobodyさん:2005/05/22(日) 01:29:43 ID:???
>>831
その程度の反論しかできないんだからよほどの雑魚なんだな。
やっぱりSmarty使う奴は例外なく雑魚
835nobodyさん:2005/05/22(日) 01:45:00 ID:???
>>834
なぜSmartyを使う奴が例外なく雑魚なのかを理論的に説明するのが先。

これが説明できない限り、>>834が自分自身で言っている『その程度の反論』になる。
つまり、>>834が雑魚となることを自分自身で宣言した。

という訳で、説明くださいw
836nobodyさん:2005/05/22(日) 03:15:55 ID:???
>>835
デザインとロジックの分離ということについて
もう少ししっかりと考えてみたら?
そうすればSmartyが屑中の屑であることが
よく理解できると思うよ?
もし理解できないのであればお前のプログラミングセンスが
無いんだろうね。OK?
837nobodyさん:2005/05/22(日) 03:24:17 ID:???
↑何か思いこみハゲス
838nobodyさん:2005/05/22(日) 03:26:30 ID:???
>>836
相手に答えを求めるような方法は理論的とは言えない。

デザインとロジックの分離ということについて
もう少ししっかりと考えてみたら?
そうすればSmartyを使わない奴が屑中の屑であることが
よく理解できると思うよ?
もし理解できないのであればお前のプログラミングセンスが
無いんだろうね。OK?

と返されたらどうするの?

なぜ、Smartyを使うとデザインとロジックの分離が出来ないかを具体的に説明できないのなら、
お前さんの理論に現実味が無い事になる。

それとも、Smartyの知識が無い事を知られるのが怖いのか?
大抵の奴はSmartyについてちゃんと調べたりしてないで語ってる奴が多い。

例えば、>>788のような意見。
ロジックは記述できるが、記述しなければいいだけ。
つまり使う人間次第でロジックとデザインは分離できる。

>テンプレートってのは純粋なHTMLであるべきで、テンプレートをブラウザで
>見たらどのような物か分かるべきで、オーサリングツールで何の問題もなく
>開くことができるべき。

この意見だって、Smartyを知らないからこそ出てくるもの。
純粋にHTMLにしたければ、HTMLのコメント形式に出来る事がマニュアルに明記されている。
マニュアルから引用すれば、
$smarty->left_delimiter = '<!--{';
$smarty->right_delimiter = '}-->';
というようにしっかりと記述されている。
839nobodyさん:2005/05/22(日) 03:47:33 ID:???
Smarty重いから、Smartyより軽くて、Smartyより柔軟で、Smarty高機能なテンプレートエンジンがあったら
別に未練もないし、すぐ乗り換えるんだけど。

教えてくれよ>>834
840nobodyさん:2005/05/22(日) 03:51:12 ID:???
多分、>>836はSmartyのHTML用構文が覚えられなくて干されたデザイナー。
841nobodyさん:2005/05/22(日) 06:41:17 ID:???
ってゆーか、せっかくSmarty導入したのに・・・
 php側でテンプレート変数にhtml流し込むのヤメレ!そこのプログラマーさん!
 tplの中のforeach文壊すのヤメレ!ちっとはマニュアル読め!そこのデザイナーさん!
ってことにはなりやすい
もっとシステムをガチガチにすりゃいいという考え方がないわけでもないけど
やっぱりこれは別にSmartyのせいじゃなくて使ってる側の使い方の問題
842nobodyさん:2005/05/22(日) 18:31:08 ID:???
MVC実践しようとなると速度が犠牲になるのは仕方がないよ
843nobodyさん:2005/05/22(日) 21:51:49 ID:???
>>842
なんでSmartyが遅いというのをMVCモデルのせいにしてるわけ?
844nobodyさん:2005/05/23(月) 00:38:50 ID:???
Smartyにオーバヘッドがあるのは確かだから必要ない案件
では使わなければいいだけ。

みんな必要だから使ってるんだが、それがわからない人がいる。
845nobodyさん:2005/05/23(月) 03:35:36 ID:???
>>838
>例えば、>>788のような意見。
>ロジックは記述できるが、記述しなければいいだけ。
>つまり使う人間次第でロジックとデザインは分離できる。

はぁ・・・。想定の範囲内のウンコみたいなレスご苦労様です。
Smartyでそのような記述ができることは知ってるんだが。
でもSmarty使ってる奴でそんな使い方してる奴いるか?(いないね)
そもそもそのような(テンプレートにロジックを記述しない)使い方
をするならSmartyなんか使うわけが無い。
だからSmartyを使う奴はロジックとデザインの分離というものが
分かってない屑であるとはっきり言えるのよ。OK?
846nobodyさん:2005/05/23(月) 04:23:22 ID:???
>>845
PHPはhtmlとPHPコードを混在した使い方ができるし、事実そのように使われている。
よってPHPを使うやつはロジックとデザインが分離できない。

みたいな論法かな。
847nobodyさん:2005/05/23(月) 09:22:25 ID:???
ぶっちゃけ、Smartyつかうとロジックとデザインの分離が出来ないといってるけど、
じゃあ、何を使うと分離できるのかが知りたいよな。

それに、
>Smartyでそのような記述ができることは知ってるんだが。
>でもSmarty使ってる奴でそんな使い方してる奴いるか?(いないね)
自分でも言ってるけど、使う側の人間の問題じゃないのかな?
つまり、そういった記述すれば分離できる。

だけどさ、テンプレートにロジックを記述しない場合、
多少なりとも、ロジックの中にデザインが入るんだよな。
テンプレートだけに注目してるみたいだけど、この変どう考えてるんだろう・・・
848nobodyさん:2005/05/23(月) 10:04:32 ID:???
オイラにはビジネス・ロジック(M)とプレゼンテーション・ロジック(V)を区別できていない、
或いは意図的に区別していないように見える。
849nobodyさん:2005/05/23(月) 10:20:42 ID:???
>>848
あ、俺も思った。
850nobodyさん:2005/05/23(月) 11:11:06 ID:???
そもそも845の言ってることにはプレゼンテーションロジックという概念がない
ロジックとデザインって言ってるだけで、何がなんだかわかってないのではないか?
851nobodyさん:2005/05/23(月) 16:37:02 ID:???
俺も
ビジネスロジックの中にデザインを混入するより
テンプレートの中にプレゼンテーションロジックを書いた方が
ずっとキレイだと思う。
852nobodyさん:2005/05/23(月) 20:09:04 ID:???
ビジネス・ロジックとプレゼンテーション・ロジックについて
説明してくれないか?
853nobodyさん:2005/05/23(月) 21:41:52 ID:???
http://www.ipa.go.jp/jinzai/esp/15mito/gaiyo/14-17.html
これができたら845がほしいものになるんだろうな。
854nobodyさん:2005/05/24(火) 00:52:00 ID:???
デザイナの裁量の範囲内に置きたいということもあるんだけどなぁ
855nobodyさん:2005/05/24(火) 04:03:50 ID:???
>>853
できたらって、15年度じゃん。
開発成果にあるリンクは404だし、成果報告も中身が全然無いし、金の取り逃げか・・・
856nobodyさん:2005/05/26(木) 00:22:45 ID:???
Smarty使いは劣等種
857nobodyさん:2005/05/26(木) 00:51:43 ID:???
ナチ公は何を使ってるんだ?
858nobodyさん:2005/05/26(木) 12:41:56 ID:???
ナチスも日本軍も仲良し。今も仲良く行こうぜ。
859nobodyさん:2005/05/28(土) 16:36:41 ID:sWsyG2zN
テンプレートに書き込む変数は小文字と大文字どちらが推奨でしょうか?
860nobodyさん:2005/05/28(土) 17:40:26 ID:???
>>853,855
ttp://www.kuwata-lab.com/kwartz/

コレのことだよね? ボクは使わせてもらってるけど……
861nobodyさん:2005/05/28(土) 21:50:44 ID:???
>>860
Smartyで十分だなぁ・・・
862nobodyさん:2005/05/28(土) 22:19:34 ID:???
まだRubyしかないのか
既に放置?
863nobodyさん:2005/05/28(土) 22:29:04 ID:???
よく読んだらPHPもあるみたいだね
なかなか便利そうだが
コマンドラインから実行しなきゃいけないのが
流れ的にどうかな…
864nobodyさん:2005/05/28(土) 22:42:05 ID:???
Kwartzよいかも?
もっさり感がイヤでSmartyはちょっとなぁと思ってたところなので
検討してみますか
865nobodyさん:2005/05/29(日) 00:14:17 ID:???
おもしろそうだなぁ。
自分的には Makefile でユニットテストや DB クラスの自動生成とかデプロイとか
管理してるから相性もよさそう。
866nobodyさん:2005/05/29(日) 01:37:35 ID:???
>>860
サンクス
なんかそれならXSTLつかえばーって気がする。
867nobodyさん:2005/06/01(水) 17:28:49 ID:???
Smartyよりincludeのほうが使いやすいわ〜。面倒くさいもん。Smarty。
868nobodyさん:2005/06/01(水) 19:15:23 ID:???
>>867
Smartyも理解できないの?
とても知的生命体とは思えないんですが?
869nobodyさん:2005/06/01(水) 19:17:03 ID:???
>>868
は?理解してますが何か。
反論するならもっと論理的にいこうよw
870nobodyさん:2005/06/01(水) 19:23:56 ID:???
また>>834かよ
871nobodyさん:2005/06/01(水) 19:24:05 ID:???
>>869
理論的に反論しろというなら、Smartyとincludeを対比させて、
理論的に、どういった部分が面倒とかincludeが優れているかを説明しないと
説得力に欠けるよなw
872nobodyさん:2005/06/01(水) 19:35:14 ID:???
◆include
≪メリット≫
モデル内でいちいちappendとかassignとかしなくても変数がそのまま使える。
直接<?php ?>や<?=?>が埋め込める。
≪デメリット≫
ない。最強。

・Smarty
≪メリット≫
キャッシュ。
修正子が使える。
≪デメリット≫
無駄に面倒。assignとかappendとか。
<?php ?>が埋め込めない。最悪すぎる。
873nobodyさん:2005/06/01(水) 19:55:43 ID:???
>>872
><?php ?>が埋め込めない。最悪すぎる。
{php}{/php}ってしってるか
874nobodyさん:2005/06/01(水) 22:54:25 ID:???
フーン
確かにincludeで済むような気がしてきたw
875nobodyさん:2005/06/01(水) 23:14:59 ID:???
Smartyの明確なメリットって
「わりとデザイナーに分かりやすい」ってことくらいじゃね?
でも実際は、デザイナから受け取ってから
こっちで埋め込むことになるから(俺の場合)
includeでこと足りる気がするなぁ
どうなんだろ
876nobodyさん:2005/06/01(水) 23:37:41 ID:???
includeで事足りる人は、それでいいんじゃないの?
877nobodyさん:2005/06/01(水) 23:59:35 ID:???
ちなみにどういうメリットがある?
878nobodyさん:2005/06/02(木) 01:32:18 ID:???
>>877
いいから寝ろ
879nobodyさん:2005/06/02(木) 01:40:30 ID:???
>>875
Smartyは機能が豊富すぎてデザイナには分かりづらいだろうよ。
880nobodyさん:2005/06/02(木) 02:07:01 ID:???
くだらんこといってんじゃねぇよ
881nobodyさん:2005/06/02(木) 02:22:22 ID:???
キャッシュが増えすぎると遅くなるのってどうにかならないの?
遅くなったらキャッシュの意味がないんだけど。
882nobodyさん:2005/06/02(木) 07:41:30 ID:???
include >>>>> 激遅Smarty
でファイナルちんぽ?
883nobodyさん:2005/06/02(木) 09:25:59 ID:???
>>875
俺もその形態で動いてる。
デザイナーにSmartyマニュアル渡して「覚えてくれよ」って言っても
「はぁ?」とか言われそうだし、デザイナーが外注の場合も多いわけで。

多分、Smartyはデザイナーが仕様を覚えて、プロジェクトで使う変数などの仕様を予め共有化させ
完璧にMVCとして稼動した時に性能が発揮されるんだろうなぁって思う。
まぁ、当然と言えば当然なのか。
884nobodyさん:2005/06/02(木) 10:24:58 ID:???
HTML埋め込みマクロのPHPをさらにテンプレート経由で使うなんてバカだろ
885nobodyさん:2005/06/02(木) 10:25:51 ID:???
Smarty使っても結局Smartyの中では埋め込んでるだろ
886nobodyさん:2005/06/02(木) 10:26:37 ID:???
売れ残った書籍の押し売り必死だな
887nobodyさん:2005/06/02(木) 11:42:44 ID:???
Smartyの文法おぼえるのなんて、CSS、HTMLの知識があって、クロスブラウザ
かつValidなコーディングができる人なら訳ないよ。

ま、そんなデザイナーめったにいないわけだが。
888nobodyさん:2005/06/02(木) 12:20:07 ID:???
結局ダメじゃんw
889nobodyさん:2005/06/02(木) 14:30:03 ID:???
いっそのことincludeするHTMLファイルをどう書くのがベストなのか考えるスレ
890nobodyさん:2005/06/02(木) 15:33:35 ID:???
ていうか、Smartyの構文覚える暇があるならPHPの構文覚えてもらった方が助かるわけで
891nobodyさん:2005/06/02(木) 15:35:03 ID:???
>>889
mojavi見ろ
892nobodyさん:2005/06/02(木) 16:05:51 ID:???
明確なメリット出てこないじゃねーか
なんてこった
今まで何となく新しそうだから使って来たが単なる変数埋め込みと大差ないなんて…
893nobodyさん:2005/06/02(木) 16:15:48 ID:???
別途組み込み用作業料もらってプログラマが組み込めばOK。
894nobodyさん:2005/06/02(木) 16:17:07 ID:???
メリット
>モデル内でいちいちappendとかassignとかしなくても変数がそのまま使える。
↑こういうのをやめさせることができる
895nobodyさん:2005/06/02(木) 16:23:24 ID:???
フレームワーク的な考え方をすれば、
制限を設けさせることができるのがメリットといえばメリット。
単なるデザイナーとの連携という点ではメリットはないよ。
デザイナーとの連携なんかフルCSSデザインにして、テンプレート自体
いじる必要なくすのが一番手っ取り早いし
896nobodyさん:2005/06/02(木) 16:41:46 ID:???
うん、切り分けをハッキリ出来るってことだろ
とはいえプレゼンテーションロジックも入って来るし
phpも書くことは出来る…
メリット薄っ
897nobodyさん:2005/06/02(木) 16:46:49 ID:???
{php}タグは禁止できます。
Smartyの知識はないようですね。キャッシュとコンパイルの
区別も付いていない人も居るみたいですし。
898nobodyさん:2005/06/02(木) 16:55:48 ID:???
ハイハイ。
899nobodyさん:2005/06/02(木) 17:03:48 ID:???
それなら切り分け、取り回しの良さがメリットになるかな
あとサニタイズもやりやすい気はするなぁ
ただメリット群がモッサリした遅さと
トレードオフするかというと疑問符…やはり遅さがネックだな
900nobodyさん:2005/06/02(木) 17:10:19 ID:???
急にSmarty使いの分が悪くなってきたので無理やり加勢するぞ。
Smartyにメリットが無いなんていってるやつは営業の事を全く考えていない。
何の特色も無いプログラムをアピールするのは至難だと言うことに気づけ!
「世界的に普及していて実績もあるMVCフレームワークのひとつであるSmartyは
LAMPとの相性も最高で、かつて無い抜群のパフォーマンスを発揮します」
てな調子で煽っておけばバカな客はよくわかんねーけどすごそうだと思い込むし
少しバカな客は書店などで冒頭の謳い文句だけ読んで最新技術なのか〜
なんて思い込むものさ。その結果ボったくっても文句言われにくくなるので
仕事も安定するし、収益も上がる。
ほんのわずかな実行速度や手間をケチったおかげで仕事が減っては本末転倒。
どうだ?使いたくなってきただろw
901nobodyさん:2005/06/02(木) 17:14:35 ID:???
>>900
お前はデメリットを強調しにきたのか
902nobodyさん:2005/06/02(木) 17:16:49 ID:???
ワラタ
903nobodyさん:2005/06/02(木) 17:31:57 ID:???
営業の必要ないプロジェクトでも使ってますが。
904nobodyさん:2005/06/02(木) 17:37:35 ID:???
アンチの結論はincludeを使えなのか?
905nobodyさん:2005/06/02(木) 17:40:11 ID:???
まあPHPがHTMLに埋め込む形のプログラムだから、
Perlとかと比べるとメリット薄いといえば薄いが
必要ないって事も無いと思うけどな。
906nobodyさん:2005/06/02(木) 18:08:29 ID:???
印象としては
「若干過大評価されている」気はするな、世間的に。スマーチィ。
907nobodyさん:2005/06/02(木) 19:31:36 ID:???
なんとなくFlexy使ってるんだけど、Smartyと比べるとどうなんでしょ?
まだ、本格的に使ってるわけじゃないんで、アドヴァンテージがSmartyにあるなら、
乗り換えてみようかなぁ、とか思うんで。
908nobodyさん:2005/06/02(木) 19:38:15 ID:???
素直にHTML_Template使えばいいのにね。
909nobodyさん:2005/06/02(木) 21:23:12 ID:???
最大のメリットのキャッシュがイマイチだからなぁ…
mojaviデフォルトのテンプレートシステムにちょっと機能加えるくらいの方がいい
910nobodyさん:2005/06/02(木) 21:47:27 ID:???
やっぱSmarty2だよな
911nobodyさん:2005/06/03(金) 00:57:34 ID:???
やっぱ自作の連携方法で、、、
912nobodyさん:2005/06/03(金) 01:13:13 ID:???
>>911
車輪の再発明には気をつけてね。
913nobodyさん:2005/06/03(金) 01:30:10 ID:???
単純な構成だから多分大丈夫かと思われ
914nobodyさん:2005/06/03(金) 03:25:09 ID:???
けんかはやめて
915nobodyさん:2005/06/03(金) 15:41:14 ID:???
なんで車輪の再(ryがダメ?
916nobodyさん:2005/06/03(金) 20:29:17 ID:???
>>915
作るなら勝手に作ればって感じだけど
お前が考え付くようなウンコな仕様はすでに誰かが作ってるよ。
無駄ってこと。
917nobodyさん:2005/06/03(金) 21:07:54 ID:???
んなこと言ってたら永遠に進歩が無いけどな
918nobodyさん:2005/06/03(金) 22:13:55 ID:???
>>917
逆じゃないか?
919nobodyさん:2005/06/03(金) 23:45:39 ID:???
別にうんこでもいいんだよ
必要最小限の機能があって速ければね
viewなんてそんなに機能いらないだろ
920nobodyさん:2005/06/04(土) 01:23:57 ID:???
>>918
全然逆じゃない。

>お前が考え付くようなウンコな仕様はすでに誰かが作ってるよ

なんて言ってるようじゃ進歩はしないね。
921nobodyさん:2005/06/04(土) 01:27:25 ID:???
>920
なんで駄目なんだとか聞くうんこなら、ってことじゃねーの?
922nobodyさん:2005/06/04(土) 01:29:33 ID:???
>>921
車輪の再開発が一概に駄目とは言えないのに
駄目と言い切ってる馬鹿がいるから聞いただけだろ
923nobodyさん:2005/06/04(土) 01:53:02 ID:???
ほんとお前らうんこが好きなんだな
924nobodyさん:2005/06/04(土) 02:01:06 ID:???
この会話自体が車輪の再発明な件について。
925nobodyさん:2005/06/04(土) 02:07:05 ID:???
ウンコアンデナマットー
926nobodyさん:2005/06/04(土) 03:08:21 ID:???
「どうしても車輪を再発明したいなら、少なくともマシな車輪を発明すべきである」
とかいう有難いお言葉をラクダ本で読んだ記憶がある

>>924
会話もフレームワーク化すると再利用しやすくなってウマー
927nobodyさん:2005/06/04(土) 05:13:25 ID:???
Apacheの代替や新しいプログラム言語を作るってわけじゃないんだから、
ラジコンのタイヤ程度のものどんどん再発明すればいいじゃん
928nobodyさん:2005/06/04(土) 12:26:05 ID:???
JavaのStringクラスを自作して遊んでいました。これは車輪眼ですか?
929nobodyさん:2005/06/04(土) 12:50:47 ID:???
>>928
車輪眼じゃなくて写輪眼ね。
930nobodyさん:2005/06/04(土) 13:30:42 ID:???
>>928
車輪だけど、車輪は作ることによって得ることも大きい。
使う方にとっちゃ、ちゃんとした車輪を選択するけどな。
931nobodyさん:2005/06/04(土) 15:31:37 ID:???
いい加減スレ違い
932nobodyさん:2005/06/04(土) 17:54:24 ID:???
Smartyのsectionって使い勝手悪くね?
ループはforeachがあるし、条件分岐はifがあるし
存在意義がよく分からん。
933nobodyさん:2005/06/04(土) 21:03:07 ID:???
PHPAcceleratorとか使うともっさり感消えたりする?
934nobodyさん:2005/06/04(土) 21:37:08 ID:???
>>932
おまいがsmarty使ってる理由がわからん
935nobodyさん:2005/06/04(土) 22:50:50 ID:???
>>934
能書きたれる前にsectionの存在意義を教えろ。
936nobodyさん:2005/06/04(土) 23:17:10 ID:???
>935
forの替わり
937nobodyさん:2005/06/04(土) 23:51:52 ID:???
ぶっちゃけ私もsectionあんまり使ってない。
一通りマニュアル読んだけど、今のとこいまいち使いどころがない。
そのうち出てくるかも。
938nobodyさん:2005/06/05(日) 03:50:52 ID:???
自分はsectionよく使うけど、
foreachの前にsectionを知ったからそのまま使ってるだけだしなぁ。
まぁ別にあって困るもんじゃないし、sectionでもforeachでも
好きなほうを使えばいいんじゃない?
939nobodyさん:2005/06/05(日) 13:00:58 ID:???
こうゆう単純な構文が良いんだが。

[テンプレ側]
{loop name=hoge}
$name
$title
$comment
{/loop}

[PHP側]
foreach ($foo) {
$smarty->append("name" => "aaa", "title" => "bbb", "comment" => "ccc");
}
940nobodyさん:2005/06/05(日) 13:03:09 ID:???
PHP部分間違えた。
こんな感じ。

[PHP側]
foreach ($foo) {
  $smarty->append(
    "hoge" => array(
      "name" => "aaa",
      "title" => "bbb",
      "comment" => "ccc"
    )
  );
}
941nobodyさん:2005/06/05(日) 13:06:31 ID:???
テンプレ側も間違えた。
こんな感じ。

[テンプレ側]
{loop name=hoge}
名前:{$name}
タイトル:{$title}
コメント:{$comment}
{/loop}
942nobodyさん:2005/06/05(日) 17:03:58 ID:???
>>939-941
Smarty以前の問題だよ、おめーわ
943nobodyさん:2005/06/05(日) 18:35:52 ID:???
>>942
何が言いたい?
大好きなSmartyを貶されて切れたかガキ?
944nobodyさん:2005/06/05(日) 19:01:29 ID:???
>>939
そういうテンプレートエンジンなら、他にたくさんありそうだからそれ使えばいいじゃない。
945nobodyさん:2005/06/05(日) 23:18:21 ID:???
>>941
案外、それって使いにくいんだよな
PerlのHTML_TEMPLATEってそんな感じだった
946nobodyさん:2005/06/05(日) 23:53:09 ID:???
>>943
おいおい、しっかりしろよ・・・
人のことをガキ呼ばわりする前にもう少し頭使おうぜ

> foreach ($foo) {
>   $smarty->append(
>     "hoge" => array(
>     "name" => "aaa",
>     "title" => "bbb",
>     "comment" => "ccc"
>     )
>   );
> }
947nobodyさん:2005/06/06(月) 22:42:10 ID:???
>>946
いちいち細かい奴だな。
別に動くプログラムを組んでるわけじゃないんだから
雰囲気だけ分かりゃいいだろうが。
雑魚はこれだから。
948nobodyさん:2005/06/06(月) 23:00:55 ID:???
プw 雑魚はこれだから。
949nobodyさん:2005/06/06(月) 23:54:30 ID:???
おっと、>>939 逆切れか。

むちゃくちゃな構文で質問して、
まともな答えもらおうっていう方が甘ったれてんだよ。
百年ほど人生やり直してこい。
950nobodyさん:2005/06/07(火) 01:28:14 ID:???
>>949
おいおい。勘違いしてもらっちゃ困るんだが。
お前らみたいなアホに質問なんかしねーってw
日本語すら理解できないような池沼からまともな答えなんて
期待してねーっつの。ちゃんとスレ読み直してみろよ。
日本語も分からないでプログラム言語か?
順序が違うんじゃねーのwww
951nobodyさん:2005/06/07(火) 01:58:41 ID:???
なんでいきなり日本語の問題になってるわけ?
脳味噌まで自己中とは恐れ入ったな(プ
952nobodyさん:2005/06/07(火) 10:09:04 ID:???
明らかにプログラミング言語なんかより日本語のほうが難しいだろ
953nobodyさん:2005/06/07(火) 10:14:08 ID:???
ということは>939は絶望的ということですね
954nobodyさん:2005/06/07(火) 12:08:14 ID:KvahcTPl
上にも書いてあったけど、デザイナにSmartyの構文覚えてもらうくらいなら、cssキッチリ理解してもらって
外部cssいじらせた方が良いと思うがなぁ。もちろんデザイン的に外部cssのみではどうにもならん場合も
あるだろうが、どうにかなる場合の方が多いだろうし。

論理構造を始めに決めときゃ、デザインもらってロジック埋め込むなんてせんでも同時に製作始められるし、
loopやifがもっとスッキリ書けてオーサリングツールと完全に連携できるテンプレートエンジンがありゃいいけど
テーブルの行の色やら列数をデザイン側で任意に変更させるのにデザイナに↓こんなんの説明とかしても
あんまり意味あると思えんしなぁ。

<table>
 <!--{section name=row loop=$LIST step=3}-->
 <tr>
  <!--{section name=col start=$smarty.section.row.index loop=$smarty.section.row.index+$smarty.section.row.step}-->
   <!--{if $LIST[col] != null}-->
  <td><!--{$LIST[col]}--></td>
   <!--{else}-->
  <td> </td>
   <!--{/if}-->
  <!--{/section}-->
 </tr>
 <!--{/section}-->
</table>
955nobodyさん:2005/06/07(火) 12:40:16 ID:???
Smarty(HTML側)をある程度操作出るようになるなんて1日あれば十分だろ。
956nobodyさん:2005/06/07(火) 18:55:39 ID:???
やる気があればな
957nobodyさん:2005/06/07(火) 21:49:38 ID:???
外注デザイナに「これ覚えて!」とはなかなかいいにくい
958nobodyさん:2005/06/08(水) 00:40:41 ID:???
Smarty使うデザイナの人ってどうやってHTML書いてるんだろう
ブラウザでプレビュー際にコードが表示されて邪魔にならないのかな
959nobodyさん:2005/06/08(水) 00:54:41 ID:???
>>958
PHP直接埋め込むよりはマシかと。

<A HREF="<?php echo $aa ?>">aa</a>

みたいのだとぐちゃぐちゃになって目も当てられない。

でもSmartyって、制御構造とか入れると結局テンプレートも煩雑になるし、
コストも高いし、自由度は低いしで、俺は自前で{$form['aa']['bb']}みたいのを埋め込んだ
テンプレートを作ってevalで埋め込みしてるよ。

$output = file('テンプレートファイル名');
array_unshift($output, "print <<<EOTNJGTU\n");
array_push   ($output, "EOTNJGTU;\n");
eval(join("", $output));

こんな感じで。実際にはクラス化して結果をリファレンスでも取れるようにしたり、使いやすくしてる。

テンプレート中での制御構造は潔く諦めて、テーブルなんかはViewクラスで生成して
変数にぶちこんだものを上記の方法でテンプレートに埋め込んでる。
小規模開発ならこれで充分だと思う。
960nobodyさん:2005/06/08(水) 03:06:51 ID:???
DWだとSmartyに対応しているもよう
961nobodyさん:2005/06/08(水) 05:13:08 ID:???
そりゃ初耳
962nobodyさん:2005/06/08(水) 09:25:23 ID:???
確かに、対応してるね。でもincludeが最強だぞ?
http://www.contactlensesprice.com/smarty/
963nobodyさん:2005/06/08(水) 22:34:16 ID:???
デザイナもSmartyなんて滅多に役に立たない構文覚えたくもないだろうしな。
逆にCSSなんかは今やYahooですら使ってる必須技術。
開発側もCSS自由自在にデザインできるテンプレートを作ってやれる程度には
ならんとな。
964nobodyさん:2005/06/08(水) 22:44:00 ID:???
>>963
おまえプログラマか?
プログラマにとってはHTMLなんて簡単な言語だと思うが。
965nobodyさん:2005/06/09(木) 00:09:22 ID:???
>>964
963じゃないけど、CSS != HTML
CSSは結構奥深いよ
DOMと組み合わせたりして、面白いことが色々出来る
ブラウザの対応がバラバラなのが痛いがなー
966nobodyさん:2005/06/09(木) 00:42:58 ID:???
>>965
いや、俺はW3C信者だから。仕様書読むのが楽しい人だから・・・・・
967nobodyさん:2005/06/09(木) 01:33:29 ID:???
Smartyの構文程度で覚えるの嫌ーなんてへこたれるデザイナーはチェンジ。
968nobodyさん:2005/06/09(木) 01:49:17 ID:???
>>967
同意。
デザイナが覚えるべき構文なんてそれほど多くない。
それでだめならクビ。
969nobodyさん:2005/06/10(金) 21:13:44 ID:???
>>968
あんたみたいな奴の下で働く奴はかわいそうだな。
970nobodyさん:2005/06/10(金) 21:16:50 ID:???
会社はそんなに甘くないのよ
971nobodyさん:2005/06/10(金) 21:42:17 ID:???
今時HTMLでデザインしてるデザイナーやプログラマこそチェンジだろw
972nobodyさん:2005/06/10(金) 21:59:54 ID:???
まぁ仕事できない奴がクビになるのは当たり前だよな
973nobodyさん:2005/06/10(金) 22:02:05 ID:???
探すのにもコストかかるんだよバカヤロー
そんなどうでもいいことで簡単に切れるか
974nobodyさん:2005/06/10(金) 22:17:14 ID:???
>>964がなんであんな見当違いなレスをしたのかわからん
975nobodyさん:2005/06/10(金) 22:28:44 ID:???
>>971
チェンジされた人
976nobodyさん:2005/06/10(金) 23:27:32 ID:???
>>975
HTMLでデザインしてる人
977nobodyさん:2005/06/10(金) 23:44:10 ID:???
>>976
Smartyの独自タグ覚えて優越感に浸ってる人
978nobodyさん:2005/06/11(土) 00:30:57 ID:???
      ∧__∧ ll
     |(・)。(・)| ( )< バッドノウハウなんだね!
      |ヾ三ヲ└'ノ
    .|    l´
     つ ま り
979nobodyさん:2005/06/11(土) 00:36:32 ID:???
まぁphpメインの中小webアプリ開発なんて、デザイナにsmartyバリバリ使いこなされたら
プログラマはSQL書いて結果を配列で渡すだけみてーな仕事増えそうだけどなー。
980nobodyさん:2005/06/11(土) 01:00:29 ID:???
>>977
なんかもう言ってることがグダグダになってる人
981nobodyさん:2005/06/11(土) 01:03:19 ID:???
>>980
反論のネタがなくなった人
982nobodyさん:2005/06/11(土) 05:26:53 ID:???
>>982
とにかくセクースしたい人
983nobodyさん:2005/06/11(土) 11:24:44 ID:???
>>981
>>977で話しがかみ合ってないことに気付いてない人
984$default_modifiers、$debuggingの設定でparse error
$default_modifiers、$debuggingを設定して、テンプレートで{if empty($hoge)}を使うと
debug.tpl.phpがParse errorになるのですが、
最後に述べる解決方法でより良いものを知っている人が教えてください。
問題の発端は{$hoge}でParse errorになったのですが、そちらは解決できました。
(PHP 4.3.9とSmarty 2.6.9を使用
・hello.php
<?php
require_once("libs/Smarty.class.php");
$o_smarty=new Smarty();
$o_smarty->default_modifiers=array("upper");
$o_smarty->assign("hoge","abc");
$o_smarty->debugging=true;
$o_smarty->display("hello.tpl");
?>
・hello.tpl
<html><head><title></title></head><body>
{$hoge}</body></html>
・出力
ABC
Parse error: parse error, expecting `T_VARIABLE' or `'$'' in
(中略)templates_c(中略)debug.tpl.php on line 10
・debug.tpl.php 10行目
<?php if (isset ( ((is_array($_tmp=$this->_tpl_vars['_smarty_debug_output'])) ?
$this->_run_mod_handler('upper', true, $_tmp) : smarty_modifier_upper($_tmp)) ) && ((is_array($_tmp=$this->_tpl_vars['_smarty_debug_output'])) ? $this->_run_mod_handler('upper', true, $_tmp) : smarty_modifier_upper($_tmp)) == 'html'): ?>
・解決方法
core.display_debug_console.phpを修正
http://www.phpinsider.com/smarty-forum/viewtopic.php?t=5179&highlight=expecting+tvariable
件の解決策は以下を考えました。
・if empty($hoge|smarty:nodefaults)と書いてParse errorを避ける。
・またはデバッグの時は、default_modifiersをコメントにする。
根本的な解決策はSmarty側のどこかのソースを修正しなければならないのでしょうか?
(できればhello.tpl、phpは修正したくないです。)