• ベストアンサー

【Smarty】foreach関数やsection関数のループを途中で終了させることはできますか?

Smarty初心者です。 環境は、 Smarty2.6.18 PHP5 レンタルサーバー です。 foreach関数やsection関数のループを途中で終了させたい場合どうすればいいのでしょうか? PHPの break; 相当の関数はないのでしょうか。 そんなものはない!という回答でも結構です。 お詳しい方、よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • inu2
  • ベストアンサー率33% (1229/3720)
回答No.1

よく考えてみてください。 なぜ途中で止める必要があるのでしょうか? なにかしらの条件があり、そこでループをとめて表示したい ということですよね? であれば、Smartyにアサインする前にPHP側で条件に応じて条件に一致した後の配列を消すなりすれば良いだけでは? そうすれば、Smarty側はなにも手をつけずにすみます。 Smartyは多機能すぎて本来の目的以外の事もできてしまいますが、あくまでもテンプレートエンジンです。 ロジックとなる部分を記述すべきではありません。 見た目を変更するときはSmartyで。条件が変わったりしたときはPHP側のソースで対応する というきっちりと線引きしないと、なんのためにSmartyを使ってテンプレートとロジック(PHP側)を分離しているのか意味が薄くなります。 ちなみに、 Smartyではsectionは古くからあり、互換性を保つためにのみ今現在も存在しています。 foreachを推奨します。

ikataro
質問者

お礼

なるほど。 SmartyではできないがPHP側でできるはずなのでそれで対応せよということですね。 Smartyのことばかり考えて本質を見失うところでした。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • foreachの2重ループ

    PHPのSmartyで2重ループがうまくできません。 表をforeachで作成したいです。 縦、横のセル数は変数で可変にしたいため、$oneと$twoにはそれぞれ毎回違う値が入る予定です。 <table border="1"> {foreach from=$one item="one"} <tr> {foreach from=$two item="two"} <td> {$two} </td> {/foreach} </tr> {/foreach} </table> 上記のプログラムだと、内側のループが1回しか回りません。 foreachの2重ループの仕方が間違っているのでしょうか?

    • ベストアンサー
    • PHP
  • ループでmail関数について

    XREAなどレンタルサーバーではメール送信(mail関数)をループ処理を行い複数のアドレスに送信でき受信確認ができるのですが、実験を行っている自宅サーバでは送信はできているみたいなのですが一部アドレスだけ届きません。 どうしてでしょうか? ご参考までに、環境と状況を記載させていただきます。 CentOS5 sendmail PHP 4.4.6 ドメインは、ダイナミックDNSのdip.jpを利用しております。 届いているアドレスはgmailだけです。 YahooやOCN、auには届きません。 mb_send_mailでも現状は同じでした。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • 添え字が全て文字列のPHPの多次元配列をSmartyでループ表示したい。

    PHPで作成した多次元配列をSmartyでループして表示する方法について。(添え字が全て文字列の場合で、ループ回数を固定したい。) こんにちわ。 以下のような配列があるとします。 $abcde = array("sakana" => array("aaa" => "あじ","bbb" => "ひらめ"),"oyasai" => array("ggg" => "ふき","hhh" => "トマト"),"niku" => array("eee" => "ぶた","ooo" => "鳥")); echo "<pre>"; print_r($abcde); echo "</pre>"; この配列をSmartyに渡し、以下の条件でループして表示したいのですが、いい方法はありますでしょうか。 ・ループ回数は二回 ・一番最初の添え字(sakana、oyasai、niku)の値を使わずに表示したい。(自動的に上から順番に取り出してほしい) foreachだと全ての値が表示されてしまい、sectionだとうまく表示されませんでした。 ↓こんな感じで表示したいです。(ループ二回なので肉は表示せず) 魚 :あじ、ひらめ 野菜:ふき、トマト よろしくお願いします。

    • ベストアンサー
    • PHP
  • レンタルサーバー環境でのSmartyの設定

    御世話になります。 いくつかサイトや書籍で調べてみたのですが レンタルサーバー環境でのSmartyの設定がわかりません。 レンタルサーバーはロリポップを使っていますが、レンタルサーバーである以上 php.iniの設定も直接出来ませんし・・・ Smartyのマニュアル(和訳)にローカル環境下での設定が主です。(私が勘違いしているだけのような気はします。) ちょっと古いですが『基礎 PHP』のサンプルで試しあれこれ試してみても、やはり出来ませんでした。 どのようにすればレンタルサーバー上でSmartyを正常に動かせるのでしょうか? ご教示ください。お願いします。

    • ベストアンサー
    • PHP
  • phpのエラー

    PHPの初心者です。 smartyを使ってPHP実行したところ、以下のエラーが出ました。 という意味でしょうか?初心者の私さっぱりわかりません。 回答していただけたらとてもありがたいです。よろしくお願いします。 Fatal error: Smarty error: [in 5-5-4.tpl line 21]: syntax error: unclosed tag \{section} (opened line 12). (Smarty_Compiler.class.php, line 317) in C:\php\includes\Smarty\Smarty.class.php on line 1093

    • 締切済み
    • PHP
  • レンタルサーバーへのSmartyのインストールができない。。。

    宜しくお願いします。 レンタルサーバーへ、Smartyをインストールしようと試みているのですが、 初心者のためうまくいきません。 書籍を頼りに、ローカル環境ではいろいろと勉強を積めたのですが、 本番環境になるとだめです。 具体的な質問内容は、 php.iniへ、インクルードパスの追加がうまくいかず、 set_include_path('/***/***/php/libs:' . get_include_path()); とするそうなのですが、 *** の部分の指定がおかしい気がします。 この部分は、Smartyの"Smarty.class.php"スクリプトが存在するディレクトリへのパスを記述するそうですが、 どういう風にそのパスを記述したらいいのでしょうか? つまり、「ドメイン/php/libs/」とドメインをいれたりするのか、 もしくは、phpinfo() 内に何かヒントがるのか、 ・・・ 。 ちなみにですが、FTPで転送したSmarty.class.php が格納されているlibsフォルダは、 ルートディレクト/php/libs/ となります。 サーバー会社は、ドメインキーパーのブルーブロックを使用しています。 http://www.blueblock.jp/index.html

    • 締切済み
    • PHP
  • ディレクトリの書込権限について

    レンタルサーバのSmartyのパーミッションでつまずいています。 とあるAレンタルサーバでsmartyを利用したPHPのプログラムを設置するとなんの問題もなく設置できるのですが 別のBレンタルサーバでsmartyを利用したPHPのプログラムを設置すると以下のようなエラーがでます。 Fatal error: Smarty error: unable to write to $compile_dir '/virtual/xxx/public_html/xxx/templates_c'. Be sure $compile_dir is writable by the web server user. in /virtual/xxx/public_html/xxx/class/Smarty/libs/Smarty.class.php on line 1093 書き込み権限がtemplates_cディレクトリにないということらしいですが、Bレンタルサーバのtemplates_cディレクトリのパーミッションは、0755で、設置が成功したAレンタルサーバのtemplates_cディレクトリのパーミッションも、0755です。 実行しているSmarty.class.phpのパーミッションも、0644で同じです。 同じパーミッションでレンタルサーバごとにエラーが出る出ないが違う理由はなんでしょうか?サーバの設定に詳しくないのでよくわかりません。考えられる原因があれば教えてください。

    • ベストアンサー
    • PHP
  • PHPの設置方法を具体的に知りたい。

    PHPファイルをレンタルサーバーに設置する方法を教えてください。 当方初心者でパスの設定やFTP転送あたりがいまいちわからないです。 できればどこか無料のレンタルサーバーに具体的に設置している例を示しているサイトを教えていただけると非常に助かります。 現在はWindowsにアパッチとPHPをインストールして作業しています。PEARとかsmartyは普通に使えるのでしょうか・・・ よろしくお願いします。

  • さくらレンタルサーバ上のSmartyの利用

    Smartyを入れてサイトを構築しています。 普通にテンプレートとして使えますが、 なぜか、{section} などはうまく動きません。 Smartyは慣れているのでコードの可能性が低いですが。。 さくらレンタルサーバ上ではSmartyを利用するには何か特別な設定が必要でしょうか? ちなみに、 ■ロジックPHP -------------------------------- //print_r($array)の結果は以下とおりのを確認できた //Array ( [0] => Array ( [name] => name1 [add] => add1 [url] => url1 )      [1] => Array ( [name] => name2 [add] => add2 [url] => url2 ) ) //これをテンプレートで、sectionで回したいです。 $smarty->assign("array", $array); ------------------------------- ■テンプレート --------------------------------- testing<br> {section name=i loop=$array} {$array[i].name}<br> {$array[i].add}<br> {/section} testing finished<br> --------------------------------- 全く何も表示されず、エラーもありません。 デバッグの「testing」の間に結果が入るはずですが、真白です。 どなたか教えてください かなり数時間はまっていました。。。 よろしくおねがいします。

    • ベストアンサー
    • PHP
  • PHPの機能制限

    お世話になります 環境はlinux centos6 + php を使っています。 ユーザーにブラウザ上で任意のサーバサイド言語を記述でき、実行できる環境を作ろうと考えています。 ユーザーには悪意のあるユーザーも含まれます。 使用したいものは変数,配列,連想配列、関数はfor,if,foreach,replace系,match系,split,explode 以上のみで他の関数は実行できないようにしたいです php又は他の言語に機能制限みたいなものが存在すれば実現できると思うのですが そのようなものはあるのでしょうか? smarty等のテンプレートエンジンは元々そういう用途のものではないので 思わぬ事故が起きそうでなるべく使用したくありません。 これを実現するには replaceやmatchを駆使してphpの上で動く独自のミニ言語を作る他ないのでしょうか なにか手がかりをご存知の方お教え頂けると嬉しいです。

    • ベストアンサー
    • PHP