【PHP】Smarty【Template】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
03/03/10 00:57ID:NhgrjNBT本家(英語)
http://smarty.php.net/
日本語マニュアルとか
http://sunset.freespace.jp/smarty/
0611598
05/01/21 23:54:03ID:???私もそれを考えてみたのですが、どう実装すれば良いか分からず
そこでblockプラグインを作成しようと思ったのですが、blockの内部の変数は
既に変換済みで渡されるということなので、どうすればforeachみたいな事を
できるのかマニュアルと格闘していたのですが解決できそうな方法がありませんでした。
やはりテンプレート上のみで解決するには上で解決したような例でinclude再帰か
foreachの実装みたいなものをSmarty側で新たに組み込むかなど
上手い方法がなかなか思いつきませんorz
0612598
05/01/21 23:57:53ID:???Smartyの構文で渡すのではなく、特殊な文法でいくという感じでした
{html_tree ......}
this is [[node]]
{/html_tree}
これならpreg_replaceしながらでいけるのですが、新しい文法を作り出さないで
上手くいく方法がないか模索しています
0613nobodyさん
05/01/25 17:14:22ID:ShBI8nKKsetActionオブジェクトのメソッドにアクセスしようとしたところ、syntax error: unrecognizedが発生してしまいました。
参照オブジェクトからのメソッドはコールできないんでしょうか?
0614nobodyさん
05/01/26 19:05:19ID:???呼び出せます。
以下を読んでみて。
http://sunset.freespace.jp/smarty/SmartyManual_2-6-6J_html/advanced.features.html#advanced.features.objects
0615614
05/01/26 19:06:32ID:???テンプレートの中でメソッドコールのチェーンはできないと思います。
0616nobodyさん
05/01/26 23:31:40ID:???0617nobodyさん
05/01/27 01:01:07ID:???0618nobodyさん
05/01/27 18:57:53ID:???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
0619618
05/01/27 18:59:13ID:???スクリプトから直接echo()した場合や、
フォームからDBへの入出力等だと化けは発生してません。
0623nobodyさん
05/01/28 05:06:57ID:???0624nobodyさん
05/01/28 06:48:39ID:???同じようなことで悩んでいるのですが、この例でassignしてある$rootの
配列の構造がどうなってるのか教えていただけないでしょうか…。
0625nobodyさん
05/01/30 10:13:27ID:???ちょっといい例が思いつきませんが例えば下のツリーの関係なら
・あ
・赤
・ポスト
・雨
・か
・亀
こんな感じの配列です
(
(あ
(赤
(ポスト)
雨
)
)
(か
(亀)
)
)
0626624
05/02/01 00:46:14ID:???なるほど、理解できました。サンクスです。
自分でも調べてみました。
Pear::TreeやPear::DB_NestedSet(初めて知った)を使う、という手もあるみたいです。
ttp://www.codecomments.com/archive224-2004-3-151787.html
0627nobodyさん
05/02/02 03:50:11ID:???「どれか1つが記入されていたらOK」というRuleは
どうやって設定すればいいでしょうか。
いまtextフォームが4つあるんですが、
単純にrequireにしただけだと空欄が認められないし、
何も設定しないと入力チェック自体が出来ないという状態に。
0628nobodyさん
05/02/02 09:00:55ID:???addFormRuleでいいんじゃない?
http://hatotech.org/kumatch/archives/000331.html ここのPDFに
簡単に使い方が書いてあるよ。
0630nobodyさん
05/02/03 12:42:41ID:???%%11^111^111BD1DF%%debug.tpl.php
のようなファイルができてしまい、アクセスできません。
どうしたら、正常なファイル名のファイルが作成されるのでしょうか?
Apache2
PHP5.0.1
を使ってます。
0632nobodyさん
05/02/03 18:51:23ID:???レスありがとうございます。
ですが、
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フォルダ内を動かしています。
0634627
05/02/04 19:35:24ID:???0635nobodyさん
05/02/04 20:51:56ID:???別に誤爆ってほどでもないかと。
Smarty+HTML_QuickFormは定番だしね。
ちなみに俺はデザインも自分でやってるので、
そういう場合は、JavaScriptをテンプレートに直書きしてる。
分離が出来てなくてダメな事はわかってるけどね・・・。
0637nobodyさん
05/02/28 10:40:41ID:???全く同じエラーがでて悩んでたんですが、私の場合は>>636さんのご指摘通りでした。
IISで動かしてたので環境は違うのですが、
wwwroot->プロパティ->セキュリティ->Everyoneで書き込みを許可したら動きました。
Smartyのcore_write_file.phpで@renameになっており、
ここでのエラーが出力されないため、解りにくかったです。
0638nobodyさん
05/02/28 12:50:49ID:???セキュリティの問題があるかもしれないので
wwwrootではなくtemplates_cを書き込みを許可するようにした。
0639nobodyさん
05/03/05 18:32:35ID:???はじめにマニュアルを読んでから動かせば @renameとか関係ないんで。
自分の落ち度を他人のせいにするもんじゃない。
0640nobodyさん
05/03/05 19:51:23ID:???0641nobodyさん
05/03/08 16:14:48ID:AAd9Sq9Q購入したPHPのサンプル本で、希望する動きのがあったので
使用しようと思ったのですが、Smartyを使って紹介されていたんです。
Smartyで書かれている部分を、PHPに直すような高度な事も
出来ないので、大人しくSmartyをインストールしようとしてみた
のですが・・・。
書籍のCDROMに入っていたWindows用のSmartyが
Smarty-2.6.6tar.gzで、解凍しようとしても出来ないのです。
インストール方法を探してttp://sunset.freespace.jp/smarty/の
サイトも何度も読んで見たのですが、『ディレクトリファイルに
インストールしてください』という下りから始まっていて、
ウィンドゥズ対応の圧縮ファイル名などの記述すら見つけられなくて。
どなたか、Win用のインストール方法を詳しく教えて頂けない
でしょうか・・・。
お願い致します。
0642nobodyさん
05/03/08 16:20:35ID:???はい、こんにちは。
ttp://www.vector.co.jp/ に行き、キーワードの欄に「gz」と入力します。
検索ボタンを押すと結果一覧が表示されるのでお好みのソフトを選択しましょう。
0643nobodyさん
05/03/08 17:13:05ID:???0644641
05/03/08 17:34:59ID:AAd9Sq9Qぎゃー!出来ました。解凍、出来ました。
なんか、すごい恥ずかしい質問をしてしまった気がして
穴をほってでも入りたい気持ちでいっぱいです。
+Lahaで解凍できない=winファイルじゃない?
なんて思考回路になってしまった自分の馬鹿さ加減に
悲しくなりました。
ご指導、ありがとうございました。
今から設置に四苦八苦してまいります。
0645nobodyさん
05/03/08 18:36:24ID:???0646641_| ̄|○
05/03/08 21:33:23ID:AAd9Sq9Qインストール先がわからないです・・。
解説サイトさんによると
ディストリビューションの/libs/ディレクトリにSmartyライブラリファイル
をインストールして下さい
とあるのですが、ディストリビュージョンって何ですか・・?
検索してみたのですが、Linuxの・・というのばかりが
引っかかってきて、打ちひしがれるばかりです。
どなたか合いの手をお願いいたします。
0647nobodyさん
05/03/08 22:05:41ID:???0650nobodyさん
05/03/09 01:27:21ID:???ハッキリ言ってその程度の知識でサーバ管理するのはとても危険。
ついでに、踏み台にされるとはた迷惑。
いや、公開サーバじゃなくてただPHPの勉強してるだけならいいんですがね。
0651641_| ̄|○いまだわからず・・・
05/03/09 04:43:26ID:???ご指導ありがとうございます。
適当な場所でインストールしてみたのですが、
なぜかMySQLの信号機が赤になってしまって
また打ちひしがれ中です_| ̄|○
PHPdevでSmarty使おうとしているのが悪いのかしら
とか思って検索中です。
>>650さん
まさか、ネット上で公開する気なんてまだまだ
先の先の事ですよぅ!
セキュリティの事もわからないのにっ。
一から色々と、勉強中なのです_| ̄|○
知らない事が多すぎて、覚える事ばかりで
沸騰しそうです。
踏み台にしているつもりは毛頭なかったです。
不愉快にさせてすみません・・・。
0652nobodyさん
05/03/09 09:02:15ID:???> Install the Smarty library files which are in the /libs/ directory of the distribution.
[日本語訳サイト]
> ディストリビューションの/libs/ディレクトリにSmartyライブラリファイルをインストールして下さい。
[正しかろう訳]
配布物の/libs/ディレクトリにあるSmartyライブラリファイルをインストールします
(ここでいう配布物ってのは、Smarty-2.6.6tar.gzを解凍した物の事)
0653nobodyさん
05/03/09 10:14:49ID:???踏み台ってのは、君がここの回答者を踏み台にして…って話じゃなくて、
セキュリティの甘いサーバをネット上に放っておくと、そのサーバを”踏み台”にして、
悪事に利用されるよ、そしてそれは万人にとって迷惑な話だよ。って意味だよ。
ぼちぼちで、やったんさい。
0654nobodyさん
05/03/09 10:41:51ID:???申し訳ないが前提となる知識が足りなすぎる。
足し算がわからない人に因数分解は無理。
書店で入門書を買ってきてコツコツやりな。
どうしてもわからないことは質問してもいいから。
だいたいディストリビューションっていう単語がわからなければ、
Googleで調べればすむ話でしょ?
自分で調べもしないのに聞くのはイクナイよ。
先は長いけどがんばれー。
0655nobodyさん
05/03/10 11:16:13ID:1EPX/SpTsmartyのifでの比較演算なんですが、
{if "1010010001000110000115" eq "1010010001000110000115"}equals{/if}
と
{if "1010010001000110000120" eq "1010010001000110000115"}equals{/if}
の両方とも、出力がequalsになるんですが、
何故なんでしょうか?
0657nobodyさん
05/03/10 11:43:54ID:???{strip}命令って無効になったのですか?
そのまま{strip}って表示されてしまうのですが・・・。
0658655
05/03/10 11:44:28ID:???いや、たまたまじゃない。
つか、すげぇ下らない理由だった。
当然、文字列同士で比較していると思っていたのだが、
数字だけで構成しているとどうやら数値として比較するらしい。
で、有効な桁数以上の文字はカットされてしまい、
(俺のトコだと整数で18桁がボーダーのようだが、環境によって変わるかも。)
前方18桁だけ取り出して、数値としてみれば
両辺一致しているのでtrueになるようだ。
末尾にcatで"a"なんてくっつけてやれば、
文字列同士として比較するため、何の問題もでない。
そんな事にも気づかなかった俺って・・・orz
0660nobodyさん
05/03/10 15:16:46ID:???0661nobodyさん
05/03/10 15:25:45ID:???0662nobodyさん
05/03/10 17:46:21ID:8Bnn/FyNカスタムタグ使ってると、そーなるバグ
smartyのフォーラムよく見ろ
0664nobodyさん
05/03/11 11:29:21ID:???if( 0 == "test") とか多分true
そういうときに if( 0 === "test") ってやるんだっけか
0665641
05/03/12 09:17:24ID:???何日もかけて今頃やっとかよっ!って感じなのですが・・_| ̄|○
ご指導してくださった皆様ありがとうございました。
0666641
05/03/12 11:31:22ID:Eai46BlS何度もすみません。
Smartyをインストールできたのがうれしくて、書籍の
サンプルをそのまま使って、ローカルでテストしてみたのですが、
Fatal error: Cannot redeclare loginfunction()
(previously declared in C:\Program Files\Apache Group
\Apache2\htdocs\samples\chap5\mng\auth.php:12)
というエラーが出てきてしまいます。
0667641 続きです
05/03/12 11:31:40ID: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");
}
<略> ?>
どこが悪いのか、ご指導いただけないでしょうか・・・・。
よろしくお願いいたします。
0668nobodyさん
05/03/12 11:47:33ID:???smartyとはもう関係無い話だと思うのだが。。
loginfunctionが二重定義されているという事ならば、
本当にそうなっているのか、
DB.php、Auth/Auth.php、chap5/MySmarty.class.phpの中や、
さらにその中でrequireやincludeされているファイルを
検索して確かめたらいいのでは?
その上で、どのfunction loginFunctionを使うかはそれを作った人の意向によるかと。
0669641
05/03/12 12:31:08ID:???ご指摘ありがとうございます。
ファイル内を、検索して探してみます。
おっしゃる通り よく考えたら、確かにSmartyとは直接
関係なかったですね・・_| ̄|○
すれ汚し、大変失礼いたしました。
0670nobodyさん
05/03/13 19:08:22ID:8WQj/L10http://www.amazon.co.jp/exec/obidos/ASIN/4798108839
買おうか迷っているので感想キボンヌ
0672nobodyさん
05/03/13 19:27:34ID:???立ち読みで十分な希ガス
0673nobodyさん
05/03/13 19:56:38ID:???0674nobodyさん
05/03/13 20:08:38ID:???・・・「かいてる」の変換候補一発目がなぜか「Keitel」でびびった。
0675nobodyさん
05/03/13 21:11:31ID:???PHP界隈でも結構書いてる。ライター一本でちゃんと食っていくのには
そのぐらい書かないと駄目なんだなと、いつも思い知らされる訳だが。
0676nobodyさん
05/03/13 22:03:03ID:???それともMojaviとか使ってるのかな?
0678nobodyさん
05/03/13 23:20:57ID:???$smarty->display([テンプレートファイル名]);
とやると標準出力(ブラウザ)にHTMLが出力されますが、
これをファイルに出力させることはできるのでしょうか?
0679nobodyさん
05/03/13 23:28:24ID:???ttp://d.hatena.ne.jp/nadi/20040215#1076810117
ttp://d.hatena.ne.jp/nadi/20040306#1078484912
0680nobodyさん
05/03/13 23:54:01ID:???でもこの人が書いた基礎PHPって本はホント良いよ。
初心者には超オススメ。
でもtemplate_cのパーミッションを777にしろって
書いてあったのはポカーンだったけど。
0681nobodyさん
05/03/14 00:39:54ID:???ゴミ同然。買うな。
だいたい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のコード書いた事ない人間の書籍でよく勉強できるよな。
そうやってマニュアル読んだだけの素人が書いた書籍で勉強した
ダメプログラマがダメコードを作る。
この程度のレベルの人間が書籍を書いていることが問題。
でも(趣味で触るだけの)初心者にはいいかもね。
どっちでもいいよ。
connectする -> プログラム終了とともに切断
pconnectする -> disconnectは無視する
だから、どちらにしろあまり意味ないと思うです。
0684nobodyさん
05/03/14 01:10:40ID:0xZUZ/dg0685nobodyさん
05/03/14 01:29:18ID:???PHP以外の言語にも手を出そうというならなおさら(GCが増えてきたにしろ)
致命的な差異が出ないなら、初心者の頃はそういう考えから身につけてもいいんジャマイカ
ちなみに漏れは書くのめんどいので閉じないことが多い
0686nobodyさん
05/03/14 02:11:46ID:???でも非機能要求を絶えず意識する癖なんて持っても PHP/web アプリで量的に重いコードを設計する人になられても困る。
ソレはソレ、コレはコレじゃないか。
原理原則やデータベース個々の基礎知識は弁えて当然というのはまた別のプロセスでしっかり身につける方が。
0687nobodyさん
05/03/14 02:56:18ID:???0688686
05/03/14 03:46:48ID:???0690678
05/03/14 11:14:44ID:???なるほど、検討してみます。ありがとうございます。
昨晩から試行錯誤を繰り返し、
現在のところoutputfilterで、出力直前の文字列を横取りし、
ファイルに吐き出すという、ややトリッキーな方法を行っています。
0691nobodyさん
05/03/14 11:51:06ID:???0692nobodyさん
05/03/14 21:41:11ID:???参照している範囲が明確になるという点もあるので「クローズ・削除
しない方が性能的に有利かつPHP的な使い方」というのはアホの理論。
0695nobodyさん
05/03/15 17:25:00ID:???http://www.lyricfathom.com/htmltemplate/
0696nobodyさん
05/03/16 10:24:48ID:???記述方法なんかは、スマーチーと似た感じ。ドットがスラッシュになった感じだったかな。
ロジックの追加とかも簡単、まあそれでも自由度が低い。elseとかやりたいなら2、3層前とかから書き直さないといけないから、意味ないし。
0697nobodyさん
05/03/16 18:40:40ID:???HTMLtemplateのくわしい話MLに、最近ひさびさに
メール流れた〜と思ったら。SPAMでした…orz
2年近く放置してる作者も、それに登録したまんまの俺もどうかしてますが。
あ、でも新しい系列になって発展してたんですな。
俺の感想も>>696に似たようなもんだけど、
元々の割り切りからも考えるに、プログラマからすると
どうしても物足りなさはある。かといって発展拡張を考えるなら
高機能な標準的なテンプレートを使っちまう方が良いし というところ。
でも自分用の軽量なテンプレには部分的にはパクらせてもらった。
テンプレートを使うんじゃなくて、テンプレートを作る上で
参考にするのは良いと思うよ。作りが簡単だし。
0698nobodyさん
2005/03/26(土) 16:50:17ID:9cvI6Qz8123456789
というデータをphpからうけとったのを
456
のところだけ切り取って出力するような・・・
0700nobodyさん
2005/03/26(土) 17:01:27ID:9cvI6Qz8なるべくなら使わないでいたいんですけど、
それがいいのかなぁ
0703nobodyさん
2005/03/26(土) 17:13:51ID:9cvI6Qz8レスありがとうございます。
http://sunset.freespace.jp/smarty/SmartyManual_2-6-3J_html/
にはsubstrは無いみたいですけど、>>699さんの方法か
何かで定義しなくても使えるものなんでしょうか?
教えて君で申し訳ないです。
0705nobodyさん
2005/03/26(土) 17:25:59ID:9cvI6Qz8まじすか。
ありがとうございます。使ってみます−
0706nobodyさん
2005/03/26(土) 17:32:21ID:???$securityをtureにしてると$security_settingで指定しないと使えないから気をつけろよ
0707nobodyさん
2005/03/26(土) 17:33:45ID:9cvI6Qz8と、書いてみたのですがエラーになってしまいます。
{$hoge}だと123456789と表示されます。
使い方間違ってるのでしょうか?
0708nobodyさん
2005/03/26(土) 17:34:13ID:9cvI6Qz8あ、それかも。みてみますー
■ このスレッドは過去ログ倉庫に格納されています