1

我想要制作带有 2 级子菜单的菜单。最终,HTML 应该像下面的代码:

<ul>
   <li><a href="#">elektronikos prekes</a>
       <ul>
           <li><a href="#">dar kaskas </a>
               <ul>
                   <li><a href="#">ka ka 2</a></li>
               </ul>
           </li>
           <li><a href="#">tranzistoriai </a>
               <ul>
                   <li><a href="#">sub 1</a></li>
                   <li><a href="#">tikri 1</a></li>
               </ul>
           </li>
      </ul>
 </li>
 <li><a href="#">kompiuteriai</a>
     <ul>
         <li><a href="#">nesiojami 8</a></li>
     </ul>
 </li>
</ul>

这是我的代码:

$queryreg=mysql_query("select distinct a.meniu as meniu , b.sub as sub,  c.sub2 as sub2,a.meniu_id as m_id, b.sub_id as s_id,
c.sub2_id as s_id2, count(distinct p.id) as pre 
from meniu a
LEFT OUTER JOIN sub AS b ON ( a.meniu_id = b.meniu_id and b.rodyti='1' )
LEFT OUTER JOIN preke AS p ON ( b.sub = p.sub and a.meniu=p.meniu)
LEFT OUTER JOIN sub2 AS c ON ( b.sub_id = c.sub_id AND c.rodyti='1')
LEFT OUTER JOIN preke AS pr ON ( pr.sub2 = c.sub2 and pr.sub=b.sub and pr.meniu=a.meniu)
where a.rodyti='1' and a.meniu='elektronikos prekes' or a.meniu='kompiuteriai'
group by a.meniu, a.meniu_id, b.sub, b.sub_id, c.sub2, c.sub_id");
$AnkstesnisSub='';
$ankstesnisMeniu='';
$output = $ankstesnisMeniu.$AnkstesnisSub = '';
echo'<ul>';
while ($row = mysql_fetch_assoc ($queryreg))
{
    if ($row['meniu'] != $ankstesnisMeniu )
    {
        if (!empty ($ankstesnisMeniu) )
        {
            $output .= " </ul></li></ul></li>";
        }
        $output .= '<li><a href="#">' . $row['meniu'] . "</a><ul>";
        $ankstesnisMeniu = $row['meniu'];
    }
    if ( $row['sub'] != $AnkstesnisSub)
    {
        if (!empty ($AnkstesnisSub))
        {
            $output .= "</ul></li>";
        }
        if($row['sub2']==NULL){$prekiu_kiekis = $row['pre'];}
        elseif($row['sub2']!=NULL){$prekiu_kiekis ='';}
        $output .= '<li><a href="#">' . $row['sub'] . " $prekiu_kiekis</a><ul>";
        $AnkstesnisSub = $row['sub'];
        $prevID2 = $row['s_id'];
    }
    if($row['sub2']!=NULL){$prekiu_kiekis = $row['pre'];}
    elseif($row['sub2']==NULL){$prekiu_kiekis ='';}
    $output .= '<li><a href="#">' . $row['sub2'] ." $prekiu_kiekis</a></li>";
    $prevID3=$row['sub2'];
}
$output = '' . $output . "</ul></li></ul></li>";        
echo"$output";
echo'</ul>';

但我得到:

 <ul>
     <li><a href="#">elektronikos prekes</a>
         <ul>
             <li><a href="#">dar kaskas</a>
                  <ul>
                      <li><a href="#">ka ka 2</a></li>
                  </ul>
             </li>
             <li><a href="#">tranzistoriai</a>
                  <ul>
                      <li><a href="#">sub 1</a></li>
                      <li><a href="#">tikri 1</a></li>
                  </ul>
             </li>
        </ul>
   </li>
   <li><a href="#">kompiuteriai</a>
       <ul></ul>
   </li>
   <li><a href="#">nesiojami 8</a>
       <ul>
           <li><a href="#"></a></li>
       </ul>
   </li>
 </ul>
 </li></ul>

第一个菜单项一切正常,但第二个错误。也许有人可以帮助我?

4

1 回答 1

0

我认为这是非常复杂的代码,为什么不将其分开为 2 个表呢?

top_menu => link_id、href、link_text、count_sub

sub_menu => link_id, parent_id, href, link_text, count_sub

获取菜单的代码:

$query = mysql_query("SELECT * FROM top_menu");
while ( $row = mysql_fetch_assoc($queryreg) ) 
     {
        echo '<li>' . $row['href'] . '</li>';
        if( $row['subcount'] != 0 ) {
            { make query for the sub_menu and do more while... and in the while you can add more }
        }
     }

等等..我认为它更干净。

于 2013-02-03T18:27:01.717 回答