トップページ⇒php
984コメント324KB

【PHP】Smarty【Template】

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん03/03/10 00:57ID:NhgrjNBT
このスレ、あってもいいんじゃないかと。

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

日本語マニュアルとか
http://sunset.freespace.jp/smarty/
0202nobodyさん03/08/09 15:33ID:ZOEKZBoK
>>200
せめてキャッシュを実装してほしい。(中間ファイルでないよ)
タグが拡張できるようにしてほしい。
ちゃんとエラーハンドリングしてほしい。

このあたりを実装してくれれは少しは考えるが、
まだ今のところはSmartyのほうが使い勝手はいいな。
0203あぼーんNGNG
あぼーん
0204 ◆AngelH/kMI 03/08/12 12:14ID:???
Smarty2.6.0RC1 リリース。
とりあえず変更点確認中。
結構色々変わってるかな?
0205nobodyさん03/08/12 13:45ID:7lLuw4V/
RCなのに色々変わっているってのもアレだな。
いや、中身は見てないが。
0206nobodyさん03/08/13 10:54ID:???
>>205
2.5.0 -> 2.6.0RC1だから変更点は多いと思うぞ?
0207nobodyさん03/08/13 11:24ID:+vOr/IO1
>>206
普通、Release Candidate版って問題がなければそのままリリース版に
するものだから、仕様変更はその前の時点で落ち着いていて欲しいな。
その辺、PHPらしいと言えばらしいけど。
0208nobodyさん03/08/13 21:01ID:???
RC -> Release の間は仕様を変えないのが普通だけど
旧ver Release -> 新ver RC は仕様が変わっててあたりまえじゃないか?
0209nobodyさん03/08/14 12:09ID:Ayxn98z4
>>208
それもそうだ。
新ver RCと旧ver Releaseの間に新ver betaに相当するもの(CVS head)が
あったと考えれば問題ないな。スマソ。
0210山崎 渉03/08/15 22:32ID:???
    (⌒V⌒)
   │ ^ ^ │<これからも僕を応援して下さいね(^^)。
  ⊂|    |つ
   (_)(_)                      山崎パン
0211nobodyさん03/08/16 17:32ID:???
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}


とかやってみたんですが、うまくいかないです。
誰か教えてください。
0212nobodyさん03/08/16 17:45ID:???
補足ですが、
$fpの中には、ログファイルが入ってます。
0213nobodyさん03/08/16 18:04ID:???
appendつかったらできたー
(^○^)
0214nobodyさん03/08/23 08:07ID:qE2mijHa
怒涛の勢いで下がっていくスレage
0215nobodyさん03/08/31 23:16ID:OAFHlkE1
1週間ぶりに上げてやる
0216nobodyさん03/09/03 11:17ID:???
PHPカンファはSmartyばかりでしたな
0217nobodyさん03/09/11 19:36ID:???
te
0218nobodyさん03/09/12 09:35ID:???
age
0219nobodyさん03/09/18 10:27ID:bzSYta4I
patTemplateとどちらがいいですか?
0220nobodyさん03/10/02 10:36ID: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では「タグとプログラムの完全な分離」
は不可能なのでしょうか?
0221nobodyさん03/10/02 12:19ID:???
その業者を使うのやめれ。デザインととプログラムを分離できないんならテンプレート使う意味ないじゃん。
端折ったコードで申し訳ないが
<table>
<tr>
 <th>header1</th>
 <th>header2</th>
</tr>
{loop}
 <tr>
  <td>{$data1}</td>
  <td>{$data2}</td>
 </tr>
{/loop}
</table>
Smartyはこんな風に使うんだよ、と教えてあげて。
0222nobodyさん03/10/02 12:20ID:???
その業者を使うのやめれ。デザインととプログラムを分離できないんならテンプレート使う意味ないじゃん。
端折ったコードで申し訳ないが
<table>
<tr>
 <th>header1</th>
 <th>header2</th>
</tr>
{loop}
 <tr>
  <td>{$data1}</td>
  <td>{$data2}</td>
 </tr>
{/loop}
</table>
Smartyはこんな風に使うんだよ、と教えてあげて。
022322003/10/02 13:42ID:???
>221=222さん。
ご返事ありがとうございます。やはりおかしいですよね。
私はPHPは初心者なのですが、納入されたSmartyをみて
びっくりしました。参考にしようと思ったのに・・・。
今修正してもらってます。

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

(゚Д゚)ハァ? …タマゲマスタ!
全然関係ない話スマソ。
0224nobodyさん03/10/02 22:25ID:???
その業者おもろいなぁ
0225nobodyさん03/10/02 23:06ID:???
スマーチーはある程度スクリプチングの構文にゃら分かんないとあんま意味無いよね。
HTML分離させて渡したら、良く分からないので
このHTMLをSmarty用に書き換えてとか渡された。
わかんね−なら最初っからSmartyでとか言うんじゃ寝ェよ
0226nobodyさん03/10/08 14:23ID:h0+MMd8V
ttps://www.stackasterisk.jp/tech/php/phpMvc02_01.jsp
上のサイトを参考にPHPでMVCってみたけど・・・しんどい・・
ログ読ませてもらったらよさそうなので今度のシステムで使わせてもらいます。
0227nobodyさん03/10/09 17:38ID:???
$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が面倒で。。。
022822703/10/09 18:42ID:???
これで解決できました!
失礼しました!

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

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

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

とやれば、使えるのでしょうか?
0231nobodyさん03/10/10 01:27ID:???
>>230
で、試してみたのか?
023223003/10/11 00:46ID:U0DA9P6C
すいません、まだ環境がととのってないもので、試せないんです。。。
自分が借りてるレンタルサーバで、PHPが近々はいる予定なので、
関心があって訊いてみました
0233nobodyさん03/10/11 08:24ID:???
使えると思いますよーん
023423003/10/11 23:27ID:???
>>233
ありがとうございます。
入ったら試してみます。
0235nobodyさん03/10/14 23:32ID:???
>>230
PHPを実行するユーザーが、templates_cとcacheディレクトリを
読み書きできるように、場合によってはパーミッションを変更しないと
いけないのだが、そのへんは大丈夫?
023623003/10/15 00:05ID:???
>>235
パーミッション変えるだけなら、FTPソフト(FFFTPでもなんでも)でできるかと思ったけど、、、
ぼく、なんか勘違いしてます?(汗
0237nobodyさん03/10/15 06:29ID:???
>>236
それならOK
0238nobodyさん03/10/15 08:58ID:???
>>235
モチツケ
0239nobodyさん03/10/18 23:59ID:???
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>
みたいな感じでありったけ出力したいのですが。
024023903/10/19 00:00ID:???
>>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>
0241nobodyさん03/10/20 09:35ID:???
>>239
これは再帰じゃなくて
ただの多重ループだと思う。
ためしてみた?
024223903/10/20 10:08ID:???
>>241
ループで書くとこうなってしまうってことです。
こういうのを再帰で書くのはSmartyでは難しいんでしょうか。

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

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

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

> 直接のぞかれて問題のあるようなテンプレート(tpl)ファイルを置く方が、問題だと思うのですが・・・
問題なんじゃん、じゃあこれであってるじゃん
0251nobodyさん03/11/07 22:32ID:???
コメントの内容とか見られたらまずいこともあるし
処理方法がばれればクラッカーに解析される可能性など。
見られないにこしたことはない。
0252nobodyさん03/11/07 23:57ID:???
>249
XOOPSの場合、レンタルサーバ等でhtml公開用のディレクトリ
以外がユーザに解放されていないケースにも合わせるため
XOOPSインストールディレクトリ以下に集中させる設計になっているから
必ずしもセキュリティ上ベストな選択がなされている訳ではないよ。
#敢えてレベルの低いところをターゲットとしている。全体的に
0253nobodyさん03/11/12 04:47ID: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のディレクトリを場所変えたり、
些細なことしか(なにをしたかは失念してしまいましたが)してないはずなのに、こうなってしまってます。

いったい、どこらへんを疑えばいいのでしょうか?
ポインタだけでも示して頂ければ幸いです。
0254nobodyさん03/11/12 07:29ID: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
0255nobodyさん03/11/13 09:38ID:???
>>253
その些細なことが原因なんだと思うが。。。
わからなかったらもう1度最初からやったほうがいいと思う

chwon を chownにしたらよいかも
0256nobodyさん03/11/13 21:49ID:???
>>254
http://sunset.freespace.jp/smarty/SmartyManual_2-6-0RC2J_html/installing.smarty.extended.html
0257nobodyさん03/11/14 13:26ID:maWzYQwN
>>195
俺も最近使い始めたんだけど、JavaScriptやCSSのタグに引っかかって
鬱陶しい。結局何に変更しました?
0258nobodyさん03/11/17 14:01ID:EFGY3Z8y
青のマンモス本を見ながらSmarty導入しているんですが、
カスタム関数の追加ってどうやるんですかね?

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

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

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

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

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

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

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

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

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

となるようにするにはどうすればいいのでしょうか。
今自分ことの環境はデフォルトなので、デリミタは { } となっています。
0267nobodyさん03/12/05 21:48ID:???
>>266
Smartyはセットアップできたの?
あなたの質問の内容よりよっぽど難しいと思うけど。
で、セットアップ出来ているとしたら、セットアップする際に参照した
マニュアル(例えば>>1には日本語マニュアルが紹介されている)の
最初の方にあなたの求める答えが載っているのだが。
026826603/12/05 22:20ID:???
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>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

<HTML>
<BODY>
<? echo "$phpでセットした変数"?>
<?=$phpでセットした変数?>
0294nobodyさん03/12/12 14:02ID:???
私の場合は、
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 の方が便利でした。
0295nobodyさん03/12/12 15:12ID:???
入力エラーってどういうケースを想定してるのかしらんがjavascriptで処理しちゃいかんの?
わざわざ鯖に仕事させなきゃ駄目?
0296nobodyさん03/12/12 15:14ID:???
>>295
クライアントがJavascriptを切っていたらどうする?
0297nobodyさん03/12/12 15:48ID:???
なんだかアホなはなしやめようよ

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

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

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

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

と言うか別にJavaScriptを使うのは構わないんだけど、エラー処理を
JavaScriptだけで行おうとするWebプログラマはアホということ。
■ このスレッドは過去ログ倉庫に格納されています