2013-02-03 40 views
1

我想要菜单与2级子菜单。最终,HTML应该像下面的代码:菜单与2级子菜单与PHP和MySQL

<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> 

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

+0

您不应该将HTML连接与您的代码混合。分两步运行:首先获取你的数据,并使用它,第二:用你想要的方式在HTML中转换它,但不要混合两者。 (想想你需要输出Json而不是HTML) –

回答

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 } 
     } 
    } 

等等..这对我的意见来说比较干净。

+0

感谢您的帮助。我发现在我的代码错误。现在一切正常。 – user2037588