тернарный оператор в динамическом раскрывающемся меню

У меня все еще возникают проблемы с добавлением тернарного оператора в мое меню. Его цель - добавить class = active к тегу li, если идентификатор меню и идентификатор страницы совпадают. Идентификатор страницы хранится в переменной с именем thisPage ... поэтому, когда thisPage и menuID равны, я должен получить тег класса.

Я включил код и дамп php, чтобы помочь определить проблему.

Строка кода, с которой у меня возникла проблема, - это тернарный оператор в разделах /// SUB MENU и /// MAIN MENU, начиная с

($thisPage==$sval['menuID'] ? ' class="active"' : '')  

Я думаю, что проблема в "$ sval ['menuID']".

 <?php

$ thisPage = 3; //

    $sql = "SELECT menuID, menuTitle, menuURL, menuParentID, menuOrderID FROM menu ORDER BY menuParentID, menuOrderID ASC";
    $items = mysql_query($sql);
    while ($obj = mysql_fetch_object($items)) {
        if ($obj->menuParentID == 0) {
            $parent_menu[$obj->menuID]['menuID'] = $obj->menuID;
            $parent_menu[$obj->menuID]['menuTitle'] = $obj->menuTitle;
            $parent_menu[$obj->menuID]['link'] = $obj->menuURL;
        } else {
            $sub_menu[$obj->menuID]['menuID'] = $obj->menuID;
            $sub_menu[$obj->menuID]['parent'] = $obj->menuParentID;
            $sub_menu[$obj->menuID]['menuTitle'] = $obj->menuTitle;
            $sub_menu[$obj->menuID]['link'] = $obj->menuURL;
            if (!isset($parent_menu[$obj->menuParentID]['count'])) {
                $parent_menu[$obj->menuParentID]['count'] = 0;
            }
            $parent_menu[$obj->menuParentID]['count']++;
        }
    }

    mysql_free_result($items);


    function create_menu($parent_array, $sub_array, $qs_val = "menu", $main_id = "nav", $sub_id = "dropdown-menu", $dd_style = "dropdown")
    {
        $menu = "<ul class=\"{$main_id}\">\n";

        foreach ($parent_array as $pkey => $pval) {
            if ( ! empty($pval['count'])) {

                            //DROP-DOWN MENUS
                $menu .= "\t<li class=\"{$dd_style}\"><a href=\"{$pval['link']}\" class=\"dropdown-toggle\" data-toggle=\"$dd_style\">{$pval['menuID']} - {$pval['menuTitle']}<b class=\"caret\"></b></a>\n";
                $menu .= "\t\t<ul class=\"{$sub_id}\">\n";

                foreach ($sub_array as $sval) {
                    if ($pkey == $sval['parent']) {

///////////////////////////////////////SUB MENUS
                        $menu .= "\t\t\t<li" . ($thisPage==$sval['menuID'] ? ' class="active"' : '') . "><a href=\"{$sval['link']}\">{$sval['menuID']} - {$sval['menuTitle']}</a></li>\n";
                    }
                }
                $menu .= "</ul></li>\n";
            } else {

////////////////////////MAIN MENUS
                $menu .= "\t<li" . ($thisPage==$pval['menuID'] ? ' class="active"' : '') . "><a href=\"{$pval['link']}\">{$pval['menuID']} - {$pval['menuTitle']}</a></li>\n";
            }
        }

        return $menu . "</ul>\n";
    }

    ?>
    <?php 
    echo create_menu($parent_menu, $sub_menu, "menu", "nav", "dropdown-menu");
    ?>


   ////////////////////////////////
   //////////// PHP DUMP///////////
   ////////////////////////////////

   //PAGE QUERY
        [query_rsPageContent] => SELECT * FROM pages WHERE pageID = 3
        [rsPageContent] => Resource id #4
        [row_rsPageContent] => Array
            (
                [pageID] => 3
                [menuParentID] => 0
                [pageRbnTitle] => Ministries
                [pageTitle] => Ministries
                [pageContent] => Ministries Content
                [pageDescripition] => 
                [pageKeywords] => 
            )

        [totalRows_rsPageContent] => 1

        [thisPage] => 3

    //MENU QUERY
        [sql] => SELECT menuID, menuTitle, menuURL, menuParentID, menuOrderID FROM menu ORDER BY menuParentID, menuOrderID ASC
        [items] => Resource id #7
        [obj] => 
        [parent_menu] => Array
    (
        [1] => Array
            (
                [menuID] => 1
                [menuTitle] => Title 1
                [link] => 1.php
            )

        [2] => Array
            (
                [menuID] => 2
                [menuTitle] => Title 2
                [link] => #
                [count] => 1
            )

        [3] => Array
            (
                [menuID] => 3
                [menuTitle] => Title 3
                [link] => 3.php
            )
)

person dmschenk    schedule 05.02.2014    source источник
comment
В вашем дампе $parent_menu я не вижу ключа menuID ни для одного пункта меню.   -  person Michal Brašna    schedule 06.02.2014
comment
извините мое плохое ... я нечаянно вычистил ... сейчас положил обратно   -  person dmschenk    schedule 06.02.2014
comment
Проблема не в $ thisPage ... Мне нужен способ получить {$ sval ['menuID']} и {$ pval ['menuID']} в тройной системе в качестве второго аргумента. вне тернарного оператора {$ sval ['menuID']} работает нормально.   -  person dmschenk    schedule 06.02.2014
comment
Тогда я не вижу здесь никаких проблем. См. phpfiddle.org/main/code/f03-ysv, он отлично работает, когда $thisPage присутствует.   -  person Michal Brašna    schedule 06.02.2014


Ответы (1)


$thisPage не известен в контексте create_menu функции. Передайте его в качестве аргумента или используйте global $thisPage, если это абсолютно необходимо.

person Michal Brašna    schedule 05.02.2014
comment
Добавление глобального $ thisPage; чтобы функция create_menu сделала свое дело! Спасибо вам за помощь. - person dmschenk; 06.02.2014
comment
Я пытаюсь понять одну вещь: если я установлю $ thisPage = 3 вручную, а затем добавлю переменную типа $ obj в тернарный оператор, все пункты меню получат class = active .... кажется, что он должен был добавлять массив, но он еще дал добавленный класс. это потому, что массив содержит 3? - person dmschenk; 06.02.2014
comment
Мне нужно было бы увидеть использование тернарного оператора, но это всего лишь инструкция if. - person Michal Brašna; 06.02.2014