Daar heb ik deze code mee gemaakt:
<?PHP
$alias = $_GET['alias'];
//Haal alle categorieen en check gelijk of de desbetreffende categorie artikelen onder zich heeft hangen.
$menu = "
SELECT cat.id as cat_id, cat.level, cat.parent_id, cat.title as cat_title, cat.alias as cat_alias, cat.published, cat.rgt, cnt.state, cnt.id as content_id, cnt.catid, cnt.title as content_title, cnt.alias as content_alias
FROM snm_categories cat
LEFT JOIN snm_content cnt
ON cnt.catid = cat.id
WHERE cat.id NOT IN (1, 2, 3, 4, 5, 7)
AND cat.published = 1
AND cat.level = 1
GROUP BY cat.id
ORDER BY cat.rgt ASC";
$menuconn = $conn->query($menu);
//Loop het resultaat
while($menu = $menuconn->fetch_assoc()){
$cat_ids = '';
$projectenmenulijst = '';
if($menu['alias'] == $alias){
$class='current';
} else {
$class = '';
}
//Stop alle ids van de categorieen in een array
$cat_ids[] = $menu['cat_id'];
//Implodeer ze met commas ertussen zodat ze bruikbaar zijn in een query
if(!empty($cat_ids)) {
$useableids = implode(',', $cat_ids);
}
//Wanneer het id 10 is van projecten voer dan de volgende code uit (2 niveaus diep) -- deze code is even uitgecommend, want hij moet het voor alles doen, niet alleen id 10
// if($menu['cat_id'] == 10){
$projectenmenu = 'SELECT * FROM snm_categories WHERE parent_id in ('.$conn->real_escape_string($useableids).') and published = 1 ORDER BY lft';
$projectenmenucon = $conn->query($projectenmenu);
while($projectenmenu = $projectenmenucon->fetch_assoc()){
$projectenmenulijst .= '<li><a href="info/'.$projectenmenu['alias'].'.html">'.$projectenmenu['title'].'</a></li>';
}
// } else {
// $projectenmenulijst .= '';
// }
//Loop alle categorieen
$menuresult .= '<li class="'.$class.'"><a href="info/'.$menu['cat_alias'].'.html">'.$menu['cat_title'].''.$projecten.''.$hasdropdown1.'</a>';
//Haal alle artikelen op waar het catid gelijk is aan het id van een categorie (binnen bovenstaande loop, zodat het gebeurd voor elke categorie)
$submenu = "SELECT * FROM snm_content WHERE catid = '".$conn->real_escape_string($menu['cat_id'])."' AND state = 1 ORDER BY ordering";
$submenuconn = $conn->query($submenu);
//Check of de categorie artikelen onder zich heeft of andere categorieen
if(!empty($menu['content_id']) OR $menu['cat_id'] != ''){
$menuresult .= '<ul class="sub-menu" role="menu">';
}
//Loop het resultaat
while($submenu = $submenuconn->fetch_assoc()){
$menuresult .= '<li><a href="'.$submenu['alias'].'.html">'.$submenu['title'].'</a></li>';
}
// Plak de categorieen onder artikelen
$menuresult .= $projectenmenulijst;
$menuresult .= '</li>';
//Check of de categorie artikelen onder zich heeft of andere categorieen
if(!empty($menu['content_id']) OR $menu['cat_id'] != ''){
$menuresult .= '</ul>';
}
}
echo $menuresult;
?>
Ik wil hiermee dus zowel artikelen als categorieen in een dropdown laten zien wanneer die bestaan. Een toplevel categorie kan dus zowel een subcategorie aan zich hebben hangen als een artikel. Dit werkt. Maar elk menu item laat nu de ul zien onder zich, oftewel deze code:
//Check of de categorie artikelen onder zich heeft of andere categorieen
if(!empty($menu['content_id']) OR $menu['cat_id'] != ''){
$menuresult .= '<ul class="sub-menu" role="menu">';
}
//Check of de categorie artikelen onder zich heeft of andere categorieen
if(!empty($menu['content_id']) OR $menu['cat_id'] != ''){
$menuresult .= '</ul>';
}
Er klopt dus iets niet met deze if neem ik aan. Want als er geen artikelen zijn en geen categorieen onder een topcategorie laat hij nog steeds $menuresult zien met daarin de <ul>.
Hoe komt dit?
Als ik het menu inspecteer zie ik dat er 100% niets in deze ul's zit behalve waar wel wat in hoort te staan.