2

次のようなデータベースがあります。

ここに画像の説明を入力

次のコードを使用して、このメニューからツリーを生成できます。

foreach($categories->result_array() as $category):
    $menu_array[$category['id']] = array('name' => $category['name'], 'parent' => $category['parent'], 'id' => $category['id']);
endforeach;

echo '<ul>';
echo $this->tasks->generateCategoriesTree(NULL, $menu_array);
echo '</ul>';

上記のコードが呼び出す関数は次のとおりです。

function generateCategoriesTree($parent, $menu_array, $result = NULL)
{
    foreach($menu_array as $key => $value):
        if ($value['parent'] == $parent):
            $result .= '<li>';
            $result .= '<a href="#">' . $value['name'] . '</a>';
            $result .= '<ul>';
            $result .= $this->generateCategoriesTree($key, $menu_array);
            $result .= '</li></ul>';
          endif;
    endforeach;

    return $result;
}

次のようなツリーが生成されます。

ここに画像の説明を入力

私の問題は、親カテゴリを太字にすることです。私のデータベースでは、親である行の親列はNULL. if ($value['parent'] !== $parent)大胆なスタイルを適用するなど、いくつかのことを試しましたが、うまくいきません。正直なところ、これについて頭を悩ませることはできません。皆さんが提供できる助けをいただければ幸いです!

4

3 に答える 3

2

親がNULLに等しい場合は太字にします。通常、if 構造に括弧を使用するため、構文の使用についてはわかりません。

function generateCategoriesTree($parent, $menu_array, $result = NULL)
{
    foreach($menu_array as $key => $value):
        if ($value['parent'] == $parent):
            $result .= '<li>';
            if($value['parent'] == NULL):
                $result .= '<a class="BOLDCLASS" href="#">' . $value['name'] . '</a>';
            else:
                $result .= '<a href="#">' . $value['name'] . '</a>';
            endif;  
            $result .= '<ul>';
            $result .= $this->generateCategoriesTree($key, $menu_array);
            $result .= '</li></ul>';
          endif;
    endforeach;

    return $result;
}

もちろん、クラスBOLDCLASSを太字にするために何らかのスタイリングを使用する必要があります。

于 2012-04-30T20:05:22.573 に答える
1

generateCategoriesTree関数宣言のパラメータを入れ替えて、$menu_arrayが前になるようにし$parentます。そう:

function generateCategoriesTree($menu_array, $parent = 0, $result = null) { ... }

generateCategoriesTree関数呼び出しでもパラメーターの順序を変更することを忘れないでください...

呼び出し関数で:

echo $this->tasks->generateCategoriesTree($menu_array);

そしてgenerateCategoriesTreeそれ自体:

$result .= $this->generateCategoriesTree($menu_array, $key);  

$parent == 0次に、太字スタイルを適用するかどうかをテストするだけです。

于 2012-04-30T20:05:35.270 に答える
0

トップレベルについては、これを試しましたか?

if ($value['parent'] !== '')

そのレベルを解決したら、OR 演算子を使用できます。

于 2012-04-30T19:55:27.850 に答える