【PHP】 Smarty 隔離スレ 【テンプレート】at PHP
【PHP】 Smarty 隔離スレ 【テンプレート】 - 暇つぶし2ch369:nobodyさん
09/01/02 22:04:07
>>368
URLリンク(www.smarty.net)

370:nobodyさん
09/01/02 23:18:35
>>369
横ですがこれのselectedって現在時刻じゃないですか?


371:nobodyさん
09/01/03 01:08:00
>>369
こんなのがあったんですね、ありがとうございました。

372:nobodyさん
09/01/04 08:20:15 S9BZj0MW
フォームで "><font="#fcc"> と入力したものを確認画面で見たいとき

{$name|escape} とすれば上記のとおり見れますよね。
これを、修正画面に持ち越したいときはどうしたらいいんでしょうか?

<input type="hidden" name="name" value="{$name}" /> だと確認画面で表示がおかしくなるし
<input type="hidden" name="name" value="{$name|escape}" /> だと修正画面の
inputの表示がおかしくなるし、、
ご意見よろしく御願いします

373:nobodyさん
09/01/04 08:53:47
セッション

374:nobodyさん
09/01/04 17:11:37
>>373
ありがとうございます 解決しました

375:モンピー77
09/01/05 09:16:41 mGW0zuF3
Smartyのテンプレート内の変数をサニタイズ化するのに下のようなことを
しているのですが

$o_smarty->default_modifiers = array( 'escape:"html"' );

配列にも適用させること可能なのでしょうか?

みなさん、Smartyを使った場合のサニタイズはどんな風にされていますか?



376:nobodyさん
09/01/05 11:59:56
>>375
default_modifires はクセがあるから気をつけたほうがよいよ。
{foreach}とか{assign}で変数弄ると二重にエスケープされちゃったり、配列入れるとエラー吐いたりする。

>Smartyを使った場合のサニタイズはどんな風にされていますか?
基本的には必要な箇所全てにescapeを書いてる。
上記踏まえて、面倒な事にならない場合だけ default_modifires 使ってる。

377:nobodyさん
09/01/07 10:21:31 nbhiW1pd
>>375
そもそもPHP側ですませておく。
なんのために分離してるのかと

378:nobodyさん
09/01/07 11:39:38
サニタイズはビュー側でもOKだと思うが。

379:nobodyさん
09/01/07 12:32:40
サニタイズ(笑)

380:nobodyさん
09/01/08 12:21:51
>>379(笑)

381:nobodyさん
09/01/08 13:16:48
ん?反論できなくて涙目?w

382:nobodyさん
09/01/08 14:37:59 /Ay52XkK
>>381
お前が暇人なだけだろw

383:nobodyさん
09/01/08 16:01:24
>>378
誰も不可とは言ってないと思うが

384:nobodyさん
09/01/08 16:03:12
>>382
必死だな

385:nobodyさん
09/01/09 02:14:26
>>383
>>377ではPHP側でやれと書いてあるようにしか読めないんだがww

必死すぎて恥ずかしいな。

386:nobodyさん
09/01/09 13:26:05 dxaSQaiQ
>>385
必死厨必死だな。

「みなさん、Smartyを使った場合のサニタイズはどんな風にされていますか?」
この意味わかるか?


387:nobodyさん
09/01/09 14:19:53
「サニタイジング」じゃねーの?

388:nobodyさん
09/01/10 01:02:19
>>386
スマン。日本語でお願い出来るか?

どういう意味で解釈したら
「そもそもPHP側ですませておく。なんのために分離してるのかと」
となるんだい?

389:nobodyさん
09/01/15 22:45:35 iReMhog8
smartyを設定したんだけど、ページが表示されません
assignもdisplayも動かないというか、それ以前に
templatesディレクトリの指定とかがうまくいってるのかがわからないです
そういう設定が今どうなっているのか、確認する方法はないでしょうか?
ちなみに今のsmarty.class.phpへの接続は以下のような形です

<?php
//テスト
require_once('Smarty.class.php');//これでSmarty.class.phpに繋がってることは確認済みです
class MySmarty extends Smarty{
function MySmarty(){
$this->Smarty();
$mydir = dirname(__FILE__);
$this->template_dir = $mydir."/templates/";
$this->compile_dir = $mydir."/templates_c/";
$this->config_dir = $mydir."/configs/";
$this->cache_dir = $mydir."/cache/";
$this->caching = 0;
}
}
?>

これを、各phpからrequireさせています

390:389
09/01/15 23:24:27 iReMhog8
>>389に書いたファイルをrequireした.phpで、

require_once('MySmarty.class.php');
//Smartyクラスのインスタンス作成
$smarty = new MySmarty();
echo "テンプレートディレクトリ:".$smarty->template_dir;

としたら、正しいパスを読み込みました
これはSmarty.class.phpも読み込み成功してるってことですよね?

どうしてdisplayしないんだろう。。
どなたかご意見ください
一つのディレクトリに複数の/smartyディレクトリが存在しちゃいけないとかの
理由はないですよね?

391:nobodyさん
09/01/15 23:29:20 iReMhog8
ごめんなさい、書き間違えです

×正しいパスを読み込みました
○正しいパスを出力しました

×一つのディレクトリに複数の…
○一つのサイトに複数の…

また、require_once()してるのが389のプログラムのファイルです(MySmarty.class.php)

392:nobodyさん
09/01/15 23:35:13
compile_dir,cache_dirへの書き込み権限はありますか?

393:nobodyさん
09/01/16 00:01:11 7rtqusgx
>>392
どうもです
パーミッションて奴ですよね? 700とか750で設定して試したんですがダメでした

そのものずばりで、displayに失敗してる、assignに失敗してる とはっきりわかる方法ないかなぁ

394:389
09/01/16 02:58:12
原因がわかりました! .tplに

<style type="text/css">
<![CDATA[
a:link{color:blue;}
a:focus{color:red}
a:visited{color:purple;}
]]>
</style>
という部分があったためでした。これを削除すると正常にdisplayされました。
念のため、この.tplのソースをコピペしてtest.htmlをつくり、それを直接開くと
どのブラウザでも確認できました
どうやら、Smartyと上の記述の組み合わせでのみエラーになるようです(理由はわからない)

このページは携帯用で、
<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "URLリンク(www.w3.org)">
<html xmlns="URLリンク(www.w3.org)" lang="ja" xml:lang="ja">
って感じにXML宣言のあるxhtmlだったんですが、この中では<!-- -->は使えないって言うので
上記の形(<![CDATA[ ]]>)にしたところエラーになりました

1)XML宣言
2)携帯用サイト(外部CSS使えない→1)のせいでコメントは<![CDATA[ ]]>にならざるを得ない)
3)Smarty
という組み合わせは実用不可能というお話でした

395:nobodyさん
09/01/16 06:34:07
>>394
URLリンク(www.phppro.jp)

396:nobodyさん
09/01/16 14:02:35
デリミタの変更はSmarty最初の課題。

397:nobodyさん
09/01/16 23:45:16
CSSは外部でいいやって思ってたけどこういう場合もあるんだな。
Smarty解釈をしないプレーンな{include}があってもいいんじゃないかという気がしてきたがあったっけ。

398:nobodyさん
09/01/19 11:16:42 RBlPIEnm
通常のHP案件でSmartyを常用していたのですが、
みんクエのようなRPGタイプのブラウザゲームを制作予定です。
常に値が変動して最新の情報を表示しないといけないケースで、
Smartyを使用するのはナンセンスでしょうか?

399:nobodyさん
09/01/19 11:19:59
ケースバイケース

400:nobodyさん
09/01/19 15:19:03
cache切っても充分使えるしな。
重要なのはメンテナンス性だな、かえってテンプレ化しづらい場合もあるし・・・


401:nobodyさん
09/01/20 18:40:01
PHP側で連想配列のキーにピリオドを含む使った

$foo['bar.baz']='hoge';

のような変数をSmarty側にassignした場合、
テンプレ側ではどういう表現をすればアクセスできるの?

{$foo[bar.baz]}

はだめだったんだけど、何か他の表現方法あるのかな?

402:nobodyさん
09/01/20 20:16:27
つマニュアル

403:nobodyさん
09/02/03 21:30:12
phpからdisplayしようとすると

Warning: preg_match() [function.preg-match]: Compilation failed: repeated subpattern is too long at offset 18454 in /usr/share/pear/Smarty/libs/Smarty_Compiler.class.php on line 454

Fatal error: Smarty error: [in main.tpl line 1]: syntax error: unrecognized tag: include file="header.tpl" (Smarty_Compiler.class.php, line 455) in /usr/share/pear/Smarty/libs/Smarty.class.php on line 1092

こんなエラーが出てしまうんですけども、原因を教えていただけないでしょうか。
ちなみにmain.tplの中身はこんなのです。

{{include file="header.tpl"}}
{{foreach from=$include_files item=file}}
{{include file="$file"}}
{{/foreach}}
{{include file="footer.tpl"}}

404:nobodyさん
09/02/03 21:32:58
なんで二重括弧なの?

405:nobodyさん
09/02/03 21:41:22
>>404

Smarty.class.phpを継承したクラスも使ってるので、本家との差別化のためです。

継承したほうは
$this->left_delimiter = '{{';
$this->right_delimiter = '}}';
を設定してあるので大丈夫だと思うんですけども。

ちなみに括弧ひとつにしても同じエラー出ます。

406:403
09/02/03 21:51:04
環境書き忘れました

CentOS 5.2 Kernel 2.6x
PHP 5.1.6

preg_matchでSmartyのタグ探して処理させてるから
タグ探しに失敗したSmartyがそんな命令ねーよって怒ってるんですかね。

407:nobodyさん
09/02/03 21:53:11
試してみたいから再現できるコード出してくれ

408:403
09/02/03 22:23:57
<?php

require_once('MySmarty.class.php'); //適当に書き換えてください
$mysmarty =& new MySmarty(); //適当に書き換えてください

$a = 'test';
$mysmarty->assign('test', $test);
$mysmarty->display('test.tpl');

?>

-----------------------------------------

{{$test}}

###こんな単純なコードさえエラー出ます###

409:403
09/02/03 22:24:52
間違えました^^;

<?php

require_once('MySmarty.class.php'); //適当に書き換えてください
$mysmarty =& new MySmarty(); //適当に書き換えてください

$a = 'test';
$mysmarty->assign('test', $a);
$mysmarty->display('test.tpl');

?>

410:nobodyさん
09/02/04 01:57:17
当然ながら私の環境では再現しません

411:403
09/02/04 19:44:57
既にSmartyが実働してるサーバからSmarty関連のファイルを引っ張ってきて
インストールしたら正常に動きました。
公式の最新バージョンはバグ有りなんですかね?
何はともあれ、お騒がせしました。

412:nobodyさん
09/02/04 22:30:27
自分の環境で試してくれる回答者放置とか最悪な質問者だな

413:403
09/02/05 07:13:36
大変失礼しました。
わざわざ確認していただき、ありがとうございます。
お礼?になるか分かりませんが、問題のあった方のSmartyをアップしておきます。
libsの中身を入れ替えるだけで多分再現できると思います。

URLリンク(www1.axfc.net)


414:nobodyさん
09/02/05 08:52:10
問題のあったファイルがお礼とかw

415:nobodyさん
09/03/03 15:33:16
値がある場合はstring_formatの%0.1,なかった場合は にしたいんだけど
{var|default:' '|string_format:'%0.1'}
だと値が無い場合には全て0.0になってしまうし、
{var|string_format:'%0.1'|default:' '}
だと値が無い場合にnoticeが出てしまって両立できないんだけど、
どうしたらいいかな?

416:nobodyさん
09/03/03 15:34:02
フォーマットのf抜けてた

417:nobodyさん
09/03/05 19:41:11
CakePHP1.2にSmartyView入れて使い始めてみたんだけど
$form->createに$optionsを引数で渡すと出力されないのは指定の仕方が悪いのかま?

{$form->create('Modelhoge', array('action'=>'Actionhoge'))}

モデルだけ指定すると出力されるんだが、、

418:nobodyさん
09/03/06 03:16:30
>415
register_modifier 使って関数自作すればいいんじゃない?

419:nobodyさん
09/03/12 20:22:12
昨日テンプレートエンジンというものを知って調べたが、こんなもん速度と品質犠牲に使う本気で奴バカすぎ。ヒアドキュメントで十分すぎ。

420:nobodyさん
09/03/13 10:39:43
そうだよ?

421:nobodyさん
09/03/13 10:48:04
PHP自体がテンプレートエンジンであり
速度と品質を犠牲に使うなんて馬鹿すぎと既にCとJavaプログラマに言われていることを
419は知らないのだった

422:nobodyさん
09/03/13 11:05:13
Smartyってめっちゃ便利やな!
PHP案件は全部これ使って開発してるぁるょ!

423:smarty初心者
09/03/16 14:02:13 UpVqDdxv
Fatal error: Call to a member function assign() on a non-object in・・・*.php on line 32
というエラーがでるのですが、どういう意味なのでしょうか?
教えてください。

424:nobodyさん
09/03/16 15:28:49
>>423
ggrks

425:nobodyさん
09/03/16 17:22:30
変数名が違うんだろ

426:nobodyさん
09/03/19 02:15:19
そのレベルだとSmartyどころかphp初心者だろ……

427:nobodyさん
09/04/12 10:19:11 tJ4UxLsE
ヤッターマン公式サイトはSmartyを使っているようだ。
URLリンク(www.ytv.co.jp)

428:nobodyさん
09/04/22 01:10:23 rBHnGmhI
Smartyのファイル名が
「%%45^45E^45E480CD%%index.tpl.php」

と言うふうになりますが、これはどういう規則性でこうなっているのでしょうか?
%%から%%は区切る為にあると思うし、元ファイル名は.phpの前に付いています。
しかし、それ以外の数字と記号の意味がわかりません。

429:nobodyさん
09/04/22 01:44:07
Smarty::_parse_resource_nameに書いてある

430:nobodyさん
09/04/23 02:53:59 ai/dLDOC
あいまい検索みたいな事って出来るのでしょうか?

例えば、test_file.phpというファイル名のファイルがあったとして
testで検索してもそのファイルがヒットするようにしたいのです。

opendirなどで指定ディレクトリを開いてファイルを1つずつ読み込み、
preg_matchなどの正規表現でファイル名を調べる方法もありますが、
もう少し短い手順で、簡単に調べられる方法はないでしょうか?

431:nobodyさん
09/04/23 02:55:05
430です。すみません、誤爆です・・。質問スレに書きます。


432:nobodyさん
09/05/03 08:41:04
template_cの中身を見たら
こんな変なファイルがありました
なんですか?
%%5A^5A2^5A201544%%test.tpl.php

433:nobodyさん
09/05/03 12:28:14
コンパイル後のテンプレートファイル

434:nobodyさん
09/05/03 14:56:11
なるほど
消しても問題なさそうですね?
ありがとうございます

435:nobodyさん
09/05/03 17:01:11
( ゚д゚)ポカーン

436:nobodyさん
09/05/04 18:34:03 bGJWbWfu
MTでPHPを使う部分にSmartyを使っているみたいなのですが、
MTのテンプレートを見ると <mt: >な独自タグを使っています。
Smartyで独自タグって定義できるのでしょうか?

437:nobodyさん
09/05/05 03:15:12
>>436
できる(`・ω・´)

438:nobodyさん
09/05/05 21:30:24
HTMLファイルだって定義するぐらいはできるんだぜ

439:nobodyさん
09/05/06 01:41:19 T5mYjMeP
>>437-438
どこの設定を変更したら出来るのですか?


440:nobodyさん
09/05/06 07:14:42
>>439
断る(`・ω・´)

441:nobodyさん
09/05/09 23:09:48
www.smarty.netにつながらないんだけど俺だけ?

442:nobodyさん
09/05/10 20:05:32
>>441
落ちてるね。こういうサイトはミラーが必要だとおもいまする。

443:nobodyさん
09/05/12 01:20:58
一生落ちてればいいと思う。

444:nobodyさん
09/05/13 11:19:30 Q3CLDrVp
{insert}
で指定する関数名に
クラスのメソッドを指定する方法はありませんか?

445:nobodyさん
09/05/13 13:46:20
クラスのメソッドを指定できる関数をつくればいいんじゃあ

446:nobodyさん
09/05/13 21:18:42
初心者で悪いんだが

--Hoge.php--------

class Hoge {
  var piyo;

  function Hoge() {
    $this->piyo = $_POST['some'];

    require_once 'view.tpl';
  }
}

--view.tpl---------

<p><?php echo $this->piyo; ?></p>


テンプレートとしての機能ってこれじゃ駄目なの?

447:nobodyさん
09/05/13 21:46:03
>>446
こういうセキュリティホールを量産する奴がいるから
テンプレートエンジンは必要

448:nobodyさん
09/05/14 00:07:02
>>447

イミフ

449:nobodyさん
09/05/14 02:00:08
POSTで送られたデータを無加工で出力するなって事だ
そりゃそうと、普通にメソッドコール出来たと思ったけど

450:nobodyさん
09/05/14 03:34:09
>>446
それでも問題無い場合もあるよ。
ケースバイケース。

複数人(特に外注)を使う場合は、記述方法の統一されたテンプレートエンジンをオススメだけどね・・・
PHPをテンプレートエンジンとして使う=テンプレートを扱う人にシステム全権限を与える。

善悪にかかわらず、不正なコードでシステムがクラッシュする可能性が増えるってこった。

451:nobodyさん
09/05/14 03:40:17
>>450
>>447

452:446
09/05/14 14:32:58
>>447
ああすまない、ロジックとビューを分ける際にって所を聞きたかったので
その他の所は適当に書いてしまった。
テンプレートエンジンってのはそういう所も自動でやってくれるの?


>>450
とても納得できたよありがとう。
これもケースバイケースだろうけど、PHPerって実務に携わる場合って
Smarty必須だったり「おっ、いいね!」的なアドバンテージになったりするのだろうか。。
個人的な見解で良いので、聞かせてくれると有り難い。


453:nobodyさん
09/05/14 14:45:29
Smartyならデフォルトで適用するフィルターを設置出来る
escapeを入れたら今回記述されたテンプレートでもちょっと安心

とりあえず、OpenPNEはやってた
興味があればソース眺めると良いかと

454:nobodyさん
09/05/14 17:49:28 A4v4Hdy/
>>453
質問なんですけど、ソース見て、それがsmarty経由でつくられてるものだって、
どこでわかるんですか?

見れるんなら見たいんですけど。

455:nobodyさん
09/05/14 18:51:12
HTMLソースじゃないぞ

456:nobodyさん
09/05/14 20:10:22
>455
smartyでいうところのコンパイルされていないファイルって、見れるんですか?
だとしたら他人事ではないんですけど。

457:nobodyさん
09/05/14 21:02:38
> それがsmarty経由でつくられてるもの

> それ
ってOpenPNEをさしてるの?OpenPNEはソースが配布されているけど

458:nobodyさん
09/05/14 21:26:13
>457
あ、そういうことでしたか。
そして、ダウンロードもしてみました。
他の人がつくったsmartyのテンプレートファイル初めてみた。
勉強になるな~

459:nobodyさん
09/05/14 21:49:19
どんな風に勉強になった?

460:nobodyさん
09/05/14 23:02:27
({ をデリミタタグとして使っているところとかです。

461:nobodyさん
09/05/16 17:50:14
MTもSmarty使っているから、参考になると思うよ。

ただ、OpenPNEの方がわかりやすいね。
なんか日本人的な書き方のような気がする

462:nobodyさん
09/05/22 09:35:19
Smartyの順序って
「PHPが苦手だからSmartyを使おう」
それとも
「PHPができるからSmartyでさらに上を目指そう」
のどっちなんですか?

わかる人からするとアホな質問かもしれませんが、
PHP初心者の自分には、どうしてもSmartyの役割がはっきりしなくて。

463:nobodyさん
09/05/22 10:07:23
SmartyはPHPの単なるライブラリだよ・・・?

464:nobodyさん
09/05/22 10:22:59
Smartyの用途はスレの上のほうで話題になってるじゃん
苦手だからとか上を目指そうとかそういう観点ではなく

465:462
09/05/22 11:11:41
>463,464
ご返答ありがとうございます。

スレも1から全部読みました。
そして、ここ数日ネットで調べまくったんですが、
どこも書いてあることは「デザインとプログラムを分離できるもの」ということで、
頭が悪すぎるのか、結局「smartyが何をしている」というのがわからずじまいでした。
そこで、書き込んでみたのです。

要は「工具セット」ってことですかね。
上の方で延々と行われた議論は
「使う工具(smartyの機能)なんか自分で作ればいい」派と
「始めからセット(smarty)であるんだから簡単で便利」派の言い争いって感じですか。

466:nobodyさん
09/05/22 11:43:37
smarty使ってMVCのviewを強化したい派(利便性高・コスト高)と
php自体にview的な要素が入ってるんだから重複は無駄だよ派(利便性中・コスト中)って感じでないかな


467:462
09/05/22 17:49:33
>>466

!('A')あ~
なんか少々モヤモヤが晴れてきました。
引き続き勉強します。

468:nobodyさん
09/05/23 20:37:34
Smartyを勉強し始めたのですが、
phpコードに書いた和文が文字化けしてしまいます。
テンプレートの和文は文字化けしません。

phpで$smarty->assign('name', 'みなさん');として
tplに「こんにちは、{$name}!」とすると、
htmlで「こんにちは、文字化け!」とでてしまうのです。

全部UTF-8で書いています。
サーバーはsixcoreをかりており、mbstringの設定はこうしています。
mbstring.language = Japanese
mbstring.internal_encoding = UTF-8
mbstring.http_input = pass
mbstring.http_output = UTF-8
mbstring.encoding_translation = Off
mbstring.detect_order = UTF-8,EUC-JP,SJIS,JIS,ASCII
mbstring.substitute_character = none;

今日一日中ググりまくっているんですが、どうしてもわかりません。
どなたかお助けください。おねがいします。

469:468
09/05/23 20:42:52
phpファイルだけがSJISになってました!
ほんとサーセンでした!!!

470:nobodyさん
09/05/23 21:22:40
「こんにちは、文字化け!」
はワラタ

471:nobodyさん
09/05/23 21:30:08
smartyのテンプレートに$hogeという配列が空じゃない場合の条件分岐処理を書きたいんですけど、
この書き方はおかしいのでしょうか

{if $hoge!==""}text{/if}

たまにif文が動かないのでおかしいと思うのですが

472:nobodyさん
09/05/23 22:28:46
smarty文法のばあい
===はあるけど!==はないんじゃないか?
マニュアルに記載されてないし

!($hoge==="")
に差し替えてみよう


473:nobodyさん
09/05/23 23:15:34
is_array() とかつかえなかったっけ?

474:nobodyさん
09/05/25 00:05:06
>>472
>>473

どちらも動作しました
ありがとうございます

475:nobodyさん
09/06/30 18:33:31 Cv5BCTzF
既存のソースをフレームワークを使って書き直したいんだけど、smartyは他のフレームワークと比べて
何か利点はありますか?それとも他のフレームワークを使った方がよいですか?

フレームワークを使い比べたことがある方、教えてください。

476:nobodyさん
09/06/30 21:29:17
フレームワークはMVC+αを担当するものとした場合、
SmartyはVのみを担当するテンプレートエンジンでしかない。

・既存のソース+Smarty
・他のフレームワーク+Smarty

という使い方が一般的です。

477:475
09/07/01 02:15:48 FWyhhBD1
>>476

簡単ながら簡潔な意見だと思います。ありがとうございます。

478:nobodyさん
09/07/01 18:56:06
どういたまして。

479:nobodyさん
09/07/06 17:48:50
Smartyも大きく言えば、関数ライブラリだからな。
HTML内にPHPコードを書いているのと変わらない。
(しかも、それを実現する為に複雑な処理をしているのでパフォが落ちる

でも、プログラマー以外がテンプレートを操作する環境なら凄い便利

480:nobodyさん
09/07/06 17:53:06
小さく言うと何?

481:nobodyさん
09/07/07 00:33:01
smarty乙php乙時代はC++俺はHTMLホームページビルダー

482:nobodyさん
09/07/07 03:43:16
<small>関数ライブラリ</small>

大事なことなので小さく言いました。

483:nobodyさん
09/07/07 04:18:14
>HTML内にPHPコードを書いているのと変わらない。

PHPコードを書かせない(制限する)為に、Smartyがあるわけだが。

>(しかも、それを実現する為に複雑な処理をしているのでパフォが落ちる

内部的にPHPに変換及びキャッシュを行うから、きっちり設定をすればパフォ的には気にとめる程じゃ無くね?
システム規模によるだろうけど、大抵は処理全体の1割未満のリソースしか食わんよ。

上手に導入出来れば開発が相当楽になるので、結果的にコストパフォーマンスは上がるしさ。


一度Smartyの設計思想を読む事をおすすめ。

484:nobodyさん
09/07/07 16:14:30
>>483
いやいや。そう言うことを言いたいんじゃないよ。
Smartyを覚えるならPHPも覚えなければいけないわけで、
フレームワークに使用するにはかなりの知識が必要だよ。
ってこと。475に対する意見として書いた。

あんたの言う「きっちり設定」する為には、それなりの知識や経験が必要だろ?
だから、経験がないと難しいって言いたかった。

485:nobodyさん
09/07/08 01:44:36
MVCでの開発経験があれば、Smartyが難しいと感じる事は無いと思う。
最適化に関しては経験が必要だが、導入までは相当楽な部類かと思うぞ。

486:nobodyさん
09/07/08 02:16:30
どの程度までCとVを分離すればいいの?

487:nobodyさん
09/07/08 05:06:10
ご自由に

488:nobodyさん
09/07/08 09:25:14
(1)
if ($nantoka) {
$str="yes";
} else {
$str="no";
}

result:{$str}

(2)
result:{if $nantoka}yes{else}no{/if}


489:196
09/07/08 09:25:17
Smarty信者はMVCフレームワークとテンプレートエンジンの区別もつかんのか

490:nobodyさん
09/07/08 09:30:04
>>476で回答済の話をなぜ蒸し返す

491:nobodyさん
09/07/08 10:06:46
>>487
もっと詳しく

492:nobodyさん
09/07/08 12:47:51
ココでMVCの話はお門違いだけど、一寸だけ口挟む。

> どの程度までCとVを分離すればいいの?

普通、MとCを何処まで分離すればイイの?という質問が多いと思う。
" CとV "と言ってしまう時点で、MVCがまるで判っていない印象。

MVCの中心にあるのは、C(コントローラ)
何故 C かと言えば、Webアプリのエントリーポイント(プログラムの着火点)は、アドレスであると考えたから。
どんな処理でも、まずそのスクリプトにブラウザでアクセスしないと何も起こらないという事実から、エントリーポイントをアドレスと考えた。

次に、このアドレスの扱いを拡張しようと考えた。

スクリプト名 / メソッド名 / 引数 ... って感じで、アドレスから処理を操ろうとした訳だ。

この時、上記の記述を実際の処理に落とし込むのが、C(コントローラ)の役割。
C は、受け取ったアドレスから、処理の出力先を M(モデル)にするか、V(ビュー)にするか判断するだけ...

ここから、Cは只単に処理を振り分けるだけと考えれば、おのずとMVCそれぞれの割り振りも判ってくるハズ




493:nobodyさん
09/07/08 12:53:19
>>492
じゃMとVはどう仕事を割り振ればいいの?

494:nobodyさん
09/07/08 12:59:50
M(モデル):サーバ処理専用。主にDBがらみの処理
V(ビュー):クライアント(ブラウザ)への画面表示処理専用。ブラウザに出力するものは全てココで処理。スマーティーはこの部類に入る

495:nobodyさん
09/07/08 13:11:42
でもMVCモデル自体がモデルなんだから要するにMVC全体でサーバ処理するってことなの?

496:nobodyさん
09/07/08 13:53:41
MVCにとらわれすぎると、逆に可読性下げるからなぁ…
目的では無く、あくまで手法なんだからケースバイケースに実装すればいいんじゃね?

使い回し不要のビジネスロジックなんかは、Cに実装しても良いかと。

497:nobodyさん
09/07/09 12:40:59
>>495
> でもMVCモデル自体がモデルなんだから要するにMVC全体でサーバ処理するってことなの?

MVCモデルのモデルは事例を示すモデル。Mのモデルとは意味が違う。
同音表記だから同じ意味とか思うなよ...大人だろ!


498:nobodyさん
09/07/09 12:46:29
>>496

確かに可読性は下がる。また、RoRが過ぎるとフレームワークのブラックボックス化が著しくなり、
背後でどんな処理がなされているのか、まるで判らなくなる。

当然、カスタマイズしにくい...

499:nobodyさん
09/07/10 17:05:35
MVCを意識する・理解するというのは大事だと思うんだが、
どうやってその理解を深める勉強をするの?
結局、自分でソースを書いて、良いか悪いか判断するしかないよね?

俺が書いているソースなんて、まるっきり駄目な部類かも知れないけど、
それでも目的通り動いているし、俺にとっては可読性はあってわかりやすい。
なら、それで良いのではないか?と思うんだけど、後で困るのだろうか

500:nobodyさん
09/07/10 17:06:18
お前は何を言ってるんだ

501:nobodyさん
09/07/10 17:19:26
「そこまでこだわるべきなのか」 ←言いたいこと
「でも、そこまで言うぐらいだから、こだわらないと困るのか」 ←疑問

502:nobodyさん
09/07/10 17:21:09
>>499
>>496に「とらわれすぎると」って書いてあるだろ、
場合によってはMVCの枠組みに落とし込む事がデメリットになるって話。

例えば、数行で済む使い回し不要のコードの為にモデルを量産すると
管理が面倒だし、他との依存関係が不透明になるからロジック変更の時に面倒だよね。
そういう場合はCなりに埋め込んでしまう方がいいんじゃね?

って話。

503:nobodyさん
09/07/10 18:13:16 aQw5S2vU
そんなのコメントしとけば依存関係は不透明にならんだろ。ただの怠慢でMVCのせいにすんな。

504:nobodyさん
09/07/10 18:17:06
コメントで他のコードのどこから参照されてるか、全て把握かつ保証出来るんだ?
503さん、まじパねぇっす!

505:nobodyさん
09/07/10 19:29:24
503さんはエスパーなんです!

506:nobodyさん
09/07/17 01:42:54
>>494
サーバ専用処理って。。。
逆にクライアント処理をPHPで書いてもらいたいな

507:nobodyさん
09/07/17 12:08:33
>>506
入力も出力もなく
サーバ内で完結する処理という意味だろうけどね。

508:nobodyさん
09/07/17 12:24:47
>>506

大丈夫か?
頭打ったろ!

ザックリした説明に一々噛み付く馬鹿!
夏はイロイロ湧いてくるなぁ


509:nobodyさん
09/07/17 19:58:03
自分の頭に無い解釈=不正解

だというプログラマーが多すぎです

510:nobodyさん
09/07/20 22:58:34 KgRJffi+
勘違いしていたかも知れないんだけど、Smarty自体がMVCフレームワークだよね?
Modelは関数の処理で
Viewの部分がdisplayやfetchでテンプレ表示で
Controllerが最初のクラス実行で

自作フレームワーク+Smartyを作ってるんだが、
考えたらMVCすべてSmartyだけでもいい気がしてきた

511:nobodyさん
09/07/20 23:16:35
それSmatyじゃなくて
PHP+Smartyじゃん

512:nobodyさん
09/07/20 23:28:34
まあ、あながち間違ってはいないがな。

513:nobodyさん
09/07/21 10:38:01
いや、間違ってるだろw
その理論だと世の中全てのPHPコードがMVC実装されてる事になる。

514:nobodyさん
09/07/21 10:47:00
いや、それは「PHPでMVCを書いた」って事で
Smartyみたいに元から実装されている分けじゃないんでは?

515:nobodyさん
09/07/22 00:47:18
Smartyhajimemasita

516:nobodyさん
09/07/22 08:22:08
Hello! Smarty

517:nobodyさん
09/07/24 20:52:45 kF0trrBu
で、お前らキャッシュ機能って使ってる?

518:nobodyさん
09/07/24 22:28:00
キャッシュって使うもんなの?
Smartyだと使わされるもんだと思ってたよ。

519:nobodyさん
09/07/24 22:42:57
>>518
コンパイル済みテンプレートとキャッシュを混同してるだろw


俺は使ってない。
本当にキャッシュが必要なページはrenderしたものを自前で静的htmlファイル生成化してるわ。
1時間に一回再生成するようなページで使えば楽んだろうけど、レアケースだよね。

520:nobodyさん
09/07/25 00:10:16
>>519
批判じゃなくて興味本位だが、
なぜSmartyのキャッシュじゃなくて、自前なの?
Smartyで同じ事出来るよね?

521:nobodyさん
09/07/25 01:34:19
キャッシュ使うとテンプレートの更新が反映されないんだが
更新したらキャッシュ切らないとだめなの?

522:519
09/07/25 05:09:32
>>520
Smartyのキャッシュって、
PHP呼び出し → Smartyインスタンス生成 → キャッシュ確認 → 出力
という処理が入るから、生成されたHTMLファイルに直接アクセスする場合と比べると負荷はかかるんだよね。

519にも書いたように定期的に自動で再生成するような場合は楽だけどさ。
自分のやってるシステムでは、管理者が任意のタイミングで再生成するのがほとんどだから、自前で実装している。

DBからのデータを差し込みつつ、出力をキャッシュするってページはあまり無いからなぁ…。

523:nobodyさん
09/07/25 11:35:37
>>521
テンプレートを更新したらキャッシュを削除するのが、
一番手っ取り早いし、確実だと思うよ。
>>522
なるほど。俺は、テンプレート(ヘッダーフッターなど)を
DBで管理しているんだが、
テンプレート内にもSmartyタグを使ってるから、
自前のキャッシュファイル生成だとそれらが反映されずに困るんだよな

524:nobodyさん
09/07/26 02:40:29
>>523
ん?DBから動的に書き出す(+Smartyタグを処理する)場合ってキャッシュは使えないよね?
コンパイル済みテンプレートの事?

俺の中では
キャッシュ … DBデータ等の差し込み済み出力結果を静的に保存する。
コンパイル済 … SmartyテンプレートをPHPコードとしてキャッシュする。
って定義なんだ。
これが正しいかはわからない。誰が偉い人まとめて!

525:nobodyさん
09/07/26 03:26:35
じゃDBデータがあるサイトの場合は
その都度キャッシュのon/offを切り替えて使えということ?
あるいはインスタンスを分けるとか?

526:nobodyさん
09/07/26 04:04:17
キャッシュするなキャッシュ自体に期限を設けるのが一般的かな、
毎回DBからデータを持ってくるのであれば、
それは事実上キャッシュは不可能。

コンパイル済テンプレートのキャッシュは常に有効にしておいて良いと思うよ。

527:nobodyさん
09/07/27 11:12:36
テンプレート自体をDBに格納してるって話じゃないの?

528:nobodyさん
09/07/27 11:30:56
え?

529:nobodyさん
09/07/27 12:48:51
へ?

530:nobodyさん
09/07/27 17:40:06
>>525 の意味がいまいちわからんのだが…
キャッシュの有効期限とかどうしてるの?
設定してあれば on / offしなくても自動でキャッシュ更新されるし、
設定していないのであれば、キャッシュは生成されないだろうし。

上にもある通り、キャッシュとコンパイル済テンプレートの認識が混ざってないかい?

531:nobodyさん
09/07/27 22:41:03
え?

532:nobodyさん
09/07/28 10:37:13
テンプレートってDBとかに格納しておけるの?
できるならすごい便利なんだが

533:nobodyさん
09/07/28 14:22:43
>>532
できなくはないでしょ

534:nobodyさん
09/07/28 15:09:38
>>532
Smartyヘルプのリソースプラグイン読んでごらん。
まんまDBからテンプレート取得するコード書いてあるから。

535:nobodyさん
09/07/28 16:09:45
できなくないのは分かるけど
いまいちどういう時に使いたいのかわからん。
ファイル名でマッピングしておくのと何が違うんだろ?

536:nobodyさん
09/07/28 17:56:09
>>535
updateコマンドで一括変更したり、日にちでサイトをガラッと変えたりするんじゃね

537:nobodyさん
09/07/28 20:41:09
>>535
CMSとか作る場合には良いんじゃないかね。
管理画面からの検索や更新、バックアップが取りやすい。
あとはWEBサーバが冗長化されていて、リソースを一箇所に纏めたい場合とかかね。


制作の手間暇考えたら、メリットは薄いと思うけど。

538:nobodyさん
09/07/29 22:00:38
>>535
ファイルをDBで管理すると、WEB上から更新できるならな。
しかし、複数アカウントを発行して利用するシステム(MTなど
の場合は、システム毎にテンプレートを編集できるので
ファイルで管理するより便利。メリットは絶大だと思う。

539:nobodyさん
09/07/30 00:20:18
いや、その用途なら普通にファイル編集orアップローダのが楽だろ…

540:nobodyさん
09/07/30 12:07:42
>>539
DB分かってる人ならDB使うのがラクだと思えるよ。
ファイルはすぐ腐る。

541:nobodyさん
09/07/30 12:13:33
少し腐ったぐらいが美味しい...

542:nobodyさん
09/07/30 12:16:56
ファイルは数が増えるとどんどん大変になるんだよな

543:nobodyさん
09/07/30 16:35:27
システム作る側は楽かもね。

デザイナの大半はローカル環境でコーディング、一括でアップロードを望んでいる。
またテンプレート自体がバージョン管理下に置かれている事も多々ある。
運営する上でDBに流し込み作業が発生するのは楽ではない。

544:nobodyさん
09/07/30 16:40:57
ディレクトリ分けもせずに700個のHTMLと格闘してる奴を見てるとホント馬鹿だと思えてくる

545:nobodyさん
09/07/30 17:12:18
そんな奴いねーよw

546:nobodyさん
09/07/30 18:40:48
700個のHTMLって時点でテンプレートを活かしてない感じが…

547:nobodyさん
09/07/30 18:50:56
テンプレどころかCSSすら使ってないんですわ、マジで。

548:nobodyさん
09/07/30 18:58:17
でも場末のウェブ制作屋ってほんとひどいからね。
ちょっとかじった中学生か、ってレベルのおっさんが
見てて頭痛くなってくるような非効率的な作業環境で、
素人騙して金貰ってるようなとこいっぱいあるぞ。

549:nobodyさん
09/07/30 21:03:15
>>543
流し込み作業をプログラムですれば良いだけだろ
一括アップロードと変わらん

550:nobodyさん
09/07/30 22:46:24
>>549
それやってしまうとファイル管理のメリットも、DB使うメリットも薄れてしまう気がするんだが。

551:nobodyさん
09/07/30 23:54:04
というかDBなんてある意味ファイル管理をラップしたようなもんだから
DBでできてファイル直弄りでできんことはないだろ。
せっかくキャッシュとか使ってるのに
変なとこでDB使うとパフォーマンスのボトルネックにもなりかねんし
DBじゃなきゃ開発コストパフォーマンスの点でよっぽど差がでる
って場合じゃなきゃ下手にDB化なんかせんよ。

そういう奴は画像ファイルとかもカラムに突っこんでるタイプだろ。

552:nobodyさん
09/07/31 00:03:20
どちらにしろデータとして記録するんだからファイルで置こうがDBに突っ込もうが大して変わらんだろ

553:nobodyさん
09/07/31 01:55:56
Smarty使って、DBではなくファイルで管理しているWEBアプリってあるか?


って思ったけど、OpenPNEがそうだな。追加で編集する場合はDB使うけど

554:nobodyさん
09/07/31 02:04:43
>>552
制作、運用、実行コスト、全てが大きく変わるわw

検索するとか、システム一括で何かしたいとか、特別な理由が無い限りDBにテンプレートつっこむのはナンセンス。

555:nobodyさん
09/07/31 02:43:31
ナンセンスってほどでも無いっしょ
ファイルシステムだって名称を唯一のキーとしたDBみたいな物だし

556:nobodyさん
09/07/31 03:11:10
PCのスペックが上がりまくったせいで、恐ろしいほどのヘマをしない限りは
DBで記録しようがファイルで置こうがボトルネックと呼べるレベルのものは出ない

むしろ、恐ろしいほどに数が増えて人的に整理が大変になったほうがボトルネック

557:nobodyさん
09/07/31 03:49:06
>>555
だからこそナンセンスなんだよw
ファイルシステムの実装はDBそのものなんだから、DBにつっこむ必要が無いものをつっこむ必要は無い。

>>556
にわかSEにありがちな発想ですね(^^
人的整理はDBやSmarty以前のバージョン管理、運用の問題。

558:nobodyさん
09/07/31 04:25:59
>>557
ほう、ではDBとFSで実装した場合の違いを定量的に示してくれ

559:nobodyさん
09/07/31 04:42:31
>>558
FSじゃなきゃ出来ない事、FSなら標準で出来る事は多々あるだろう。

 ・DBコネクション等の負荷が無い
 ・当然PHP側のコードもシンプル
 ・SVN等のバージョン管理システムが使える
 ・使い慣れたエディタで直接編集が可能
 ・使い慣れたソフトでアップロード/ダウンロード/バックアックも自由自在
 ・当然複雑な管理画面も不要になる為実装コストは激減

これらはFSなら特別な実装は不要。
君はDBで実装出来るか?

検索したいとか、DBサーバで集中管理したいとか、特別な要件が無い限りテンプレートのDB化はしない。

逆にDBを疑似ファイルシステムとして使うメリットとその実装コストを教えて欲しい。
オープン系CMSを引き合いに出すのであれば、同等の管理画面等を作るコストも入れてくれよな。

560:nobodyさん
09/07/31 05:22:21
定量的の意味知ってるか?

561:nobodyさん
09/07/31 05:56:21
定量的って言葉使いたいだけですか?w
>>559 に答えられたら答えてやんよ。

562:nobodyさん
09/07/31 10:54:30
まぁ、喧嘩するなや。
第三者からみたら、有益な討論してるように感じるんだから。

563:nobodyさん
09/07/31 11:13:51
>>561
低学歴乙

564:nobodyさん
09/07/31 11:35:24
>>562
有益かはともかくSmartyの議論ではなさそうだな。

565:nobodyさん
09/07/31 12:20:19
>>564
Smartyの使い方に関する議論だろ

566:nobodyさん
09/07/31 15:05:22
smartyってHTMLだけしか知らないデザイナーに読みやすくするためだけの技術だろ

567:nobodyさん
09/07/31 16:10:10
逆だと思うが。PHPを使えるプログラマー用の技術だろ。

568:nobodyさん
09/07/31 18:56:10
>>563
答えられない質問には煽る…典型的な厨ですね。

定量的も何も、FSの場合は >>559の 実装コストはほぼゼロ。
DBで作った場合のコストは?低学歴な僕には検討もつきません><おしえてください。

569:nobodyさん
09/07/31 19:46:53
>>568
俺も低学歴だけど頑張ってみる
XOOPSみたく、ベースはファイルで、そっからDB突っ込む奴で考えてみた


> ・DBコネクション等の負荷が無い
キャッシュファイル使えばテンプレ本体がDBにあっても関係ない

> ・当然PHP側のコードもシンプル
プラグインで済むから同じ

> ・SVN等のバージョン管理システムが使える
ベースのテンプレートをファイルにすれば同じ

> ・使い慣れたエディタで直接編集が可能
コピペすれば一緒かと

> ・使い慣れたソフトでアップロード/ダウンロード/バックアックも自由自在
phpMyAdminは使い慣れたソフトってことで

> ・当然複雑な管理画面も不要になる為実装コストは激減
テキストボックスで十分じゃん

> 同等の管理画面等を作るコストも入れてくれよな。
phpMyAdminで十分


テンプレートがDBに入ってて便利なのは、
出先とかでftp,シェルが使えない環境でもブラウザで更新出来るに尽きるんじゃないかと
頑張れば携帯でも更新出来るし。。。

570:nobodyさん
09/07/31 19:49:07
ファイル操作用のPHPコードと
DB操作用のSQLでは、後者の方が自由度高いと思うけどな

571:nobodyさん
09/07/31 20:49:32
>>568
煽ったのはお前だろカスが
最初に質問したのは俺だが何故答えないの?

572:nobodyさん
09/07/31 20:58:48
また「全部自分でやるから実行速度は早い」とかえらそうにしてる馬鹿が騒いでるのか

573:nobodyさん
09/07/31 21:21:59
>>571
「俺だが」ってIDも出していない奴をどうやって判断する?
俺たちはエスパーじゃないぞ?

574:nobodyさん
09/07/31 23:21:12
>>569
> キャッシュファイル使えばテンプレ本体がDBにあっても関係ない
テンプレート更新確認の為に、DB接続されるよ。

> プラグインで済むから同じ
プラグイン作成、テストの工数がかかるよ。

> ベースのテンプレートをファイルにすれば同じ
一括でコミットしたり、指定リビジョンにロールバックしたい場合とか困るよね。

> コピペすれば一緒かと
エディタで編集→管理画面を開く→コピペ→DBにコミット→確認が、直接編集と同じ手間と?

> phpMyAdminは使い慣れたソフトってことで
ファイルやディレクトリ単位での権限管理はどうするの?
例えば一時的にディレクトリ名を変えてバックアップ取りたい場合とか、運営者にSQLを書かせるの?

> テキストボックスで十分じゃん
見た目上はそうかもしれないが、内部実装は相応のコストがかかると思うよ。
複数ファイル同時に更新しなきゃいけない場合とかもあるしさ。

> phpMyAdminで十分
上に同じ。

> テンプレートがDBに入ってて便利なのは、
> 出先とかでftp,シェルが使えない環境でもブラウザで更新出来るに尽きるんじゃないかと
> 頑張れば携帯でも更新出来るし。。。
これはDBかFSかは関係無くね?制作者的にはSQL回す方が楽ではあるだろうけど。

>>571
>>568 で答えてるよ。FSならコストゼロ、DB実装なら相応。要件次第。
高学歴の君に、DBで同等の実装をした場合のコストを教えて欲しいな。

575:nobodyさん
09/08/01 01:20:41
だから、いちいち煽り入れるなって
お前がせっかく書いたレスも陳腐な物になるぞ

576:nobodyさん
09/08/01 23:36:43
>>571はどこいっちゃったの?

577:nobodyさん
09/08/02 01:41:46
お前がいい加減にしろ

578:nobodyさん
09/08/02 01:48:38
>>571はどこいっちゃったの?

579:nobodyさん
09/08/02 03:05:41
まぁ普通はDBを使うメリットなんて無いって事さ
DB憶えたての頃は俺も無闇にDB化したがったものだ

580:nobodyさん
09/08/03 01:13:56
じゃ、大手ポータルサイト(ブログとか)って
テンプレートをDBに入れずにファイルで読み書きしてるのかな?

581:nobodyさん
09/08/03 03:29:39
そんな極少数の大規模案件を例えに出されてもなぁ・・・
使ってるところは使ってるだろう(ハテナとか、スケーラビリティか何かを考慮してDBをファイル置き場に使ってるとか)

要件次第なんじゃない?
それなりの資金と開発期間があり、WEBベースで不特定多数が編集するシステム開発
とかだったらDB化した方が遙かに楽だろう。

582:nobodyさん
09/08/03 09:46:29
>>581
DB使うメリットないとか言っといて
結局要件しだいかよw


583:nobodyさん
09/08/03 10:57:19
>>581
つまり、結局は「DB化した方が遥かに楽」なケースが”ある”ということですね

584:nobodyさん
09/08/03 17:52:34
>>582-583
最初から『意味も無く』FSをDBに置き換えるのがナンセンスと書いてるじゃないかw

揚げ足取りはいいから、具体的なメリットデメリットを提示してくれよ、
大手が使ってるとか、Open系CMSが使ってるからでは話にならん。

585:nobodyさん
09/08/03 18:04:36
っていうか大手CMSサイトってPHP+Smartyなの?その時点でその話は破綻している。

586:nobodyさん
09/08/03 18:24:53


どちらも都合のいいように解釈しすぎで、この話はいつまで経っても平行線。

587:nobodyさん
09/08/03 18:59:14
平行線にすらなっていない。
DB厨がファビョっているだけだ。

588:nobodyさん
09/08/03 20:12:30
ファビョってるのはむしろお前だろ?1人で戦っているつもりだろうがw

589:nobodyさん
09/08/03 21:44:15
いちいち煽りに反応しなくていいからw 

とりあえず君のすばらしい経験談と、DB捌きっぷりをこのスレに轟かせれば、
もう少しましな流れになるんじゃないかな?

(^o^)でーたべーす は すごく すごい!・・・なぜなら、すごいから!
(^o^)でーたべーす の すごさがわからないやつは すごくない!

590:nobodyさん
09/08/03 22:23:10
「要件次第でDB使う」でみんな納得。
丸く納まってよかった。


591:nobodyさん
09/08/03 22:34:30
以下Smarty3を語るスレになりました。
開発ペース遅すぎるよね。

592:nobodyさん
09/08/04 00:10:08
htmltemplate.php で十分だしー

593:nobodyさん
09/08/04 00:13:10
>>590
すまんけどどういう要件ならDB、FSを使うべきかまとめてくれないか?

594:nobodyさん
09/08/04 01:04:56
>>593
大規模案件ならDB でいいんじゃないか。

595:nobodyさん
09/08/04 01:51:48
>>593
基本的にはFSじゃないかね。
DBは使う必要があれば使えばいい。
あまり思い浮かばないし、実例も聞かないけどね。

596:nobodyさん
09/08/04 02:01:18
すまん
結局>>581が結論でいいんじゃないかと言いたかった。

597:nobodyさん
09/08/04 09:05:44
OK


598:nobodyさん
09/08/04 11:09:38
>>591
ぜひ参画してくださいよ

599:nobodyさん
09/08/04 11:24:56
大規模案件にはJAVAという逆説。

600:nobodyさん
09/08/10 18:05:18 euq/7Zv+
すみません、質問です
テンプレートファイル内で、{php}~{/php}って形で、phpのプログラムを実行出来ますが、
この「~」の部分で、assignされた変数を操作することは出来ないでしょうか

{php}
//ここで{$name}の中身を変更したり、{$name}をキーにして画像を出力する関数を実行したい
{/php}

私の名前は{$name}です

こんな感じで…
よろしくお願いします。

601:nobodyさん
09/08/10 18:19:27
そのロジックはテンプレートじゃなくて、呼び出し元に書くべきでは・・・

やった事ないけど、Smartyインスタンスをなんらかの形で参照すれば出来るんじゃない?
グローバル変数にするとか、シングルトン使うとか、etc

602:nobodyさん
09/08/10 18:26:43 euq/7Zv+
>>601
ありがとうございます、やっぱり呼び出し元でやるべきなんでしょうか?
いまassignされて引き渡されるデータが配列一つなので、それを元にテンプレートでやった方がスマートなんですよね
呼び出し元で各値の条件分岐分やるとassign assign assign…とassignだらけになってしまうので
テンプレ長くする方が問題かなぁ

603:nobodyさん
09/08/10 18:35:23
>>602
もしかしてこんな感じで解決しない?

if(...) {
$a=1;
} else {
$a=2;
}
$smarty->assign('a',$a);


604:nobodyさん
09/08/10 18:43:35 euq/7Zv+
>>603
ありがとうございます、そうですねー、確かにassign段階で書くとそんな感じですよね
決めました。そうします。
テンプレかアクションかどっちかが絶対ゴチャゴチャするなら一緒ですねもう。
いや、テンプレ変更する時のデメリットの方が大きそうだし。。
アドバイスありがとうございました!

605:nobodyさん
09/08/10 19:16:08
>>604
条件分岐やるとassignが増えるってどういうこと?
配列をそのまま使えば?

606:nobodyさん
09/08/10 19:21:31
>テンプレかアクションかどっちかが絶対ゴチャゴチャするなら一緒ですねもう。
テンプレートとロジックの切り分けは、そのゴチャゴチャを纏める事にあるんだよw

アクションとテンプレ両方で値を編集しちゃうと、
どこでバグが発生したか突き止められなくなっちゃうでせう。

607:nobodyさん
09/08/10 19:38:15
>>605
例えば、入力任意のファックス番号とかあったとして、必須入力だったら確かにテンプレでは配列そのまま使って
FAX:{$ary.faxNum} で済むけど、必須じゃないんでその前段階のアクションで
if($ary['faxNum'];){$faxNum = $ary['faxNum'];}
else{$faxNum = "-";}
//assign処理
ってやる必要あるじゃないですか。それが嫌だったんですよ。
必須入力じゃない項目の数だけassignしまくらなきゃいけない。めんどくさいなぁと。
そこでphpかsmartyの構文で、テンプレの中で{if}とかしようと思ったんだけど…

でも、確かに>>606の言う通り、あっちこっちにまたがって値を編集しちゃダメですね。
smarty構文はデザインとか見た目(まさにテンプレート)を自動生成するためだけに使わなきゃなぁと
ようやく結論づきました。

608:nobodyさん
09/08/10 20:32:12
>>607
if(!isset($ary['faxNum'])) ($ary['faxNum'] = "-";

って書いて、$ary変数だけassignすればいいんじゃない?


その程度の表示分岐処理なら、テンプレート側でもOKかと思う。

{$ary.faxNum|default:"-"}

でいけない?

609:nobodyさん
09/08/10 20:50:18
値未入力であることを示すのに、何を表示するのかはview側の仕様だわな。

ひょっとしたら先々仕様変更で「入ってまへんで、へよへよ」と表示するようになるかもしれん。
そのとき内部データにそんな値(内容)入れたくないだろ?
608の後半みたいにテンプレ側でやった方がいいよ。

610:nobodyさん
09/08/10 22:51:30
>>608-609
うーん、そうか。
ケースバイケースでどうやるべきかじっくり考えてやってみるね
ありがとう

611:nobodyさん
09/08/10 23:13:31
度々申し訳ない
{if}--{/if}の中で、smarty変数を生成できないの? assignと同じことをしたいんだけど
{if $var eq "hoge"}
$newVar = "hogeでした";
{/if}
みたいな…

612:nobodyさん
09/08/10 23:15:44
assignでなんでだめなの?

613:nobodyさん
09/08/10 23:42:39
>>612
assignはphp側の処理ですよね、テンプレ側で値を割り当てたいので。。

614:nobodyさん
09/08/11 01:09:27
{assign} タグ使えば?

615:nobodyさん
09/08/11 03:32:24
>>614
ありがとう! こんなのがあったのか。助かりました!

616:nobodyさん
09/08/11 03:33:31
assignassign言うから当然テンプレート側のこと言ってると思ったら
assignタグすら知らんかったのか。

617:nobodyさん
09/08/11 12:14:27
だからphpタグなんぞで処理したかったのか・・・。

618:nobodyさん
09/08/12 05:56:44
$hogeAry = Array (
[0] => Array ( [id] => 7 [uId] => 10237 [uType] => hoge [photo_text] => 写真の説明1 [photoName] => galleryPic7 [photo_on] => 1 )
[1] => Array ( [id] => 9 [uId] => 10237 [uType] => hoge [photo_text] => 写真の説明2 [photoName] => galleryPic9 [photo_on] => 1 )
[2] => Array ( [id] => 10 [uId] => 10237 [uType] => hoge [photo_text] => 写真の説明4 [photoName] => galleryPic10 [photo_on] => 1 )
)

という配列があります。
これのphotoNameを引き出したくて以下のものを実行してますがうまくいきません。何が原因でしょうか?
{foreach from=$hogeAry item=varAry}
名前は:{$varAry.photoName}<br />
{/foreach}

{$hogeAry.0.photoName} なら、ちゃんとgalleryPic7が出力されます

619:nobodyさん
09/08/12 06:23:13
varAryの中を見てみたら?

620:nobodyさん
09/08/12 08:01:33
ループは回ってる?「名前は:」って文字は出力されてる?

{foreach from=$hogeAry item=varAry}
{foreach from=$varAry item=item key=key}
{$key}={$item}<br>
{/foreach}
{/foreach}

で中身表示テストしてみ。

621:nobodyさん
09/08/12 10:23:00 u9+iooGY
>>620
0=z
0=z
0=z
とだけ出力して終わってます。。ループ自体はしてるってことですよね?
なんでだろ? 配列じゃないのかな。
上で書いた配列は、以下の実行結果です。(zendFWを使った、クエリの結果)

function gallery($uType,$uId){
$table = $this->_config->table->gallery;
$stt = $this->_db->fetchAll("SELECT * FROM {$table} WHERE `uType`=? AND `uId`=? AND `photo_on`=1 ORDER BY `id` LIMIT 10", array($uType,$uId));
return $stt;
}

$this->view->hogeAry = $this->_db->gallery('spot',$uId);


622:nobodyさん
09/08/12 10:32:56
>>621
Smarty側に正常にassign出来てない可能性大。

1. hogeAryが正常な配列か確認。
var_dump($this->view->hogeAry);

2. hogeAryがSmartyにassignされてるか確認。

623:nobodyさん
09/08/12 11:18:13 u9+iooGY
>>622
var_dump($this->view->hogeAry); の結果は
$hogeAry = Array (
[0] => Array ( [id] => 7 [uId] => 10237 [uType] => hoge [photo_text] => 写真の説明1 [photoName] => galleryPic7 [photo_on] => 1 )
[1] => Array ( [id] => 9 [uId] => 10237 [uType] => hoge [photo_text] => 写真の説明2 [photoName] => galleryPic9 [photo_on] => 1 )
[2] => Array ( [id] => 10 [uId] => 10237 [uType] => hoge [photo_text] => 写真の説明4 [photoName] => galleryPic10 [photo_on] => 1 )
)

.tplでの
{$hogeAry|@var_dump} の結果は
Array ( [0] => [1] => [2] => ) 1

{$hogeAry.0.photoName} の結果は
galleryPic7

ちゃんとテンプレートまでassignされてきてるってことですよね?
foreachだけがうまくいかないってことかなー

624:nobodyさん
09/08/12 11:41:14
619はシカトですかそうですか

625:nobodyさん
09/08/12 12:16:00 u9+iooGY
>>624
すみません、varAryの中身のチェックの方法がわからなかったもので。。

{foreach item=varAry from=$hogeAry}
{$varAry|@var_dump}<br />
{/foreach}
とりあえず思いつく限りで上記をやったら
string(0) ""
string(0) ""
string(0) ""
が返ってきます

{foreach item=varAry from=$hogeAry}
{$varAry.photoName}<br />
{/foreach}
だと何も返ってきません(改行3つだけです)

ほんとに済みませんでした

626:nobodyさん
09/08/12 12:34:49
原因切り分けてみたら?
本当にDBから値は取れてるのか、違う関数コールしてないか、
ただの配列なら表示できるのか、などなど。
可能だったら再現するコードも貼って。

627:nobodyさん
09/08/12 13:54:35
{debug} タグでassignされてる変数確認してみ。

628:nobodyさん
09/08/12 17:19:17 u9+iooGY
>>626-627
どうもありがとうございます
普通の配列なら大丈夫です。同じDBから同様の手続きで取得してるクエリ結果(通常の配列)があるんですが、
それはforeachで解析できています。
{debug}はdisplay形式じゃないとダメみたいで、僕のやり方がそうじゃないので動きませんでした。

それで、今ループ処理をsection形式で試してみたんですが、section なら二次元配列の処理大丈夫でした。(以下が動きました。)
{section name=varAry loop=$hogeAry}
{$smarty.section.counter.total}<br> (このカウンターは動きませんでした)
要素: {$hogeAry[varAry].id}<br>
要素: {$hogeAry[varAry].photoName}<br>
要素: {$hogeAry[varAry].photo_text}<br>
{/section}
とりあえず、お騒がせして申し訳なかったですが、foreachは諦めてこっちで極力対応したいです。

629:nobodyさん
09/08/13 16:40:28
結局原因は何なの?

630:nobodyさん
09/08/21 13:05:34 WhelcFIU
質問させてください。
テンプレート中の {$hoge}って変数に対してphpのクラス中のメソッドを実行するって可能でしょうか?
これまでは、php中で
$hoge=$instance->method($hoge1,引数1,引数2);
として、適切な値を返してたんですが、同じ事をテンプレートの中でやりたいと思います。
{$hogetext|nl2br}などでphp関数を実行できるのは知ってるんですが、調べたところメソッドの実行は
見つけられませんでした。無理なんでしょうか?
assign 前に実行すべき?

631:nobodyさん
09/08/21 14:42:48
修飾子プラグインの中でメソッド呼べばよいのでは

632:nobodyさん
09/08/21 18:37:07
>>631
どうもありがとうございます
修飾子プラグイン、知りませんでした! 勉強になります、ありがとう

633:nobodyさん
09/08/21 22:16:33
プラグインの中で他のプラグインの機能を呼び出すことってできますか?

634:nobodyさん
09/08/21 22:16:56
できるよ

635:nobodyさん
09/08/22 00:43:33 qs0RE9DR
修飾子プラグインの勉強始めたんですが、引数を2つもたせる方法がわかりません。
{$num}というsmarty変数に対して、

function smarty_modifier_NUMtoTEXT($num,$aryName){
 return $allAry[$aryName][$num];
}
というプラグインを実行したいんですがどう書いたら良いんでしょうか?
{NUMtoTEXT:$num:"boyAry"}とかやってみたんですがうまくいきません。

636:nobodyさん
09/08/22 00:59:28
>>635
URLリンク(www.smarty.net)

637:nobodyさん
09/08/22 05:08:49
>>634
kwsk

638:nobodyさん
09/08/22 12:26:11
>>637
ggrks

639:nobodyさん
09/08/22 23:19:02
>>636
返事遅れました。うまくいきました、ありがとう

640:nobodyさん
09/08/25 00:15:56
foreach だの sectionだのって、なんで素直にfor文用意してくれないんだろね
php用テンプレートなのにわざわざ特殊な書式だし、頭に入らなくてしょっちゅうマニュアル見てる
頭悪くて悲しいな

641:nobodyさん
09/08/25 06:09:04
>>640
Smarty3で追加される

642:nobodyさん
09/08/25 13:55:26
>>641
ほんとに? 情報ありがとう、気分が楽になったよw
そういう情報を仕入れる前向きさがないとイカンなぁ

643:nobodyさん
09/08/26 12:19:29
キャッシュしてできたファイルの中にSmartyタグって入れられないよね?

検索フォームがあったとして
<input name="keyword" type="text" value="{$smarty.post.keyword}">

として検索後にデフォルト値を入れてるんだけど、
キャッシュしたらこういう事が出来ないと思って。

644:nobodyさん
09/08/26 13:37:23
>>643
insertタグで出来るんじゃね?

あと検索結果画面だと思うけど、それってキャッシュするべきじゃなくね?w
するにしてもSmarty側でするもんじゃないと思う。

645:nobodyさん
09/08/26 14:37:50
そのキーワード毎にキャッシュしたいのならば、それをキャッシュIDにすれば。

646:nobodyさん
09/08/26 23:01:41
>>644-645
ページのサイドバーをキャッシュしているんだが、
その箇所に検索フォームやログインフォームが入っているんだよ。
確かにキャッシュするべきじゃないが、
部分毎にわかるとキャッシュする意味がないかな?とも思ったり。

やっぱり、設計に問題あるかも・・。

647:nobodyさん
09/08/28 14:54:05 45fY5t7E
サイドバーの質問が出てるので聞きます
dbの返り値次第でサイドバーのデザインが数パターンに変わる場合、smartyのif文で書き分けするしかないのかな?
正直{if}に限らず醜いんで多用したくないんですよね…

部分的にデザインパターンを読み込むなど、他の解決方法はないですか?

648:nobodyさん
09/08/28 15:03:05
コントローラ側で制御すれば?

649:nobodyさん
09/08/28 15:25:18
テンプレートを数パターン用意すれば?

650:nobodyさん
09/08/28 16:29:28 45fY5t7E
>>648-648
そうですね、それがいいですね
ありがとうございました

651:nobodyさん
09/08/28 16:30:15 45fY5t7E
>>648-649でした
ありがとう

652:nobodyさん
09/08/28 17:53:20 MIAE9vSw
Smartyテンプレif文条件式で、自作のSmartyプラグイン関数を
呼び出すことはできないのでしょうか?



653:nobodyさん
09/08/28 19:07:18
できるんじゃね?

654:nobodyさん
09/09/02 05:34:35 55UeyG/q
{assign}の中で、修飾子プラグインをvalueにもたせることできますか?

{assign var=uType value=$resultAry.uType|NumToText} みたいなことをしたいんですが
試してみてもタグがモロ出しになって修飾子が実行されてないようです。
仕様でしょうか?
書き方が変だとしたら、対処法を教えてください。よろしくお願いします。

655:nobodyさん
09/09/02 09:19:59
タグがモロ出し の意味がわからない。

656:nobodyさん
09/09/02 09:35:13
>>654
capture

657:nobodyさん
09/09/03 08:24:48
>>655,656
ありがとうございました

658:nobodyさん
09/09/06 21:25:22
負荷テストで調べたんだが、キャッシュって結構効いてるな
1000アクセスある場合を想定してテストしたんだが、
約10~15%ほどページの読み込みが早かった

659:nobodyさん
09/09/07 08:07:01
なにをいまさら・・

660:nobodyさん
09/09/07 22:10:32
>>659
まあ、実感するのはなかなか難しいからな。

661:nobodyさん
09/09/07 23:17:57 K7GASBY+
二次元配列を出力しようとすると、
Warning: htmlspecialchars() expects parameter 1 to be string, array given in パス modifier.escape.php on line 26
というエラーが出ます。
調べたところ、色々なサイトで同じ問題を扱ってるのを見つけました。
URLリンク(questionbox.jp.msn.com)
URLリンク(pcmemorogu.blog14.fc2.com) など

が、これらでの答えの通り、FOREACHする配列全てに $ary|smarty:nodefaults としてみたんですが
まだ完全に上記のエラーが消えません。
他にどんな可能性があるでしょうか?
配列だけでなく、通常のassignされた変数に対しても文字列でなければセットすべきなのでしょうか?
とりあえずやっていますが、変化がありません

662:nobodyさん
09/09/07 23:25:11
アウトプットフィルタにhtmlspecialcharsが指定されてるんじゃないの?

つか二次元配列を出力しなければならない例が思いつかないけど

663:nobodyさん
09/09/07 23:49:42 K7GASBY+
>>662
ありがとうございます
すいません、お礼書きつつ修正重ねてたら上手くいきました
foreachやsectionの中の配列だけでなく、ifの条件節部分でも配列に対しては|smarty:nodefaultsする必要があったようです。

if($testAry|count >0) を
if($testAry||smarty:nodefaults|count >0) にしたら治りました

お騒がせしました。ありがとうございました

664:nobodyさん
09/09/08 00:19:32
modifier.escape.phpを修正する方が早いよ

665:nobodyさん
09/09/08 00:25:48 qSoCHGpf
>>664さんはそうしてますか?
どう修正したらいいのやら、、と、調べたらありました。

URLリンク(blog.asial.co.jp)
-----
# function smarty_modifier_escape($string, $esc_type = 'html', $char_set = 'ISO-8859-1')
# {
# // 配列が渡ってきたら何もせずにreturn
# if (is_array($string)) return $string;
# switch ($esc_type) {
# case 'html':

たしかにこれでよさそう。
664さんが別の方法で対応してるなら教えてもらえると嬉しいです。比べつつ勉強したいので。
自分で弄る自信はまだないんですよね、知らないところで悪影響でそうで…

666:nobodyさん
09/09/08 00:43:09
>>665
if (is_array($string)) return $string; 
で運用してるけど特に問題は無いよ。
配列が来た場合は、全ての要素を再帰的に処理するとかも試したけど、何か不都合があって止めた記憶・・・。

plugins_fix ディレクトリを作り、modifier.escape.php をコピーして修正を施す。
$smarty->plugins_dirの先頭にplugins_fixディレクトリを追加する。
って方法で修正を当てている。
default_modifiers使うと{debug}にも影響が出るから、同様に修正を当てたファイルをplugins_fixディレクトリに置いてる。

667:nobodyさん
09/09/08 00:47:00 qSoCHGpf
>>666
詳しい説明ほんとにありがとうございました
debugってまだやったことないのでそっちはわからないですが、参考にさせてもらいます
ありがとうございました。

668:nobodyさん
09/09/20 18:33:32
だれか公式以外でsmartyダウンロードできるところ知らない?
クソ公式落ちまくっててDLできないんだけど
URLリンク(www.smarty.net)
だれかソースくらいは分散しとけって忠告してやれよ

669:nobodyさん
09/09/20 18:55:26
落とせるじゃん

670:nobodyさん
09/09/20 19:52:57
復旧した

671:nobodyさん
09/09/24 18:00:24
初心者なのであまり良く分からないのですが、テンプレートエンジンはSmarty以外に別のテンプレートも同時使用出来るのでしょうか?
JavaScriptのライブラリのように互いに干渉してしまったりするのでしょうか?

また、調べてみると、何かテンプレートを扱う為にはPHPを学んでいても1~数週間は馴れるまでかかると書いてありました
ですのでまず最初に一つテンプレートを使用してみようと思っているのですが、やはりSmartyが一番良いのでしょうか?

672:nobodyさん
09/09/24 18:07:40
まずテンプレート抜きでPHPを身に付けたほうがいいかと

673:nobodyさん
09/09/25 14:31:20
SmartyってPHP習得した後にやろうとするとハッキリ言って困惑するよな
何だコレ?って感じ
今までPHP学習してきたのってあんま意味無いじゃんって思ったよ
例えばforeachとかさ
HTML?っても最初思った



674:nobodyさん
09/09/25 14:34:03
PHP習得した後にやらないでいつやるんだよ

675:nobodyさん
09/09/25 15:24:47
誰もが通る道さ・・・
それを不毛と感じるか、テンプレートエンジンの利点に気がつけるかでPGとしての資質がわかる。

676:nobodyさん
09/09/25 15:39:52
いや普通につくればphpのforeachもsmartyのforeachも必要だろ。


677:nobodyさん
09/09/25 21:46:51
そういう事言ってるんじゃないだろ。

678:nobodyさん
09/09/25 21:47:21
じゃどういうことよ

679:nobodyさん
09/09/25 22:57:18
同じforeachでも書き方が違って、最初戸惑うってことだろ?

680:nobodyさん
09/09/25 22:59:20
えっ

681:nobodyさん
09/09/25 23:47:30
ちゅう

682:nobodyさん
09/09/26 02:10:40
Smarty 3 is almost here!
[24-Sep-2009] Yes, yes I know. The Smarty 3 beta is taking much longer than expected, but we wanted to be sure we had everything right.
Our preliminary performance tests are already showing us very promising speed improvements over Smarty 2 (2-5x on average), and we're not done! To recap,
Smarty 3 is a 100% rewrite from the ground up, and it is PHP 5 only. We will be getting a feature list up with the Beta, but let me give a quick summary:

683:nobodyさん
09/09/26 04:04:41
早くなるのはいいな。でも、100%書き直したとなると、いろいろ仕様変わってるのかな。

684:nobodyさん
09/09/26 09:50:48
100パー書き直したのと、仕様が変わるかどうかは直結しない話でしょう。
むしろ直結するのはバグ率。

685:nobodyさん
09/09/26 15:22:15
3触ったけどまだ重くて使い物にならないよ。パーサがまともになったせいだろうけど、レンダリングがかなり遅い。
まだかなりバギーだし仕様も固まり切ってないみたいだし、正式リリースは来年末くらいじゃね。

686:nobodyさん
09/09/28 02:57:25
>>684
直結はしないがPHP周辺ではよくある話だな。
関数を修正してみたら引数の書き方が変わったでござるの巻

687:nobodyさん
09/09/28 17:38:33
Smarty以外で他にいいテンプレートって何?

688:nobodyさん
09/09/28 19:12:27
>>687
URLリンク(www.mimoi.com)

689:nobodyさん
09/09/29 19:25:53
一応技術板なんだしせめてこのぐらいは・・・
URLリンク(www.j-tsugawa.com)

690:nobodyさん
09/09/29 19:36:34
プラスチックが乾いてて、持ち上げようとしただけで割れてしまいそうだ・・・

691:nobodyさん
09/10/01 12:03:22
流れ図記号は全部○を使っているのは俺だけだろうか。

692:nobodyさん
09/10/01 18:28:48 KASc2bqu
//PHP側
$list[0]["text"] = '{ImageBox file="test.jpg"}';

//テンプレート側
{foreach from=$list item="data"}
{$data.text}
{/foreach}

独自関数「ImageBox」で指定したファイルが表示されるようにしたいと思い、
配列をforeachで出力させようとしました。
しかし、{ImageBox}の箇所が変換されずにそのまま文字として出力されます。

指定方法が間違っているのでしょうか?
わかりづらいかと思いますが、アドバイスいただければ助かります。

693:nobodyさん
09/10/01 20:50:56
PHP側では展開されません。

694:nobodyさん
09/10/01 21:02:54
そりゃ$list[0]["text"]の内容を書き出してるだけだからな。

phpなら可変関数使うところだが
Smartyはプラグインで可変関数の実装を作らないとダメかも。

695:692
09/10/02 00:20:33
>>694
foreachで出力される時に、
変数内のSmarty関数も変換されると思ったのですが、
どうやら違うみたいなんですね・・。

プラグインで実装させるとか、難しそうだ・・・

696:nobodyさん
09/10/02 00:35:40
そのImageBOXで出力されるものを$out_ImageBOXとか変数に入れ込んでおけば?

697:柏アラフォーパパン& ◆.d6LNJ2fbM.9
09/10/02 15:06:34 bCUcRsfE
dsd

698:nobodyさん
09/10/03 17:55:56
文字列をテンプレート処理出来るメソッドでも作ればいいんじゃないかね。
$list[0]["text"] = $smarty->fetchFromString('{ImageBox file="test.jpg"}');

699:nobodyさん
09/10/03 17:57:12
$list[0]["text"] = 'test.jp';

{foreach from=$list item="data"}
{ImageBox file=`$data.text`}
{/foreach}

じゃ駄目なのか?

700:nobodyさん
09/10/03 18:51:58
よほど特殊な処理をさせたいのでなければ>>699に落ち着くと思う。
まあそういうのはやはりPHPでやるべきだろうな。
smartyは最終出力だけにしておこう。


701:692
09/10/04 00:06:35
>>699-700
その方法だと$listに必ず「ImageBox」が無いと駄目です。
ブログみたいに他のタグも挿入したい場合使えないので、
変数(というか配列に入れた値)に、Smartyタグを入れる事を思いつきました。

それで698さんが掻かれているようなプラグインを作って
一旦Smartyタグを処理させてから配列に入れれば、
foreachで出力しても表示されます。
しかし、当然ながらコンパイルファイルが作成されるので
その分ページの生成に時間がかかることになってしまいました・・。
(キャッシュを使えば良いだけですが、なんか気になりました

702:692
09/10/04 00:08:43
ちなみに以下のサイトを参考にしました。
URLリンク(d.hatena.ne.jp)

>>698さんのソースを頼りに検索したらヒットしました。
凄く参考になりました。ありがとうございます。


703:nobodyさん
09/10/11 13:15:33 gYB28ahJ
すみません、質問です
smartyで{if}の中で出力したりすると、このsmartyタグのせいで発生した改行やらスペースやらが
HTMLにもモロに出てしまって美しくありません
どうにかする方法ないでしょうか?

704:nobodyさん
09/10/11 14:25:24
{strip}{/strip}
で囲うべし。

705:nobodyさん
09/10/11 15:23:00
>>704
かっこわるいです。次の方お願いします。

706:nobodyさん
09/10/11 15:43:55
反論ではないけど、
おれはHTMLの頭から終わりまでstripで囲ってるよ。
改行、空白によるブラウザの変なバグにも遭遇しないし、
何より若干ではあるものの軽くなる。
かっこいいかどうかで言えば、おれは改行なしのほうがかっこいいと思う。

707:nobodyさん
09/10/11 16:11:57
意図した改行を入れたい場合はどうしてるん?
<textarea>の中身とか

708:nobodyさん
09/10/11 17:59:26
>>704
おおー、そうだそれがありました
ありがとうございました

>>707
<textarea><$hoge|nl2br></textarea>じゃ対処できないもの?

709:nobodyさん
09/10/11 18:22:54
改行を残したい箇所を
逆にliteralで囲う。

710:nobodyさん
09/10/12 00:52:20
JavaScriptとか、改行に意味を持つ言語が混在する可能性を考えると一括して{strip}するのは得策じゃない気がする。

711:nobodyさん
09/10/13 01:13:00
>>703
そこまで気にするなら
{if}
{assign var="hoge"}
{else}
{assign var="hoge"}
{/if}
<textarea>
{$hoge}
</textarea>

712:nobodyさん
09/10/13 23:52:48 B+0jNtpm
Smarty3期待アゲ

713:nobodyさん
09/10/14 00:10:46 k/3ZY/k4
質問です。

↓の、アンパサンドって何の意味があるのでしょうか?

$smarty =& new Smarty;




714:nobodyさん
09/10/14 00:27:06
参照代入

715:nobodyさん
09/10/14 00:36:04
>>713
ないよ。

PHP4でも5でもnewはリファレンスを返すんだけど、
PHP5でそれが明言されるまではnewを=するとnewなオブジェクトがコピーされるという迷信があった。
だから=&と書いてるところがたまにあるけど、Smartyマニュアルでも普通に=だ。
要するに、単なる誤解が生んだもの。

716:nobodyさん
09/10/14 00:47:30
>>715
ほんとに? 俺も参照代入だよって説明どこかで読んだなぁ
あの解説ウソついたのかしら?

717:nobodyさん
09/10/14 01:06:18
4なら意味あると思うが

718:nobodyさん
09/10/14 01:30:24
>>715
URLリンク(jp2.php.net)
どこでそんな嘘をきいたん?

ちなみに5でも代入で変数のコピーが行われるのは同じ。
違うのはオブジェクトのコピー時の内部動作がハッシュテーブルの複製から
オブジェクトの実体の参照カウンタ操作になっている点。(zvalの参照カウンタとは別ね)

719:nobodyさん
09/10/14 03:14:45
ちょっとコード書いて実験すればわかるだろ
俺面倒だからパスね

720:nobodyさん
09/10/15 18:15:01
みんなこんな曖昧なままに済ましてきたってことはあまり使ってない機能ってことかな
俺も使った覚えないわ、マニュアル本にも例なんてないし。損してるんだろうか。。

721:nobodyさん
09/10/16 11:58:47
オブジェクトのリファレンスか。
使い道が思いつかんでもないが実際に
使う場面ってそうそうなさそうな。


722:nobodyさん
09/10/20 06:10:16
Smarty 3だれか使ってみた??

723:nobodyさん
09/10/20 10:43:32
使ってみた

724:nobodyさん
09/10/21 00:53:52
Smarty3微妙だなぁ・・・相変わらず癖の強いコーディングで読むの疲れる。
extendリソースがあるんだけど、使い方解る人いる?

725:nobodyさん
09/10/21 10:25:55
結局Smartyなんてassign、display、{if}、{foreach}だけで十分じゃん
というかコレが核だと思う
後は必要に応じて・・・って感じで十分だし

726:nobodyさん
09/10/21 10:59:25
Smarty3のプラグインは何故グローバル関数なんだろ?
どこら変がPHP5 OOPなんだよ

727:nobodyさん
09/10/21 22:34:20
プロパティもメソッドも全部publicは鬼だ
一方、__callでメソッドの外部化をしてる

extendリソースってどれ??

728:nobodyさん
09/10/22 01:31:12
>>727
sysplugins/internal.resource_extend.php
ソースコメント読む限りでは他テンプレートエンジンのextendっぽいんだけど、
リソースとして定義されてるので、どう使っていいかよくわからんw

getTemplateSource()読むと、超強引にblockタグとか置換してるみたいなのであまり有用ではなさそうだけど・・・('A`;
2から乗り換える利点がまだ見えないなぁ

729:nobodyさん
09/10/22 11:33:30
>>725
そんなこといったらPHPだって

730:nobodyさん
09/10/24 20:08:39
smarty使ってるレンタルブログサイトとかないの?

731:nobodyさん
09/10/25 04:49:32
>>730
あるとしてもユーザにSmartyフォーマットでのカスタマイズを許可するとは考えにくいな。

732:nobodyさん
09/10/25 08:28:37
>>730
別にsmartyに限らず、独自の記法などで対応してるところはある。
Smartyじゃないとダメなら自分で作ればいいジャマイカ。

733:nobodyさん
09/10/27 00:14:32
中身はsmartyだけど、smartyフォーマットは使わせないようにして
<%hogehogeLoop>と書いたら{section name=hoge loop=$id} になるように置換してるブログシステムはあるかもしれない
大体は自前でやってるか、MovableTypeの改造版じゃないかな

734:nobodyさん
09/10/27 12:20:20
>>725
それだけしか使わないならもっと速いテンプレートエンジンあるんじゃない?

735:nobodyさん
09/10/27 12:23:42
>>734
それなんてPHP?

736:nobodyさん
09/10/27 20:55:46
カラーミーショップ プロ
URLリンク(shop-pro.jp)

ブログじゃなくてネットショップだけど、テンプレートにsmarty使ってるね
EC CUBEの改造版なんだろうけど

737:nobodyさん
09/10/27 21:04:25
Smartyでレンタルブログ運営したら重くてしかたないんじゃない?
ユーザー大量にいたらキャッシュ効かせても厳しい気がする

738:nobodyさん
09/10/28 05:06:51
それは設計の問題であり、Smatyが原因にはなり得ない。

739:nobodyさん
09/10/28 11:11:33
Smartyの設計の問題ってことですね

740:nobodyさん
09/10/28 13:46:19
おしい。Smartyを使う人の設計の問題。

741:nobodyさん
09/10/28 15:26:33
>>737
気のせい

742:nobodyさん
09/10/29 11:06:44
いい話題がありませんねー

743:nobodyさん
09/10/29 21:54:28
gooブログの有料版の説明のとこにこんな記述がある
{include file="/home/gooblog/Smarty/blog/templates/comment_link.tpl"}

パスにSmarty入ってますがな

744:nobodyさん
09/10/30 22:56:36
実際にロジックとテンプレート合わせないとテンプレート側の文法の間違い分からないの?

745:nobodyさん
09/11/01 07:20:38 ZF01kyEW
Smarty 3.0 Beta 1 Released

746:nobodyさん
09/11/01 10:57:23
>>744
確かにできないな
まあ元々プログラマーと別環境で作業すること自体難しい気はするが。
>>745
モノリンガルの俺には厳しいようだ

747:nobodyさん
09/11/01 11:05:45
>>745
突撃してみるか

748:nobodyさん
09/11/09 13:54:09 jgJG5jOb
テンプレートに定義していないコード(例えば{test}など)がある場合、
Smarty errorが表示されます。

このエラーを表示しない方法はないのでしょうか?
PHPのエラー表示をしない事で対処するしかないのでしょうか?

749:nobodyさん
09/11/09 14:06:20
trigger_errorしてるところをスキップしちゃえば?

750:nobodyさん
09/11/09 20:59:58 I33d9sv+
$error_reporting
↑これ?

751:nobodyさん
09/11/11 19:01:43 0BFUpwQj
Smartyって、テンプレートの中にテンプレートを読み込むようなことできる?
ある変数の値によって、特定の領域の内容をかなりダイナミックにレイアウトごと変更させたいんだけど
変化のバリエーションがかなり多いんで{if}でパターン分け記述するのはあまり現実的じゃないんだよね

外部でhtmlとして整形したものを丸ごとコントローラでassignさせて飲み込ませるしかないかな?

752:nobodyさん
09/11/12 03:03:02
そのレベルも調べられないお前には無理だ。

753:nobodyさん
09/11/12 07:44:56 dv0ticwo
Smarty 3.0 Beta 2 Released

754:nobodyさん
09/11/12 11:31:04
>>752
おー、サンキューサンキュー♪
includeって機能があったんだね、この辺から調べてみるよ
たすかったわほんと、ありがとね

755:nobodyさん
09/11/12 12:04:54
test

756:754
09/11/12 19:22:51 SoSJwGM8
ごめん、相談させて欲しい
hoge.tplに
{insert name="hogeAction" title="テスト" script="hoge_action.inc.php"}
って書いて、
同じディレクトリにあるhoge_action.inc.php に
<?php
function smarty_hogeAction($param, $smarty){
return 'あいうえお';
}
?>
って書いたんだけど「あいうえお」の出力がされない。
($param, $smarty)の引数を消して function smarty_hogeAction(){… とやってもダメだ。
何が問題かな? ご意見よろしくお願いします

757:nobodyさん
09/11/12 19:58:44
書き間違えた
× smarty_hogeAction
○ insert_hogeAction
でやってます

758:756
09/11/12 22:52:47
どうも、自己解決しました。
お騒がせしました

759:nobodyさん
09/11/13 13:18:08
どういう解決方法?

760:756
09/11/13 14:36:48
勘違いしてたというか参考にしてたページがわかりにくかったというか、
要するに
.tplでの記述は {insert name="hogeAction"}
スクリプトファイルは insert.hogeAction.php
ファイルの格納場所は /pluginsディレクトリ
として入れてりゃ良いだけの話だった。自前modifierとかわらんかった。
insertタグのscript属性とかなくても良いものを必須みたいに書いてたり、
関数名(function insert_hogeAction(-,-){-})を嘘書いてるサイトみて
変なことやりまくってたよ。恥。

761:nobodyさん
09/11/13 14:58:34
公式マニュアル見ればよかったのにね

762:756
09/11/13 15:11:57
>>761
うん、公式がイマイチわからなくて他のサイトみてたらハマっちゃって。
今また公式見返してるけどやっぱりよくわからない
URLリンク(www.smarty.net)
「{insert} 関数の名前は、 ネームスペースの衝突を避けるために "insert_" によって始まる必要があります。」
ってあるけど、それじゃ上手くいかなくて
smarty_insert_hogeAction() って形でやっと上手くいったからなぁ…

こっちの方が公式よりわかりやすかった、俺が物わかり悪いんだろうけど
URLリンク(www.y2sunlight.com)

763:nobodyさん
09/11/13 15:22:56
そりゃプラグインとしてファイルを自動読み込みさせてるからだ
URLリンク(www.smarty.net)
>PHP ファイル内で定義する プラグイン関数 は次のように指定します。
>smarty_type_name()


764:756
09/11/13 16:02:41
>>763
そうなの。おおお、疑問の本質に近づいてきた、質問させて。
じゃあsmarty_insert_xxx じゃなくて insert_xxx()ってのはプラグイン(別ファイル自動読み込み)じゃないのか。
そもそもinsert_xxx()ってどこに書くの?
$smarty->assign("msg","hello"); みたいな処理を書いてるコントローラ?の.php?
それがわからなくてあっちこっち見る迷走がスタートしたんだ

765:nobodyさん
09/11/13 16:19:30
偉そうなので教えん

766:nobodyさん
09/11/13 20:01:32
自分で試せばいいのに。

767:nobodyさん
09/11/14 14:51:09
キャッシュ効かせても速度あんまり変わらなくね?なんなのこれ

768:nobodyさん
09/11/14 19:37:58
下記のように、フォームでエラーがあればp要素を表示、なければ何も表示しない場合、
みなさんは、どこまで、どんな方法でテンプレートを利用していますか?
<p class="error">※必須項目です。記入してください。</p>
<p><input type="text" name="mail" value=""></p>

1. エラーメッセージは最初からpでマークアップ済み、そのままassign、smartyには{}のみ
{$errors.mail}

2. エラーメッセージはテキスト、assign時に空欄かどうか判定してpでマークアップ、smartyには{}のみ
{$errors.mail}

3. $errorsにはテキスト、そのままassign、smartyで{if}処理
{if $errors.mail}<p class="error">{$errors.mail}</p>{/if}

4. $errorsにはテキスト、そのままassign、smartyで関数処理
{$errors.mail|markupFunction}

デザイナさんと分業する場合、
プログラム側がマークアップに関わらない3.が一番いい気がしているのですが、
少しテンプレートファイルが煩雑になるのが気になったりもします。

エラーメッセージマークアップ用の小さなテンプレートファイルを作っておいて、
4.のmarkupFunctionから読み出して利用すると比較的キレイな気もしますが、
テンプレートファイルが小分けになるのも煩雑といえば煩雑な気もします。

769:nobodyさん
09/11/15 03:44:59
>>767
Apacheの連続アクセステストしたけど、アクセス回数が多ければ多いほど
キャッシュの効果は効いたよ。ただし、1.2~3倍速くなる程度だけど。
>>768
ブログのテンプレみたいなのを作ってるが、3が一番良いよ。
MTなんかもそうだし。

770:nobodyさん
09/11/15 07:22:36
自分はクラスだけでやってる。

エラーは常に埋め込まれ、CSSで非表示にしておく。もしエラーなら親要素にerrorというクラスを与えて、その子要素のエラーを表示するCSSを書いておく。

div p{ display:none }
div.error p{ display:block }

これでエラー時のテキストもデザイナー側で書ける。

親要素は
<div class='{$error.title}'>
って感じで、タイトル項目がエラーなら error.title に 'error' を assign しておくだけ。

771:潔癖プログラマ
09/11/15 10:24:50
>>769
やはり3.ですか。

ただその場合
$errors.mailに値があればいいんですけど、
値がなくifがfalseになると、その行末の改行が無視されて
次の行のインデントが崩れちゃうのが気になります。
{/if}のあとに空白1文字入れとくと回避できますが、
「よろしくないテクニック」っぽくて好きになれません。
>>703でも話題にでていたようですが、
このsmartyの仕様は気に入りません(苦笑)。

{if $errors.mail}
    <p class="error">{$errors.mail}</p>
{/if}

こんな感じで3行使うのがいまのところ最善か。
テンプレートファイルがますます煩雑に…(苦笑)。


>>770
CSSのdisplayだけで制御するのは、
自分も一瞬頭をよぎったことはありますが、
やはり気持ちが悪いですごめんなさい。

あとエラー時のテキストが「入力内容をご確認ください」程度ならいいけど、
「メールアドレスが正しくありません」
「必須入力項目です」
「文字数が多すぎます」
とか丁寧に表示してあげる場合に対応しにくい気がします。

772:nobodyさん
09/11/15 21:24:49
>>770
CSS切っている環境とか携帯対応を考えた場合は向かない仕様だな

773:nobodyさん
09/11/15 22:48:09
んなもん、{$err} にしといて、
errに <p class="error">エラーメッセージ</p> ぶち込みだわ。

774:nobodyさん
09/11/16 00:55:30
>>768
汎用性やら考えると3じゃないかな。
他の方法だと、特定箇所だけ見た目を変えたい時にデザイナ側で対応しにくい気がする。
テンプレートを関数もどきとして使うような方法もありかもしれない。

// エラー表示箇所
{include file="error.tpl" error=$errors.mail}

// エラー表示テンプレート error.tpl
{if $error}
<p class="error">{$error}</p>
{/if}

775:潔癖プログラマ
09/11/16 09:18:08
>>774
なるほど。4.の別解のような感じですが、
それだとincludeするテンプレファイルまでデザイナさんに任せられるので、
複数パターンのテンプレファイルが用意できたり汎用性が高そうですね。

図らずも(?)、{if}による改行問題も、
別ファイルに追い出すことで解決できてるし、
なかなか良いかもしれません。

776:nobodyさん
09/11/16 12:51:37 tubifOLG
Smartyは遅いって意見ありますが、体感レベルで明らかに遅いですか?
1秒2秒遅くなった経験がある人いるんでしょうか?

777:nobodyさん
09/11/16 23:39:48
そんなに遅くないよ。
「遅い」って感じるのは鯖が悪いんだろ

778:nobodyさん
09/11/17 02:12:17
>>776
古いサーバPC上でキャッシュを無効にして使っても、0.001秒の処理が0.002秒になる程度。
数値的には2倍だが、体感的にはまずわからない。

素のPHPコードに比べたら遅いと言えるが、
個人的にはメリットの方が桁違いに上かな。

779:nobodyさん
09/11/17 02:16:05
>>777,778
よかったー。いかにもノロノロしてるような状態になるのかと思いました。
安心して作れます、ありがとう

780:nobodyさん
09/11/17 03:18:29
じゃキャッシュのメリットって何?って感じだな

781:nobodyさん
09/11/17 06:08:10
Smarty 3.0 Beta 3 Released
ペース早いな

782:nobodyさん
09/11/17 13:05:14
>>780
更新が少ないもしくは、更新タイミングが決っている場合にキャッシュ有効にすればいい。
大規模サイト用のチューニング項目だと思えばいいんじゃないかね。

783:nobodyさん
09/11/17 15:47:08
>>780
769にも書いたけど、負荷テストした時は効果合ったよ。
同時アクセス100とか1000の場合に。

784:nobodyさん
09/11/19 15:56:07
多数の他人に更新させる場合はキャッシュオフ?
掲示板とかね
有効にしといて書き込まれたタイミングでキャッシュ削除するのかな

785:nobodyさん
09/11/20 13:27:52
ぴーえちぴー5.3.0
りなくす

Smartyでテンプレートが無い場合に白い画面になっちゃうんで、エラーをハンドリングしたいんですけど出来ないでしょうか?
テンプレートがあるか判定なんてめんどーなことしないといけないんですかね?

786:nobodyさん
09/11/20 13:53:02
できるでしょ
そもそもfatal errorなり出るはず

787:nobodyさん
09/11/20 13:55:42
PHPのerror_reportingが0になってるとかじゃね?

788:nobodyさん
09/11/20 14:07:49 L1RHfQMx
try
{
$smarty->display($tpl);
}
catch
{
なんたら
}
みたいにやりたいです。
エラーレポ調べてみます。

789:nobodyさん
09/11/20 14:24:17 L1RHfQMx
error_reportingはnullのようです。ログに出して確認。
3に設定して見ましたが例外はキャッチできませんでした。3が間違いなんでしょうか?

>>786
それは戻り値として出るということですか?

790:nobodyさん
09/11/20 14:27:34
>>789
error_reporting(E_ALL);

791:nobodyさん
09/11/20 14:30:40
>>789
もしかしてxampp?

792:nobodyさん
09/11/20 14:32:43 L1RHfQMx
displayのソース見ましたが、エクセプションはスローされないようですね…
素直にtemplate_exist使いたいとおもいます。

>>786
voidですね。


793:nobodyさん
09/11/20 15:02:58
fatal error出るでしょに対する返答がvoidですとか謎い

794:nobodyさん
09/11/20 15:05:46 L1RHfQMx
display_errors = Off

display_errors = On
httpd restart

error_reporting(E_ALL);
try
{
$smarty->display($tpl);
}
catch
{
なんたら
}

>>791
XAMPPじゃないです。それぞれソースからいれました。

795:nobodyさん
09/11/20 15:09:05 L1RHfQMx
あ、794の結果はダメでした。同じ結果で白い画面になります。

>>793
789への自己レスです。


796:nobodyさん
09/11/20 15:12:27
ちょろっとググってみたらこんなんもあった

(2)Smartyのファイルを調べてみる
画面が真っ白になった原因として、Smartyのファイルが壊れていることがあるのです。
URLリンク(xoops-manual.net)


797:nobodyさん
09/11/20 15:14:35
>>794
テンプレートファイルが無かった場合に出るエラーは
Smarty.class.phpの1591行目くらいにある
$this->trigger_error('unable to read resource: "' . $params['resource_name'] . '"');
でしょ?

で、例外をスローさせるための案
1.当該箇所を書き換える
2.Smartyクラスを継承したMySmartyクラスを作って_fetch_resource_infoメソッドをオーバライドする
3.set_error_handler関数でwarningが発生した時に例外投げるようにする

xamppじゃないとのことなので真面目に答えてみました

798:nobodyさん
09/11/20 15:25:36 L1RHfQMx
>>797
おぉ、まさに欲しかった回答です。
ありがとうございます。
そのワーニングで間違いないです。

1…書き換えるのは好きじゃないです。
2…うーん、処理に悩みそうです。
3…これが簡単そうです。

ちょっとがんばってみます。
たすかります。

799:nobodyさん
09/11/21 10:25:34
fetchってどういうとき使うの?

800:nobodyさん
09/11/21 11:47:09
自動送信・返信メールの文面とか。

801:nobodyさん
09/11/21 13:04:20
>>800
ありがと、メールのテンプレか
就活してたときの毎ナビか何かの企業からメールに
『こんにちわ寒くなりましたね、{$username}さん』
とか、書いてあったのを思い出した

802:nobodyさん
09/11/21 15:18:41
>>798
普通は三番
サンプルは沢山見つかる

803:nobodyさん
09/11/26 11:34:27 tP8Fcb0C
しつもんです
parent.tpl中で、includeを使ってテンプレート化したヘッダを読み込ませたいと思ってるんですが
テンプレート(header.tpl)をページの種類に応じて動的に変更させたいときの手順がよくわからないです。
たとえば、動物の紹介ページでは動物の一覧を、自動車の紹介ページでは自動車の一覧をヘッダに表示したい時、
表示対象の画像や情報(動物写真/自動車写真、それぞれの名前情報など)は、includeタグの中に変数として
持ち込むしかないのでしょうか?

自分のイメージでは{include file='header.tpl' pageType='animal'}として、
変数値animalを受け手のテンプレで解釈してそれを元にDBから必要データを取得できたらいいなと思ったんですが。
(なるべく一カ所で取得プロセスを管理したいので)
そんなのは無理で、あらかじめ親のparent.tpl=parent.phpで必要データを取得して、
それをincludeに変数で渡すしかないという結論でいいのでしょうか?

今思いついた方法は、incudeタグ中の変数でpageType='animal'と渡して、それをheader.tplで
自前のmodifierに譲渡しそこから必要データ取得→出力の流れです。
もっとスマートなやり方ないでしょうか? アドバイスお願いします


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch