在php中创建动态导航菜单(索引)

时间:2017-05-04 14:28:44

标签: php json

对于我的动态导航,我需要一些帮助,因为我还是PHP新手。 使用这些函数,此文件将数组的值传递给json和js文件。 正确的索引对于函数尤其重要。

$_js_remc->remote_copy($renaming_js_file, $renaming_js_file_to);
  $_json_remc->remote_copy($renaming_jsonfile, $renaming_jsonfile_to);

  if ($_js_remc->remote_is_writeable($renaming_js_file) && $_json_remc->remote_is_writeable($renaming_jsonfile)) {
        $i = 10000;
        $menu_string = "document.getElementById('categories_menu').innerHTML='";
        for ($z = 0; $z < count($_POST['menu_lvl1_text']); $z++) {

             $i = $i + 100;  
             $menu_string .= '<li><a href="' . $_POST['menu_lvl1_link'][$z] . '">' . htmlentities($_POST['menu_lvl1_text'][$z], ENT_QUOTES, "UTF-8") . '</a>';
             $linkname_lvl1 = ($_POST['menu_lvl1_text'][$z]);
             $url_lvl1 = ($_POST['menu_lvl1_link'][$z]);
             $menu_list[$i] = array($linkname_lvl1 => $url_lvl1);

             if (isset($_POST['menu' . $z . '_lvl2_text']) && !empty($_POST['menu' . $z . '_lvl2_text'])) {
                    $i = $i +1;
                    $menu_string .= '<ul>';
                    for ($zs = 0; $zs < count($_POST['menu' . $z . '_lvl2_text']); $zs++) {
                    $menu_string .= '<li><a href="' . $_POST['menu' . $z . '_lvl2_link'][$zs] . '">' . htmlentities($_POST['menu' . $z . '_lvl2_text'][$zs], ENT_QUOTES, "UTF-8") . '</a>';      
                    $linkname_lvl2 = ($_POST['menu' . $z . '_lvl2_text'][$zs]);
                    $url_lvl2 = ($_POST['menu' . $z . '_lvl2_link'][$zs]);
                    $menu_list[$i] = array($linkname_lvl2 => $url_lvl2);
                    $i = $i + 1;                        
                    }
                    $menu_string .= '</ul>';

             }
             $menu_string .= '</li>';
       }       
       $menu_string .= "';";

从代码中可以看出,json文件在逻辑上记录了以下值。

 {
    "10100": {
        "Lvl_1_1": "Level_1_1"
    },
    "10101": {
        "Lvl1_2": "Lvl1_2"
    },
    "10102": {
        "Lvl1_3": "Lvl1_3"
    },
    "10203": {
        "Lvl_2_1": "Lvl_2_1"
    },
    "10204": {
        "Lvl2_2": "Lvl2_2"
    }
}

问题: 当然,Sublevel(例如“10102”)会增加,但仅限于其类别,之后下一个类别shell的索引将恢复,例如“10200”。每个类别都有不同数量的子链接。

输出如下:

   <li id="u_1_0">
          <a href="#"><span id="i_1_0"></span></a>
          <ul class="sub">
            <li id="u_1_2"><a href="#"><span id="i_1_2"></span></a></li>
            <li id="u_1_3"><a href="#"><span id="i_1_3"></span></a></li>

有人知道建议吗?

1 个答案:

答案 0 :(得分:0)

如果您只想重置计数器$i,那么您可以在内部for循环后重置计数器:

if ($_js_remc->remote_is_writeable($renaming_js_file) && $_json_remc->remote_is_writeable($renaming_jsonfile)) {
        $i = 10000;
        $menu_string = "document.getElementById('categories_menu').innerHTML='";
        for ($z = 0; $z < count($_POST['menu_lvl1_text']); $z++) {

             $i = $i + 100;  
             $menu_string .= '<li><a href="' . $_POST['menu_lvl1_link'][$z] . '">' . htmlentities($_POST['menu_lvl1_text'][$z], ENT_QUOTES, "UTF-8") . '</a>';
             $linkname_lvl1 = ($_POST['menu_lvl1_text'][$z]);
             $url_lvl1 = ($_POST['menu_lvl1_link'][$z]);
             $menu_list[$i] = array($linkname_lvl1 => $url_lvl1);

             if (isset($_POST['menu' . $z . '_lvl2_text']) && !empty($_POST['menu' . $z . '_lvl2_text'])) {
                    $oldCounter = $i;
                    $menu_string .= '<ul>';
                    for ($zs = 0; $zs < count($_POST['menu' . $z . '_lvl2_text']); $zs++) {
                      $i = $i + 1;
                      [...use $i as before...]                                                
                    }
                    $i = $oldCounter;
                    $menu_string .= '</ul>';
             }
             $menu_string .= '</li>';
       }       
       $menu_string .= "';";

请注意,您的ID不是唯一的。如果有100个子链接,那你就麻烦了!

但是,我不明白你的第二个代码块以及它与你的问题有什么关系。