人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

htmlに挿入するforeach構文で同じ変数からなるリストを2箇所で表示する方法について教えてください。

下記のようなforeach構文で、変数$xxxからなるリストを表示したあと、同じHTML内に、同じ変数$xxxからなるリストを別の場所で表示したいのですが、後に記述されたforeach構文の箇所では、呼び出したいデータと異なるものが出てきます。

原因と解決方法を教えていただけないでしょうか。

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

{if $xxx}
<ul>
{foreach from=$xxx item="xxx_navi"}
<li><a href="{$xxx_navi.url}" title="{$xxx_navi.title}">{$xxx_navi.title}</a></li>
{/foreach}
</ul>
{/if}

●質問者: kazoo9
●カテゴリ:インターネット ウェブ制作
✍キーワード:HTML データ リスト 変数 記述
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● hanako393
●10ポイント

{$xxx_navi.url}" title="{$xxx_navi.title}">{$xxx_navi.title}

正しくは、

{$xxx.url}" title="{$xxx.title}">{$xxx.title}

◎質問者からの返答

アドバイス有難うございました。

「_navi」を外すと、データを読み込んでくれないようで、HTMLに求める記述がなくなってしまいました。

ご指摘いただいた内容を適切に反映できていないだけかもしれませんが、難しいですね。


2 ●
●50ポイント

たぶん、smartyですよね。

foreachにkeyを付けると望まれる動作になるはずです。

違ったらごめんなさい。

一応手元では確認しました。

{if $xxx}
<ul>
{foreach from=$xxx key=key item=xxx_navi}
<li><a href="{$xxx_navi.url}" title="{$xxx_navi.title}">{$xxx_navi.title}</a></li>
{/foreach}
</ul>
{/if}
<|| 
◎質問者からの返答

アドバイスを有難うございます。

ただ、「key=key」をそのままつけたのですが、表示に変わりがありませんでした。

プログラムは素人のため、大変申し訳ありませんが、

記述するkey=●●●(パラメータ?)に決まりごとがあるのでしょうか?


3 ●
●150ポイント ベストアンサー

こんばんわ。

え、でませんでしたか。

限りなく書かれているものと近づけてみました。

smartyのファイル

<html>
<body>

{if $xxx}
<ul>
{foreach from=$xxx key=key item=xxx_navi}
<li><a href="{$xxx_navi.url}" title="{$xxx_navi.title}">{$xxx_navi.title}</a></li>
{/foreach}
</ul>
{/if}

</body>
</html>

で、

phpのファイル

<?php

require_once 'Smarty/Smarty.class.php';

$smarty= new Smarty();
$smarty->template_dir = $path.'../smarty/templates/';
$smarty->compile_dir = $path.'../smarty/templates_c/';

$a=array(
array('url'=>'url1','title'=>'title1'),
array('url'=>'url2','title'=>'title2'),
array('url'=>'url3','title'=>'title3')
);
$smarty->assign('xxx',$a);
$smarty->display('index.tpl');

?>

で、

ブラウザでの出力結果のソースです。

<html>
<body>

<ul>
<li><a href="url1" title="title1">title1</a></li>
<li><a href="url2" title="title2">title2</a></li>
<li><a href="url3" title="title3">title3</a></li>
</ul>

</body>
</html>

ハッシュの構造を勘違いしていたらすいません。

keyの名前は別になんでもいいです。

ハッシュの中のハッシュにアクセスするのに、

foreachでハッシュからハッシュを取り出し、

取り出したハッシュの内容を出力

$xxx というハッシュの中でkeyとなる値が数値か文字列かは、

おやりになっていることで違うかと思いますが、

$xxx['0']['url']="url0";

$xxx['0']['title']="title0";

のようなハッシュを処理することになります。

それをforeachでまわすと

keyで設定した名称の変数に 0 が入ります。

itemで設定した名称の変数には その 0 にぶら下がるハッシュが入ります。

要素はurlとtitleのはずです。

foreachの中でkeyを使ってアクセスしてもよいです。

{if $xxx}
<ul>
{foreach from=$xxx key=key item=xxx_navi}
<li><a href="{$xxx.$key.url}" title="{$xxx.$key.title}">{$xxx.$key.title}</a></li>
{/foreach}
</ul>
{/if}

ああ、自分はkeyをすっ飛ばしていますが、こっちのほうがわかりやすいアクセスの仕方かもしれませんね。

どうでしょう。うごきませんかね。

◎質問者からの返答

とても詳しいご説明を有難うございます。

まだ実現できていないのですが、恐らく私の理解の範囲外で、何かしらの阻害要因があるのではと思います。

また、環境についても詳しく説明できる知識を持ち合わせておらず、該当する箇所のソースのみを記述するしかできないため、時間は掛かるかもしれませんが、ご説明いただいた内容はもちろん、環境等についてもキチンと勉強して、再度チャレンジしたいと思います。

お手間を取らせてしまいましたが、とても感謝しています。

有難うございました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ