
みなさん、こんにちは。
先生、ちょっと前に自転車が壊れました。(いきなり脱線トーク)
マウンテンバイクなんですけども、なんかですねぇ・・・ペダル回してもタイヤ動かないんです。
前に回そうが後ろに回そうが・・・延々空回り(汗
かと思ったら唐突に、いきなり「ガキン!」と金属音を放って、今度はタイヤと連動してペダルが前や後ろに回る回る。
さらにチェーンが龍の如く暴れ回ったりなんかして・・・・・・ああもう、なんかもうすごいことになったわけです。
まぁ、結論としては、後輪の一番デリケートな部分がゴリゴリに錆付いてたのが原因だったらしく、タイヤホイール丸ごと交換で解決しました。
ちなみに自転車のタイヤホイールって、前輪と後輪セットで注文するんですよね。
というわけで、修理にかかった費用、しめて18,500円ナリ・・・(苦
キンタ先生の、最近買った高価なもの。
車輪。
せつない。
・・・さてさて。
「なにかとお世話になるSmarty関数について」シリーズも、今回で3回目になりました。
前回の授業では、「if」と「else」、ついでに「assign」と、基礎的なSmarty関数の読み書きについて学びました。
じゃあ今回は何かと言うと・・・「section」です。
EC-CUBE上で使われている関数の中でも、けっこうな頻度で登場するのがこの「section」。
今回はSmartyの読み書きの幅が広がりますよー!
「section」ってどういう意味?
簡潔に言ってしまえば、「ループ処理させる時に使う関数」ですね。
・・・と、言い切ってしまったらSmartyの勉強にならないので、もう少し詳しく説明しますw
「section」とは、データベースから何らかのデータを取得し、それを細かな条件付きでループ処理させて表示する際に利用する関数です。
ちなみに、同じループ処理をする関数として「foreach」というものがあります。
ここでは詳細な説明はしませんが(今回の主役は「section」ですのでw)、この2種の主な違いとしては、
「foreach」よりも、「section」の方が、細かな条件や設定を用いてループ処理することができる
という感じです。
・とりあえずループさせたい時は「foreach」
・表示するデータやデザインを細かく設定したい時は「section」
といった把握をしておくと良いでしょう。
では早速、ここでカンタンな「section」文の例を見てみましょう。
さて、ここで「新着情報」が、どのような感じでデータベースに収まっているのかを、図に表してみました。

なんで飯の情報なのかは置いておいて・・・w
雰囲気は掴めますでしょうか?
では、この図をもとに、section関数をさらに掘り下げて説明しましょう。
「section」の属性にはいろいろある!
前のページで紹介した「loop属性」のほかにも、section関数にはいろいろな属性があります。
「$arrNews」でデータ呼び出し!
「section関数」を大体押さえたんだし、もう説明はいいんじゃない?
・・・というワケにはいきません!
「section関数」は、値をどう呼び出すのかも込みで把握しておかなければなりません。
この辺りは、「商品一覧」や「おすすめ商品」などの場所でも転用できる知識ですので、じっくり理解しておきましょう。
さて、今回例に出している「新着情報」には、section関数の中に以下のようなSmarty文があります。
「escape」と「nl2br」の効果とは?
例えば、EC-CUBE管理画面「新着情報管理」で以下のように入力したとしましょう。

以下、「escape」と「nl2br」を、両方記述した例です。


★★★★ 質問です~。 2008/11/07
レビュアー:ton
楽しく読ませていただきました。ありがとうございます☆
えっと、secionを使って、新着ニュースを5件表示したとします。
で、それらの記事の昇順、降順を決めたいときは、どのようにコードをプラスすればいいでしょうか?
デフォルトでは昇順(?新しいものから)になっているので、descを追加するのかな?と思ったのですが、sectionのescapeの後ろあたりに、「|desc」追加でいいのでしょうか?
昇順・降順の変更は商品の並べ替えなどで結構使いたいものです。
あと、ついでの1件で、ご要望なのですが、(すみません、次から次に。)homan先生とkinta先生の記事で、取り扱うec-cubeのバージョンが微妙に違うのですが、できれば、これを2.3同士とか、バージョンアップのタイミングを合わせていただけると、うれしいです。
バージョンアップでどこの構造が変わったか分からないので、これは、2.2で、これは2.3で???とちょっと、迷ってしまいました;
宜しくお願いします。
新しい記事、いつも楽しみにしてます☆
質問ありがとうございます 2008/11/07
レビュアー:キンタ
どうも、キンタです。
なるほど、昇順の設定ですね。
「desc」とはなかなかオイシイ所を突いてますねぇ・・・が、DESCといえば確か「SQL文」だったかと思います。
この関数内ではSmartyで記述を行わなければなりませんので・・・オシイ!
というわけで、Smartyでの表示順序の指定ですが、
<!--{section name=datadaze loop=$arrNews step=-1}-->
と、section関数の語尾に「step属性」を入れてみましょう。
step属性とは授業で説明したとおり、「ループするインデックス位置を“飛び飛び”に」する属性ですが、これに「-1」などの負の値を入れると・・・なんとステップが逆順になります。
※というかコレ、授業で説明してなかったな・・・
section関数はこうやって、工夫次第でいろいろな指定ができるのがポイントです。
ぜひいろいろ試してみましょう。
ほか、「バージョンアップのタイミングの件」了解です!大事なことですよね。
ただ、僕もホマン先生もですが、動作保障の確認を一定のバージョンで取りつつ、随時カスタマイズ法を紹介しているので・・・いきなり最新版にバージョンアップとは行かないかもしれませんね。
ともあれ、徐々に最新版を追っかけていきます。
ではではtonさん、レビューありがとうございました。
★★★★★ 教えていただきたいです! 2008/11/07
レビュアー:konixile
はじめまして♪
ちょうど勉強していたところが記事になっていて
大変参考になりました。ありがとうございます。
この記事を読んで「オススメの商品」の部分を
横に3つずつ表示させるようにさせました。
(HPあるのでよかったら見てくださいね)
この「オススメの商品」のように
こんどは「商品一覧」のページに、
画像を横1列に並べて4つずつ位並べて
5つ目から折り返しまた横に4つずつならべ・・。
というのを実装したいのですが
自分にとってはまだまだ難しいようです、
もしよかったらご教授ください。
よろしくお願いします。
★★★★ 教えて貰えますか! 2008/12/22
レビュアー:ksm
いつも大変参考にさせて頂いております。
質問があるのですが・・・
konixileさんのコメントにもありましたが、「商品一覧」のページに、画像を横1列に並べて3~4点ずつ並べて表示したいと思っております。
ちなみに、konixileさんのサイトを拝見したところ、表示されてました!同じようにやりたいと思い
EC-CUBEのコミュニティーサイトも見たのですが、どうしても解りません。
宜しくお願いします!!
ちなみに、Version 2.3.3です。
教えていただきたいです。 2009/06/04
レビュアー:yuka
sectionは条件をつけてBreakさせることは可能でしょうか?
可能であればどういう風にすればよいでしょうか?
ぜひ教えてください。
キンタの代わりにお答します 2009/06/08
レビュアー:homan
お返事が遅くなり申し訳ありません!
> sectionは条件をつけてBreakさせることは可能でしょうか?
僕が知る限りでは、sectionにはbreakできる機能はなかったように思います。section内部でif文で処理を変えてしまう方法もありますが、あまりスマートではないですね・・・。
そもそもSmartyはあくまでもテンプレート(デザイン)側なので、あまり複雑な処理をすべきでなく、PHP側で条件によってテンプレート側へ渡す値を調整する方がよいと思います。
★★★★ メーカー名や発注先名を.... 2009/10/04
レビュアー:nomu
いつも、いろいろなカスタマイズに活用させて頂き有難うございます。
商品情報としてメーカー名や発注先名を商品マスタ(dtb_products)のcomment1,comment2欄を利用し、取り急ぎはurl等のチェックを外して登録していますが、smartyの中のtpl内の記述をアレンジすることで商品詳細ページには出力出来るのですが、その後のカートページやショッピングページに出力することが出来ません。また、最終的には発注確認メールや管理画面側のあらゆるところにこのメーカー名や発注先名(comment1,comment2)を使いたいのですが全く検討がつきません。
phpやsmartyについては殆ど素人なのでカスタマイズ箇所を教えていただきたいのですがよろしくお願いします。
