トップページ⇒php
981コメント365KB

【PHP】 Smarty 【テンプレートエンジン】 第2章

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2010/03/29(月) 14:41:04ID:???
Smarty は PHP のためのテンプレートエンジンです。
具体的に言うと、php のプレゼンテーションからアプリケーションのロジックとコンテンツを分離して管理する事を容易にします。
これは、プログラマーとテンプレートデザイナーの役割が異なり、
これらの役割を違う人間が受け持っている場合に最適だと言えます。
05585522010/09/02(木) 10:21:12ID:???
>>557
こういう、2つの領域を指定する方法もあるんですね。勉強になります。

出来れば、実行ファイルを修正するのは嫌だったのですが、
この方法を試してみます。ありがとうございました。
0559nobodyさん2010/09/13(月) 05:38:22ID:???
PHPのincludeは絶対パスのほうが早いらしいから、絶対パスにする癖をつけるのも悪くないんじゃない?
自分は設定ファイルにテンプレートディレクトリ、includeディレクトリなんかのパスを書いといて呼び出す時にそれプラスファイルまでのパスを呼んでる。
0560nobodyさん2010/09/14(火) 14:06:28ID:???
smartyなんて時代遅れですよ
今はdwooの時代ですよ
0561nobodyさん2010/09/14(火) 14:41:32ID:???
ドゥヲォォォ
0562nobodyさん2010/09/16(木) 09:23:10ID:???
DWOOが素晴らしいのは同意だが、いかんせん知名度が・・・('A`
せめて日本語ドキュメントがあれば推し進められるんだがねぇ
0563nobodyさん2010/09/16(木) 09:56:08ID:???
smartyが使えればそのまま移行できるから問題ない
smartyのドキュメントがdwooのドキュメントでもあるからね
0564しますよ2010/09/16(木) 10:06:49ID:???
一応日本語訳も作りましたからスレ立つぐらいになれば翻訳データ公開
0565nobodyさん2010/09/16(木) 10:15:18ID:???
dwooってどれくらい素晴らしいの?
0566nobodyさん2010/09/16(木) 15:07:19ID:???
dwooはsmartyの後継という立場で互換性と高速が売り
0567nobodyさん2010/09/16(木) 19:56:26ID:???
そんなにスゴいんならSmartyと入れ替えるよ
0568nobodyさん2010/09/16(木) 20:00:37ID:???
dwooでわからない事があるんですけどどこで聞いたらいいですか?
0569nobodyさん2010/09/16(木) 20:09:41ID:???
>>568
筋でいえば作者でしょ。
プログラマで英語できないとけっこう致命的じゃない?
0570nobodyさん2010/09/16(木) 20:16:16ID:???
聞くのは2ちゃんでです
0571nobodyさん2010/09/16(木) 20:40:06ID:???
Smartyと互換性があるって、もしかしてSmartyAdapter使った場合ってこと?
0572nobodyさん2010/09/17(金) 01:29:26ID:???
>>568
スレ立ててもいいんじゃない?
このスレと対立しそうだけど。
0573nobodyさん2010/09/17(金) 12:22:32ID:???
過疎ると思うけどここはsmartyスレだし別スレ立ててください
0574nobodyさん2010/09/17(金) 14:12:42ID:???
そもそもSmartyもdwooも導入しちゃえばそこまでじゃないの?
前スレも大した情報交換もなかったしね
0575nobodyさん2010/09/17(金) 20:29:00ID:???
よーし、ドゥオー導入しちゃうぞ
0576nobodyさん2010/09/17(金) 22:21:37ID:???
Smarty作ったやつも使う奴もセンスがどうかしてる
0577nobodyさん2010/09/17(金) 22:34:12ID:???
Dwoo作ったヤツのセンスは?
0578nobodyさん2010/09/18(土) 00:19:23ID:???
たかだが道具に目くじら立ててる方がどうかしてるw

DWOOはAdapter機構が良い感じだね、
フレームワークのViewHelperを活かしつつSmarty風に構文書ける。

ただし、2月から更新停滞しているのが怖い。
0579nobodyさん2010/09/18(土) 09:46:34ID:???
ttp://devzone.zend.com/article/12322
ttp://devzone.zend.com/article/12366

>>578
ttp://github.com/Seldaek/Dwoo
0580nobodyさん2010/09/19(日) 03:40:35ID:???
>>579
新しいものを導入したい気持ちはわかるが、
せめてSmartyと比較するなり、詳しく紹介してくれないとスレ違いというか、
誰もまともに見てくれないかと・・・


個人的にはDWOOの構造は好みなんだが、
安定性、ベンチマーク、導入実績のレビューが無い時点で本格導入には躊躇している(Smarty3も同様だが)
0581nobodyさん2010/09/19(日) 09:41:02ID:???
ベンチマークなんて自分で取ればいいだろ
0582nobodyさん2010/09/20(月) 04:52:19ID:???
信用たるベンチマークはそう簡単に取れるものでは無いけどな
0583nobodyさん2010/09/20(月) 09:47:00ID:???
ちゃんとしたベンチマークを取る知識もないなら気にせず使いたいものを使え
0584nobodyさん2010/09/21(火) 01:44:32ID:???
今時PHPでテンプレートエンジンてw
どれだけ情弱だよw
0585nobodyさん2010/09/27(月) 04:06:51ID:???
じゃあ今どきの流行は何なんだ
0586nobodyさん2010/09/27(月) 11:19:29ID:???
今どきの流行
<html>
<head><title>ほげ</title></head>
<body>
<h1>ほげテーブル</h1>
<?php
$conn = mysql_connect('hostname', 'username', 'password');
mysql_select_db('dbname');
$res = mysql_query('SELECT * from table_hoge');
while ($row = mysql_fetch_array($res, MYSQL_NUM)) {
echo $row[0] . "<br>\n";
}
?>
</body>
</html>
0587nobodyさん2010/09/27(月) 11:36:12ID:???
HTMLにコード入れ込むもキモ
0588nobodyさん2010/09/27(月) 13:09:57ID:???
相手にするなよw
PHP自体がテンプレートエンジンですとか言いたいんだろw
0589nobodyさん2010/09/27(月) 22:33:10ID:???
Smartyに興味があるんですけど、目的があまり理解できないので教えてください。
HTML内で<?= ?>を使うのとSmartyの{ }を使うのは、意味合いが違うんでしょうか?
0590nobodyさん2010/09/27(月) 22:45:48ID:???
そっちで悩むのか
0591nobodyさん2010/09/27(月) 22:54:18ID:???
興味があるならググるなりスレを読むなりすればいい
05925892010/09/27(月) 23:16:47ID:???
先日から、Smartyが使われたソースをいじってるところなんです。
最初は「何だか良さそう!」って思ったんですが、だんだん良さがわからなくなってきました。
0593nobodyさん2010/09/27(月) 23:48:37ID:???
デリミタを<{ }>にしてたが最近打ち辛さを感じてきた
0594nobodyさん2010/09/28(火) 00:01:37ID:???
キーをカスタマイズするソフトを導入すりゃあいいじゃん
[と]をタイプすると{ }が入力されるようなのをAutoItかAHKで作るといい実際俺はアンダースコアで利用してる
0595nobodyさん2010/09/28(火) 01:18:59ID:???
>>592
ここは偏った意見しか貰えないから、おとなしくググった方がいい。
0596nobodyさん2010/09/28(火) 10:30:27ID:???
安心しろggっても同じだから
0597nobodyさん2010/09/29(水) 14:31:00ID:???
dwooのプチ日本語訳載せたいんだけどここに書いていい?
0598nobodyさん2010/09/29(水) 14:48:53ID:???
いいよ
0599nobodyさん2010/09/30(木) 00:12:24ID:???
assign テンプレート変数を割り当てる
capitalize 変数内の全ての単語の先頭を大文字にする
cat 与えられた変数に値を連結する
count_characters 文字数をカウントする
count_paragraphs 段落数をカウントする
count_sentences 文の数をカウント(日本語の「。」は未対応なのでcount_sentences.phpをカスタマイズする必要がある)
count_words 単語数をカウントする
counter カウントした回数を表示する
cycle 値の設定に従って循環する
date_format 与えられた フォーマット文字列によりフォーマットし、日付文字列を返す
default 変数のデフォルト値を設定
do
dump 変数に関する情報をダンプする
escape 文字列をエスケープする
eval 文字列をコードとして評価する
extends
fetch 指定したファイルを取得し、表示する
include 現在のテンプレートに他のテンプレートを挿入する
indent 各行で文字列をインデントする
isset 変数がセットされていること、そして NULL でないことを検査する
0600nobodyさん2010/09/30(木) 00:13:05ID:???
load_templates
lower 文字列を小文字に変換する
mailto メールアドレスのリンクを作成する
math 数学の計算を実行する
nl2br 改行文字の前にHTMLの改行タグを挿入する
optional 割り当てられてない変数が呼び出されたときにエラーを出さない (独自解釈)
regex_replace 正規表現による検索・置換
replace 文字列を置換する
reverse 逆順に並べる
safe optionalと同じ? (独自解釈)
spacify 文字間に特定の文字を挿入 (第一引数string $valueに日本語を含めると文字化けする)
string_format フォーマットされた文字列を返す
strip_tags 文字列からHTMLおよびPHPタグを取り除く
tif 三項演算子で評価する  (独自解釈)
truncate 指定した長さで文字列を切り捨てる
upper 文字列を大文字に変換する
whitespace (strip) 全ての空白文字を指定した文字列に置き換える
wordwrap 指定した長さでワードラップする

0601nobodyさん2010/09/30(木) 00:13:46ID:???
■Blocks
auto_escape ブロック内をエスケープする
block
capture タグの間のテンプレートの出力を集め、 それをブラウザに表示する代わりに変数に受け渡す
{* comments *} コメントの書式
dynamic
else
elseif
for
foreach
foreachelse
forelse
if
literal タグに囲まれたデータのブロックをリテラルとして認識させる
loop
strip 各行の最後にある空白文字・改行を削除する
template
textformat テキストを整形する
with

0602nobodyさん2010/09/30(木) 00:15:13ID:???
509-601までどぉおおおおお
ちなみに和訳じゃないので
0603nobodyさん2010/09/30(木) 00:16:34ID:???
おれがどぉおおおしても直したいのは↓
・出力時に行の終わりに半角スペースが入る
・spacifyの第一引数を日本語対応させる
・stripで全角スペースにも対応させる
0604nobodyさん2010/10/01(金) 15:55:38ID:???
safeの解釈がまったくあってないぞ。
0605nobodyさん2010/10/01(金) 16:18:05ID:???
>>604
じゃあ正しい解釈をここに書いて
どうぞ↓
0606nobodyさん2010/10/01(金) 16:22:32ID:???
セイフ
0607nobodyさん2010/10/01(金) 16:29:32ID:???
>>605
safe = 文字列の場合のみエスケープする
英語が理解出来ないなら、独自解釈する前にソースコードくらい読めよ・・・
0608nobodyさん2010/10/01(金) 16:46:07ID:???
>>564 = >>599だったりしないよな?
もしそうだったらガッカリだわ
0609nobodyさん2010/10/01(金) 16:52:28ID:???
>>605
引数への auto-escape を無効にする
0610nobodyさん2010/10/01(金) 16:52:58ID:???
翻訳してもらっといて、
間違うくらいならするな、っていうのは、ほんと日本人の粗探し大好き性格やわ。
プラス評価はしない。やって当たり前だから。
マイナスは3倍評価。ちょっとの間違いでもこれでもか、というくらいこき下ろす。

翻訳者乙。
0611nobodyさん2010/10/01(金) 16:58:28ID:???
>>599-601 が意味のある翻訳とは思えないが?何を評価して欲しいの?
構文の概要だけ(憶測で)翻訳されても、とっかかりにもなりゃしないよ。
0612nobodyさん2010/10/01(金) 17:03:13ID:???
国のトップがあれじゃあ国民もこうなるわなw
0613nobodyさん2010/10/01(金) 17:12:51ID:???
日本語は分からないけどソースには
* Marks the variable as safe and removes the auto-escape function, only useful if you turned auto-escaping on
* <pre>
* * var : the variable to pass through untouched
* </pre>
* This software is provided 'as-is', without any express or implied warranty.
* In no event will the authors be held liable for any damages arising from the use of this software.

と書かれている
>>607と>>609は正しいの?
0614nobodyさん2010/10/01(金) 17:21:48ID:???
>>607
>>609
>>613

function Dwoo_Plugin_safe_compile(Dwoo_Compiler $compiler, $var)
{
return preg_replace('#\(is_string\(\$tmp=(.+)\) \? htmlspecialchars\(\$tmp, ENT_QUOTES, \$this->charset\) : \$tmp\)#', '$1', $var);
}

コード見た限りではオートエスケープを削除でOKかと。
・・・にしても酷いコードだなコレw
0615nobodyさん2010/10/05(火) 00:55:13ID:???
Smartyってそれ自体がデザインパターンのアダプタらしいね。
そ い つ は す げ ぇ !
0616nobodyさん2010/10/05(火) 10:08:28ID:???
>>615
このスレがお前のくだらない人生の拠り所になってるということだけは分かった
何かツライことがあったらいつでも来ていいんだよ
0617nobodyさん2010/10/05(火) 18:16:04ID:???
良く他人に対してそんな言い分出来るな。どんな性格してるんだ
0618nobodyさん2010/10/05(火) 19:50:43ID:???
>>615 の粘着っぷりからすれば >>616 はお人好しすぎるレベル。
0619nobodyさん2010/10/05(火) 23:47:00ID:???
>>615
Smarty自体がアダプタとかまだ言ってんのか。
そんなわけねーだろ。バカじゃねーの?
0620nobodyさん2010/10/05(火) 23:52:51ID:???
アダプタ派とアダプタじゃない派の2つの意見を誰か分かりやすくまとめて
0621nobodyさん2010/10/06(水) 00:33:09ID:???
>>620
捕らえ方が違うだけ。

テンプレート構文とPHP(フレームワーク)を仲介する為のアダプタと考える事も出来るよね派(>>320)
と、それを否定する派がいる。
0622nobodyさん2010/10/06(水) 19:04:36ID:???
http://groups.google.com/group/smarty-developers/browse_thread/thread/7886237427ef767f
0623nobodyさん2010/10/07(木) 00:00:19ID:7XdpeleK
■C:/Apache/htdocs/templates/index.tpl
{$test}

■C:/Apache/htdocs/index.php
<?php
require('C:/Apache/htdocs/libs/Smarty.class.php');
$smarty = new Smarty();
$smarty->template_dir = 'C:/Apache/htdocs/templates/';
$smarty->compile_dir = 'C:/Apache/htdocs/templates_c/';
$smarty->config_dir = 'C:/Apache/htdocs/configs/';
$smarty->cache_dir = 'C:/Apache/htdocs/cache/';
$smarty->assign('test', 'Smarty Test');
$smarty->display('index.tpl');
?>
は表示できましたが
http://www.smarty.net/manual/ja/installing.smarty.extended.php
を参考に>>624のように書き直すとindex.tplが読み込まれなくてエラーになります

0624623 つづき2010/10/07(木) 00:01:02ID:7XdpeleK
index.phpの$smarty->displayを絶対パスで指定すると問題なく表示できます
setup.phpの$this->template_dirに設定した絶対パスは何度も確認したのですが合ってます
どなたかご教示お願いします。
■C:/Apache/htdocs/setup.php
<?php
require('C:/Apache/htdocs/libs/Smarty.class.php');
class Smarty_Test extends Smarty {
function Smarty_Test() {
$this->Smarty();
$this->template_dir = 'C:/Apache/htdocs/templates/';
$this->compile_dir = 'C:/Apache/htdocs/templates_c/';
$this->config_dir = 'C:/Apache/htdocs/configs/';
$this->cache_dir = 'C:/Apache/htdocs/cache/';
}
}
?>
■C:/Apache/htdocs/index.php
<?php
require('setup.php');
$smarty = new Smarty_Test();
$smarty->display('index.tpl');
?>
0625nobodyさん2010/10/07(木) 00:01:58ID:7XdpeleK
バージョンはsmarty3β4です
0626nobodyさん2010/10/07(木) 00:54:54ID:???
エラーメッセージは?
0627nobodyさん2010/10/07(木) 08:46:48ID:???
Smarty使う人って、基本的にフレームワーク使わないよね?
そもそもFWのビューがテンプレートエンジンっぽいし。
0628nobodyさん2010/10/07(木) 08:56:57ID:???
オレオレフレームワークにSmartyを取り込んだ。
0629nobodyさん2010/10/07(木) 10:03:34ID:???
それは俺もしてる。やっぱ、オレオレ向きだよな。
0630nobodyさん2010/10/07(木) 10:31:06ID:???
>>624
とくにコードは間違ってない
06316232010/10/10(日) 21:55:42ID:???
解決できなかったので正式版になってからにしました
0632nobodyさん2010/10/11(月) 00:59:58ID:???
>>631
623-624の質問自体釣りだと思ってたwww
エラーメッセージくらいだしたらどうだ?
06336232010/10/11(月) 10:00:47ID:???
PHP5.3
エラーはこうなりました
Fatal error: Uncaught exception 'SmartyException' with message 'Please use parent::__construct()
to call parent constuctor' in C:/Apache/htdocs/libs/Smarty.class.php:730
Stack trace: #0 C:/Apache/htdocs/setup.php(5): Smarty->__call('Smarty', Array)
#1 C:/Apache/htdocs/setup.php(5): Smarty_Test->Smarty() #2
C:/Apache/htdocs/index.php(1): Smarty_Test->Smarty_Test()
#3 {main} thrown in C:/Apache/htdocs/libs/Smarty.class.php on line 730
06346232010/10/11(月) 10:08:56ID:???
コンストラクタを使うことで解決しました
PHP5.3の場合のみなのかわかりませんがこう書くといいみたいでした

$this->Smarty();を
↓
parent::__construct();に書き直す
0635nobodyさん2010/10/11(月) 17:02:13ID:???
Windowsなんかでよくやるなぁ。
本番はどうせlinuxだろ?なら、開発もそっちでやったほうがいいような。
自分はPCのときはcoLinux使ってたが。
UnixなMacは生ローカルでできていい。
0636nobodyさん2010/10/11(月) 21:12:37ID:???
Mac(笑)
0637nobodyさん2010/10/11(月) 23:32:00ID:???
デスクトップ買ったらVPC上にLinuxを動かしたいのだ
0638nobodyさん2010/10/12(火) 04:24:47ID:???
テスト用に1個さくらvps借りとけばいい気がしてる
0639nobodyさん2010/10/12(火) 10:43:18ID:???
さくらvpsはガチ本番用です
0640nobodyさん2010/10/12(火) 10:50:08ID:???
レンタルサーバをテストに使うなクズ
0641nobodyさん2010/10/12(火) 11:24:13ID:???
物理サーバに対して2〜3なら暴走しても他に影響しないって言ってるし、なんか問題あるんだっけ?
0642nobodyさん2010/10/12(火) 13:14:45ID:???
暴走してもマジで影響ないのかな?
自宅鯖ですら影響あるのに。
0643nobodyさん2010/10/12(火) 13:15:45ID:???
テストはローカルでやるのが常識だろクズ
0644nobodyさん2010/10/12(火) 13:33:36ID:???
>>632
クラスやオブジェクトは苦手な人かな?
どうみても釣りには見えなかったが・・・
0645nobodyさん2010/10/12(火) 14:30:22ID:???
>>633
君はまずPHP5の基本を学ぶべき。
0646nobodyさん2010/10/12(火) 14:39:50ID:???
思った、PHP5のオブジェクト指向を分かってない人が多いよね
0647nobodyさん2010/10/12(火) 14:50:25ID:???
smartyの解説サイトがphp4の書き方で書いてるのが多いから
0648nobodyさん2010/10/12(火) 16:41:46ID:???
解説サイトはSmarty2が対象だからな
0649nobodyさん2010/10/12(火) 16:45:52ID:???
smartyの古い解説サイトは滅びるべき
0650nobodyさん2010/10/12(火) 19:26:46ID:???
いや、情報をまともに扱えない素人が滅びるべき
0651nobodyさん2010/10/12(火) 19:39:41ID:???
古い解説があるからまともに扱えないわけで
0652nobodyさん2010/10/12(火) 20:51:06ID:???
古いっつってもSmarty2を使いたい人には必要な情報だから・・・

Google検索で過去1年とか期間していすればいいんじゃないかね?
解説のせいにしてるのはただの情弱だよ。
0653nobodyさん2010/10/12(火) 21:08:00ID:???
くだらねー話題で顔真っ赤になってんじゃねーぞ
0654nobodyさん2010/10/25(月) 11:37:10ID:???
PHPのオブジェクト指向ってオブジェクト指向に徹しきれてないよね。
C#とかJavaと比べると
0655nobodyさん2010/10/25(月) 12:27:43ID:???
徹すると初心者が近寄れなくなるからな
で、Smartyと何の関係が?
0656nobodyさん2010/10/25(月) 13:54:51ID:???
いや、>>646がPHPのオブジェクト指向が分かってないねって
オブジェクト指向勉強するなら、Javaとかのほうがいいじゃんと思った
徹しても、徹してない今の状況でも初心者はオブジェクト指向でコード書かないっしょ
Smartyの話はしてない
0657nobodyさん2010/10/25(月) 15:17:12ID:???
OOPを理解出来るかどうかは、言語とはあまり関係無いかな。
Java使っても理解出来てない人はOOP出来ないから。
■ このスレッドは過去ログ倉庫に格納されています