1

これに数時間を費やし、専門家の助けが必要です。

次のようなテーブルがあります。

[id] [name] [parent_id]
1    fruits  0
2    orange  1
3    lemon   2
4    steak   0

私がレモンに行くとき、私はパンくずリストを次のようにしたい:

ホーム > フルーツ > オレンジ > レモン

そして、レモンはリンクではなく、残りはリンクになります。

助言がありますか?

私が見つけた最高のものはこれですが、すべてがリンクになります。

    function createPath($id, $category_tbl) {

        $s = "SELECT * FROM ".$category_tbl." WHERE ID = $id";
        $r = mysql_query($s);
        $row = mysql_fetch_array($r);

        if($row['parent_id'] == 0) {
            $name = $row['name'];
            return "<a href='index.php'>Admin</a> > <a href='index.php?folder_id=$id'>".$name."</a> > ";
        } else {
            $name = $row['name'];
            return createPath($row['parent_id'],$category_tbl). " <a href='index.php?folder_id=$id'>".$name."</a> >";
        }
    }

以下のアーウィンからの回答は、それを機能させるために必要なものを私に与えてくれました。

function createPath($id, $category_tbl, $except = null) {
    $s = "SELECT * FROM ".$category_tbl." WHERE ID = $id";
    $r = mysql_query($s);
    $row = mysql_fetch_array($r);
    if($row['parent_id'] == 0) {
        $name = $row['name'];
        if(!empty($except) && $except == $row['id']) {
            return "<a href='index.php'>Admin</a> &raquo; ".$name."";
        }
        return "<a href='index.php'>Admin</a> &raquo; <a href='index.php?folder_id=$id'>".$name."</a> &raquo; ";
    } else {
        if(!empty($except) && $except == $row['id']) {
            $name = $row['name'];
            return createPath($row['parent_id'],$category_tbl, false). " $name";
        } 
        $name = $row['name'];
        return createPath($row['parent_id'],$category_tbl, false). " <a href='index.php?folder_id=$id'>".$name."</a> &raquo;";
    }
}
4

3 に答える 3

4

3 番目のパラメーターを追加します。これは、タグにレンダリングされないと思われるリンクの名前になります。

function createPath($id, $category_tbl, $except = null) {

    $s = "SELECT * FROM ".$category_tbl." WHERE ID = $id";
    $r = mysql_query($s);
    $row = mysql_fetch_array($r);

    if($row['parent_id'] == 0) {
        $name = $row['name'];  
        return "<a href='index.php'>Admin</a> > <a href='index.php?folder_id=$id'>".$name."</a> > ";
    } else {
        $name = $row['name'];
        if(!empty($except) && $except == $name)
            return createPath($row['parent_id'],$category_tbl, $except)." ".$name;
        }
        return createPath($row['parent_id'],$category_tbl, $except). " <a href='index.php?folder_id=$id'>".$name."</a> >";
    }
}
于 2010-10-29T06:58:34.650 に答える
1

そのコードは結果を逆に取得しませんLemon > Orange > Fruits > Homeか? joni が示唆したように、結果を配列に入れてから、出力文字列を作成します。

URL など、必要なデータベースに他の情報がある場合は、次のようにfolder_id=$id保存できます。

$breadcrumb_items = array(
      0 => array( 'id' => '3', 
                  'title' => 'Lemon', 
                  'url' => 'LemonURL'
                ),
      1 => array( 'id' => '2', 
                  'title' => 'Orange', 
                  'url' => 'OrangeURL'
                ),
      2 => array( 'id' => '1', 
                  'title' => 'Fruit', 
                  'url' => 'FruitURL'
                ),
      3 => array( 'id' => '0', 
                  'title' => 'Home', 
                  'url' => 'HomeURL'
                )
);

次に、呼び出しarray_reverseて配列の順序を修正し、html をビルドします。最後の項目がリンクにならないように、必ずフラグを設定してください。

$targetID = 3; //Lemon
foreach( $breadcrumb_items as $breadcrumb ){
...
   if( $breadcrumb['id'] != $targetID ){ //if the id does not match our target id
      //add link code
   }
...
}
于 2010-10-29T06:55:16.447 に答える
0

ジャスト イン タイムで出力する代わりに、配列を作成し、そこに結果をバッファリングします。配列がいっぱいになった後、createPath()for ループによってブレッドクラムを出力できます。これは、最後の要素が ( by count()) であることを認識し、そこからリンクを作成することを回避できます。

于 2010-10-29T06:47:03.510 に答える