今現在、以下のようなHTMLソースがあります。value="" の部分は Smarty 変数を埋め込んでいます。
<input name="mytext_a_1" type="text" value="{$mytext_a_1}">
<input name="mytext_b_1" type="text" value="{$mytext_b_1}">
<input name="mytext_a_2" type="text" value="{$mytext_a_2}">
<input name="mytext_b_2" type="text" value="{$mytext_b_2}">
<input name="mytext_a_3" type="text" value="{$mytext_a_3}">
<input name="mytext_b_3" type="text" value="{$mytext_b_3}">
ここでは mytext_a_1~mytext_a_3 までしか書いてませんが、実際には、
mytext_a_1~mytext_a_10くらいテキストボックスありますので、
できれば HTML ソースを Smarty のループ構文で表示したい所です。
ループ構文で表示しようとして、
{section name=cnt start=1 loop=10}
<input name="mytext_a_{$smarty.section.cnt.index}" type="text" value="{$mytext_a_3}">
<input name="mytext_b_{$smarty.section.cnt.index}" type="text" value="{$mytext_b_3}">
{/section}
ここまでは書けたのですが、value="" の部分をどう記述すればよいか分かりません。
動的に変数を作る{assign}にヒントがありそうなんですが・・記述の仕方が
分かりませんでした。分かる方、ご教授頂ければ幸いです。
下記一例として回答します。
PHP側は
$data = array(
"1" => array(
"mytext_a" => "test_a_1",
"mytext_b" => "test_b_1",
),
"2" => array(
"mytext_a" => "test_a_2",
"mytext_b" => "test_b_2",
),
"3" => array(
"mytext_a" => "test_a_3",
"mytext_b" => "test_b_3",
),
);
$smarty->assign("data",$data);
テンプレート側は
{foreach from=$data key=k item=i}
<input name="mytext_a_{$k}" type="text" value="{$i.mytext_a}">
<input name="mytext_b_{$k}" type="text" value="{$i.mytext_b}">
{/foreach}
こんな感じでいけると思います。
URLはダミー。
うる覚えですが、こんなのかと:
php
$value = array();
$value['a'][3] = "hogehoge";
$value['b'][3] = "i love hatena";
$smarty->assign("mytext_a_3", $value['a'][3]);
$smarty->assign("mytext_b_3", $value['b'][3]);
こういうことかなぁ?
2番さんの回答と似ておりますが。。。一例です。
■PHP側の記述
$mytext_a_1~ の変数の内容を、input の name の値をキーにして、
配列に詰め込んだものをSmarty に渡します。
$data = array();
$data["mytext_a_1"] = $mytext_a_1;
$data["mytext_b_1"] = $mytext_b_1;
$data["mytext_a_2"] = $mytext_a_2;
$data["mytext_b_2"] = $mytext_b_2;
$data["mytext_a_3"] = $mytext_a_3;
$data["mytext_b_3"] = $mytext_b_3;
$smarty->assign('data', $data);
なお配列を用意するところは次のように書いてもおなじです。
$data = array(
"mytext_a_1" => $mytext_a_1
, "mytext_b_1" => $mytext_b_1
, "mytext_a_2" => $mytext_a_2
, "mytext_b_2" => $mytext_b_2
, "mytext_a_3" => $mytext_a_3
, "mytext_b_3" => $mytext_b_3
);
■テンプレート側の記述
foreach のループで key で配列要素のキーを読んで、
input の name にセット、item で配列要素の値を読んで
input の value にセットします。
{foreach from=$data key=k item=v}
<input type="{$k}" type="text" value="{$v}">
{/foreach}
http://www.smarty.net/manual/ja/language.function.foreach.php
コメント(0件)