【PHP】Smarty【Template】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
03/03/10 00:57ID:NhgrjNBT本家(英語)
http://smarty.php.net/
日本語マニュアルとか
http://sunset.freespace.jp/smarty/
0179nobodyさん
03/07/13 14:05ID:Qv0LVgul例えば、エラーチェックを行って、エラーに引っかかると
別ウィンドウでエラー内容を表示する、等
require もしくは header 関数を利用して。
もしくはそれ以外の関数、コーディングで。
Ncurses関数は客の鯖問題でPHPをリコンパイルできません。。
0180あぼーん
NGNG0181nobodyさん
03/07/13 14:14ID:48FuQ70+今手元にないから分からないけど、
"Professional PHP プログラミング"に、それらしい例がのっていたような。
0182nobodyさん
03/07/13 14:17ID:Qv0LVgul早速ありがとうです。
調べてみます
0183nobodyさん
03/07/13 15:19ID:???smartyと関係ない上にマルチポスト
0184nobodyさん
03/07/13 16:23ID:???できるの?コレ?
0185山崎 渉
03/07/15 11:07ID:???__∧_∧_
|( ^^ )| <寝るぽ(^^)
|\⌒⌒⌒\
\ |⌒⌒⌒~| 山崎渉
~ ̄ ̄ ̄ ̄
0186nobodyさん
03/07/15 17:55ID:wTgTaT8Bコンテンツとデザイン〜の1です。
>>177
一応は本家公認のテンプレートエンジンって扱い(ですよね?)なので、海の向こうでの
使用頻度は高いんじゃないかと思います。xoopsに採用という実績もありますし。
国内でも自分みたいな糞田舎の情報システム部ですら2年前から使ってるので、それなりに
普及していると思いますよ。googleでも随分引っかかるようになってきましたね。
0187nobodyさん
03/07/16 00:47ID:???APCとかZendOptimizerとか使える?
0188nobodyさん
03/07/21 14:35ID:???全く assign していない PEAR::raiseError のようなエラー処理の記述や print 文で勝手にエラー吐いてくれまつ。
…… Smarty のコードまで潜って 1h ほど戦って気付いた。
$tpl->display('hoge.php');
拡張子が .tpl ぢゃなくて .php で別ファイル指定してた。鬱だ氏のう _| ̄|◯
別に問題ないかと。
APC1の頃は大丈夫だったし
現在はmmcache使ってるけど大丈夫だよ〜。
0190nobodyさん
03/07/22 15:11ID:???appendとassignって何が違うんでしょう?
0192nobodyさん
03/07/28 23:09ID:Qst4s2Alページの一部分だけキャッシュのすることってできないですか?
自分、いわゆる「ぱんくず(※)」をキャッシュにしたいんですよね・・・
※トップページから現在のぺージまでの道筋を表したもの。
例)Yahoo!とかだと
ホーム > コンピュータとインターネット > ソフトウェア > インターネット > WWW > ブラウザ
っていうあれね。
0193nobodyさん
03/07/28 23:36ID:zAmscCpEhttp://www3.free-city.net/home/espresso/white-snow.html
0194nobodyさん
03/07/29 17:31ID:aKRM8GxJinsertを使えば出来る。
http://sunset.freespace.jp/smarty/SmartyManual_2-5-0J_html/language.function.insert.html
カスタムプラグインでテンプレート内に{breadcrumb 現在の位置="hoge"}ってかくと
自動でずらっとパンくず表示してくれるの作ったけど便利だよ。
他のサイトにも再利用できるし。
0195nobodyさん
03/08/01 14:03ID:???使わせたいんですが、Smartyタグのデリミタは何が無難でしょうか。
ページ内にCSSを書くこともあるのでデフォルトの { } は使わせたく
ないし、XOOPS2 なんかで定義されている <{ ]> でもいいかなと
思ったけど、< なんかに自動的に置換されてしまわないかと心配
です。それに、modifierのパラメータを " で囲むと " に置換
されるもよう。
0196山崎 渉
03/08/02 02:23ID:???( ^^ )< ぬるぽ(^^)
0197ぼるじょあ ◆ySd1dMH5Gk
03/08/02 04:51ID:???ピュ.ー ( ・3・) ( ^^ ) <これからも僕たちを応援して下さいね(^^)。
=〔~∪ ̄ ̄ ̄∪ ̄ ̄〕
= ◎――――――◎ 山崎渉&ぼるじょあ
0198nobodyさん
03/08/09 06:43ID:ZOEKZBoK0199あぼーん
NGNG0200nobodyさん
03/08/09 07:56ID:0dlTg+8lhttp://hoover.ktplan.ne.jp/kaihatsu/php/index.php?type=doc&txt=htmltemplate
を氏蘭のか?
0201あぼーん
NGNG0202nobodyさん
03/08/09 15:33ID:ZOEKZBoKせめてキャッシュを実装してほしい。(中間ファイルでないよ)
タグが拡張できるようにしてほしい。
ちゃんとエラーハンドリングしてほしい。
このあたりを実装してくれれは少しは考えるが、
まだ今のところはSmartyのほうが使い勝手はいいな。
0203あぼーん
NGNG0205nobodyさん
03/08/12 13:45ID:7lLuw4V/いや、中身は見てないが。
0207nobodyさん
03/08/13 11:24ID:+vOr/IO1普通、Release Candidate版って問題がなければそのままリリース版に
するものだから、仕様変更はその前の時点で落ち着いていて欲しいな。
その辺、PHPらしいと言えばらしいけど。
0208nobodyさん
03/08/13 21:01ID:???旧ver Release -> 新ver RC は仕様が変わっててあたりまえじゃないか?
0209nobodyさん
03/08/14 12:09ID:Ayxn98z4それもそうだ。
新ver RCと旧ver Releaseの間に新ver betaに相当するもの(CVS head)が
あったと考えれば問題ないな。スマソ。
0210山崎 渉
03/08/15 22:32ID:???│ ^ ^ │<これからも僕を応援して下さいね(^^)。
⊂| |つ
(_)(_) 山崎パン
0211nobodyさん
03/08/16 17:32ID:???それを配列にいれます。
その配列を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:???(^○^)
0214nobodyさん
03/08/23 08:07ID:qE2mijHa0215nobodyさん
03/08/31 23:16ID:OAFHlkE10216nobodyさん
03/09/03 11:17ID:???0217nobodyさん
03/09/11 19:36ID:???0218nobodyさん
03/09/12 09:35ID:???0219nobodyさん
03/09/18 10:27ID:bzSYta4I0220nobodyさん
03/10/02 10:36ID:ZE4wxlxfSmartyを使ったプログラムを業者に頼んだら、あがってきたソースは
タグまで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はこんな風に使うんだよ、と教えてあげて。
0223220
03/10/02 13:42ID:???ご返事ありがとうございます。やはりおかしいですよね。
私は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上のサイトを参考にPHPでMVCってみたけど・・・しんどい・・
ログ読ませてもらったらよさそうなので今度のシステムで使わせてもらいます。
0227nobodyさん
03/10/09 17:38ID:???$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が面倒で。。。
0228227
03/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:???0230nobodyさん
03/10/10 00:58ID:oTftSrdr自分の、ファイルを置ける領域に「Smarty」という名のディレクトリをつくり、、ファイル群をそこにアップロードして、、
define("SMARTY_DIR","/Smartyへのパス・・・・・・/Smarty/");
require_once(SMARTY_DIR."Smarty.class.php");
とやれば、使えるのでしょうか?
0232230
03/10/11 00:46ID:U0DA9P6C自分が借りてるレンタルサーバで、PHPが近々はいる予定なので、
関心があって訊いてみました
0233nobodyさん
03/10/11 08:24ID:???0235nobodyさん
03/10/14 23:32ID:???PHPを実行するユーザーが、templates_cとcacheディレクトリを
読み書きできるように、場合によってはパーミッションを変更しないと
いけないのだが、そのへんは大丈夫?
0239nobodyさん
03/10/18 23:59ID:???たとえば、
<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>
みたいな感じでありったけ出力したいのですが。
0240239
03/10/19 00:00ID:???あ、スマソ
<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>
0242239
03/10/20 10:08ID:???ループで書くとこうなってしまうってことです。
こういうのを再帰で書くのはSmartyでは難しいんでしょうか。
それでちょっと思いついたんですが、自分自身をincludeする
テンプレート片を作るとどうなんでしょう。自分でちょっとやって
みたら、変数のスコープの問題でつまづいてしまったんですが…。
0243239
03/10/20 13:16ID:???やればうまくいきました。
0244nobodyさん
03/10/21 14:41ID:???みたいに配列を直接指定する方法ってありますか?
0245244
03/10/21 15:24ID:???できないのは $a[0]->b[0] でした。
できないのかなー?
0246nobodyさん
03/10/22 17:20ID:6TbJL0Yrエラーがでてた。
これSmarty?
http://www.itv24.com/
0248nobodyさん
03/11/07 15:10ID:KX2gQLRX0249nobodyさん
03/11/07 19:42ID:ZxETm7Q5---
$template_dir
テンプレートファイルを置くディレクトリです。ファイルをインクルードする際にリソースの種類を指定しなかった場合は、
このディレクトリから探します。デフォルトは"./templates"で、実行中のphpスクリプトが置かれた場所に存在する
"templates"ディレクトリを探す事を意味します。
テクニカルノート: このディレクトリをwebサーバのドキュメントルート下に置く事を推奨しません。
---
この最後の行、なんでなんでしょう?
直接のぞかれて問題のあるようなテンプレート(tpl)ファイルを置く方が、問題だと思うのですが・・・
実際、XOOPSなんかも、ドキュメントルート下にtplファイル置いてますし。。。
0250nobodyさん
03/11/07 21:10ID:???何が言いたいんだ?
> 直接のぞかれて問題のあるようなテンプレート(tpl)ファイルを置く方が、問題だと思うのですが・・・
問題なんじゃん、じゃあこれであってるじゃん
0251nobodyさん
03/11/07 22:32ID:???処理方法がばれればクラッカーに解析される可能性など。
見られないにこしたことはない。
0252nobodyさん
03/11/07 23:57ID:???XOOPSの場合、レンタルサーバ等でhtml公開用のディレクトリ
以外がユーザに解放されていないケースにも合わせるため
XOOPSインストールディレクトリ以下に集中させる設計になっているから
必ずしもセキュリティ上ベストな選択がなされている訳ではないよ。
#敢えてレベルの低いところをターゲットとしている。全体的に
0253nobodyさん
03/11/12 04:47ID:FrBzA+QuSmartyを導入しようとしているのですが、
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+QuExample 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:???その些細なことが原因なんだと思うが。。。
わからなかったらもう1度最初からやったほうがいいと思う
chwon を chownにしたらよいかも
0256nobodyさん
03/11/13 21:49ID:???http://sunset.freespace.jp/smarty/SmartyManual_2-6-0RC2J_html/installing.smarty.extended.html
0257nobodyさん
03/11/14 13:26ID:maWzYQwN俺も最近使い始めたんだけど、JavaScriptやCSSのタグに引っかかって
鬱陶しい。結局何に変更しました?
0258nobodyさん
03/11/17 14:01ID:EFGY3Z8yカスタム関数の追加ってどうやるんですかね?
動的な関数の追加はregister_function()を使用すればよいのですが、
もっと汎用的に使いたいんです。
マンモス本によりますと、Smarty.addons.phpというファイルに定義を
追加すればよいことになっているんですが、これはこの本の出版時点
のversion 1.5での設定法らしんです。
version2か2.5あたりから、そのあたりの使用が変わったらしい(changelog
を参照)
のですが、新しい設定法がわからなくて悩んでいます。
どなたかご教授願えませんか?
0259nobodyさん
03/11/17 15:54ID:???オレも最初はマンモス本でやった
いろいろ変わってるよね。
ほい。
ttp://sunset.freespace.jp/smarty/SmartyManual_2-4-1J_html/index.html
たぶんpluginsディレクトリ内の
function.xxxxx.php
を適当にコピーして内容もそれを参考にいじれば
いけたような。。。
0260nobodyさん
03/11/17 15:56ID:???そこまで分かっていて、日本語に訳されたマニュアルもあるのに
どうして読まないのでしょうか?
ttp://sunset.freespace.jp/smarty/SmartyManual_2-6-0RC2J_html/
0261nobodyさん
03/11/17 18:48ID:6jAm6LT2有難う御座います。
マニュアルは一応一読したつもりですが、グローバルなカスタム関数の
登録に関して記述が見当たらなかったもので・・・。
それでやってみますです!
0262nobodyさん
03/11/18 15:58ID:???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:n07yC7qyhttp://pc2.2ch.net/test/read.cgi/php/1067635640/984
<p id="name">ここに名前</p>
が、
$tpl->assign("name", "太郎");
で
<p>太郎</p>
となるようにするにはどうすればいいのでしょうか。
今自分ことの環境はデフォルトなので、デリミタは { } となっています。
0267nobodyさん
03/12/05 21:48ID:???Smartyはセットアップできたの?
あなたの質問の内容よりよっぽど難しいと思うけど。
で、セットアップ出来ているとしたら、セットアップする際に参照した
マニュアル(例えば>>1には日本語マニュアルが紹介されている)の
最初の方にあなたの求める答えが載っているのだが。
0268266
03/12/05 22:20ID:???を見てインストールし、
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:???もう少しマニュアルを読めば分かると思うけど、index.tplに
<p id="name">{$name}</p>
と書けば置き換わるよ。
0270266
03/12/05 22:57ID:???<element id="varname">ダミーの文字</element>
というテンプレートに対して、 assign('varname', 実際の文字) とすると
varnameというidの振られたエレメントの中のダミーの文字が置き換わって
<element>実際の文字</element>
となるようなライブラリを探しているんです。
これだと、「仕上がり見本」のHTMLをそのままテンプレートに使えるんです。
0271nobodyさん
03/12/05 23:05ID:???ああ、そういうことね。
では、テンプレートにifとelseを使って、$hogeがあるときは$hogeの内容、
$hogeが無いときはデフォルトの文字列っていう風にしてはいかが?
0272266
03/12/06 13:28ID:???っていうことですか? これ Smartyを通さないと <p>加藤剛</p> を得られませんよね。
デザイナーは普通のHTMLエディタで何の変哲もないHTMLを書けばいい、
というのが狙いなので。
0273nobodyさん
03/12/06 13:46ID:???ああ、そこまでは無理やね。
というか、そんなの実現不可能だと思うけど。何使っても。
もしそういうライブラリーが見つかったら、報告よろしく。
0274266
03/12/06 15:07ID:???ttp://www.brain-tokyo.jp/research/amrita/index_ja.html
PHPでというのが要件なので、探しているのです。
0277nobodyさん
03/12/10 17:44ID:d5KtgpUB使って割り当てたもの、という意味なんでしょうか?
出力したい変数が多数あるのですが、テンプレート内で{$hoge} とする
だけでは出力しないものなんでしょうか?
■ このスレッドは過去ログ倉庫に格納されています