0

<ul>
      <li>Main Menu 1
        <ul>
          <li>Sub Menu 1.1
          </li>
          <li>Sub Menu 1.2
          </li>
        </ul>
      </li>
      <li>Main Menu 2
        <ul>
          <li>Sub Menu 2.1
          </li>
          <li>Sub Menu 2.2
          </li>
        </ul>
      </li>
    </ul>

上記は、私が作成しようとしている unorderlist の表現です。foreach を使用してこの種のリストを作成できます。1 つの関数はメイン メニューを取得し、もう 1 つの関数はサブ メニューを取得します。現在、すべてのメニューに対してすべてのサブメニューが同時に表示されているため、どのサブメニューがどのメニューに対してどのサブメニューであるかを判断するための何らかの条件を作成する方法について提案を求めたいと思います。特定のサブメニューには特定のメニューが必要です ここに私が取り組んでいるコードがあります

サーバ側

function RetrieveAllMenu() {
  global $dbh;
  $stmt = $dbh - > prepare("SELECT * FROM userlist_tbl WHERE username = ?");
  $stmt - > bindValue(1, $_SESSION['login_user']);
  $stmt - > execute();
  $selected_row = $stmt - > fetch(PDO::FETCH_ASSOC);
  $mem_id = $selected_row['user_id'];
  if ($stmt - > execute()) {
    if ($stmt - > rowCount() > 0) {
      $stmt = $dbh - > prepare("SELECT * FROM rolemapping_tbl WHERE user_id = ?");
      $stmt - > bindValue(1, $mem_id);
      $stmt - > execute();
      $selected_row = $stmt - > fetch(PDO::FETCH_ASSOC);
      $rolelist_id = $selected_row['rolelist_id'];
      if ($stmt - > execute()) {
        $stmt = $dbh - > prepare("SELECT * FROM roledetails_tbl WHERE rolelist_id = ?");
        $stmt - > bindValue(1, $rolelist_id);
        $stmt - > execute();
        $selected_row = $stmt - > fetch(PDO::FETCH_ASSOC);
        if ($stmt - > execute()) {
          if ($stmt - > rowCount() > 0) {
            $menu_id = array();
            while ($selected_row = $stmt - > fetch(PDO::FETCH_ASSOC)) {
              $menu_id[] = array('menuid' => $selected_row['menulist_id'], );
            }
            $stmt = $dbh - > prepare("SELECT * FROM menulist_tbl WHERE menulist_id = :menuid");
            $menu_name = array();
            foreach($menu_id as $row) {
              $stmt - > execute(array(':menuid' => $row['menuid']));
              //while ($selected_row =$stmt->fetch(PDO::FETCH_COLUMN, 0)){
              while ($selected_row = $stmt - > fetch(PDO::FETCH_ASSOC)) {
                $menu_name[] = array('menuname' => $selected_row['menu_name'], 'menuurl' => $selected_row['menu_url'], 'menuflag' => $selected_row['menu_flag'], 'menuid' => $selected_row['menulist_id']);
              }
            }
            return $menu_name;
          }
        }
      }
    }
  }
}

function RetrieveAllSubMenu() {
  global $dbh;
  $menu_name = RetrieveAllMenu();
  $stmt = $dbh - > prepare("SELECT * FROM submenulist_tbl WHERE parent_id = :menuid");
  $submenu_name = array();
  foreach($menu_name as $row) {
      //$stmt->execute(array(':menuid' => $row['menuid']));
      $stmt - > bindValue(':menuid', $row['menuid'], PDO::PARAM_STR);
      $stmt - > execute();
      while ($selected_row = $stmt - > fetch(PDO::FETCH_ASSOC)) {
        $submenu_name[] = array('submenuname' => $selected_row['submenulist_name'], 'submenuurl' => $selected_row['submenulist_url'], 'submenuflag' => $selected_row['submenulist_flag']);
      }
    }
    //print_r($submenu_name);
  return $submenu_name;
  //return in_array($menuid, $submenu_name);
}

これはhtml側です

<?php
echo'<ul>';   
foreach (RetrieveAllMenu() as $value){
//echo'<input  type="submit" value="'.$value['menuname'].'" name="'.$value['menuname'].'"/>';
echo'<li>';
echo '<a href="'.$value['menuurl'].'" id=""'.$value['menuname'].'"">'.$value['menuname'].'</a>';
echo'<ul>';
foreach (RetrieveAllSubMenu() as $value){
//if( $value['parentid'] === $value['menuid'] ){    
echo'<li><a href="'.$value['submenuurl'].'" id=""'.$value['submenuname'].'"">'.$value['submenuname'].'</a></li>';
//}
}
echo'</ul>';  
echo'</li>';         
}   
echo'</ul>';    
?>

これは、私のコードが上記のように見える方法です。

<ul>
          <li>Main Menu 1
            <ul>
              <li>Sub Menu 1.1
              </li>
              <li>Sub Menu 1.2
              </li>
               <li>Sub Menu 2.1
              </li>
              <li>Sub Menu 2.2
              </li>
            </ul>
          </li>
          <li>Main Menu 2
            <ul>
              <li>Sub Menu 1.1
              </li>
              <li>Sub Menu 1.2
              </li>
              <li>Sub Menu 2.1
              </li>
              <li>Sub Menu 2.2
              </li>
            </ul>
          </li>
        </ul>

4

1 に答える 1

1

RetrieveAllSubMenu()すべてのメニューではなく、特定のメニューのサブメニューのみを ID で返すように関数を作成します。

function RetrieveAllSubMenu($menu_id) {
  // your code
  $stmt = $dbh - > prepare("SELECT * FROM submenulist_tbl WHERE parent_id = :menuid");
      $stmt - > bindValue(':menuid', $menu_id, PDO::PARAM_STR);
 // more code
}

その背後にあるロジックだけを提供しますが、これは渡された に基づいて 1 つのメニューのみのサブメニューを返します$menu_id

したがって、サブメニューを取得しようとすると、次のforeachようになります。

foreach (RetrieveAllSubMenu($value['menuid']) as $value){

$valueまた、返された結果に次のような名前を付けることをお勧めします。

foreach (RetrieveAllSubMenu($value['menuid']) as $submenu){

メニューとサブメニューにも使用しているため、 $value が内部ステートメント$valueによってオーバーライドされるタイミングを完全に理解していないと、問題が発生する可能性がありますforeach

編集

foreach ステートメントは次のようになります。

foreach (RetrieveAllMenu() as $menu){
    echo'<li>';
    echo '<a href="'.$menu['menuurl'].'" id=""'.$menu['menuname'].'"">'.$menu['menuname'].'</a>';
    echo'<ul>';
    foreach (RetrieveAllSubMenu($menu['menuid']) as $submenu){
        echo'<li><a href="'.$submenu['submenuurl'].'" id=""'.$submenu['submenuname'].'"">'.$submenu['submenuname'].'</a></li>';
    }
}
于 2014-10-25T10:45:14.360 に答える