У меня есть рекурсивное меню, которое позволяет мне пройти бесконечное количество шагов.
Это работает для всего моего меню, но я хотел бы применить этот скрипт только к одной кнопке меню (магазин), а не ко всем остальным.
Моя кнопка не будет отображаться.
Это мой старый рекурсивный скрипт:
$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
GROUP BY cat.id
ORDER BY cat.rgt ASC";
$menuconn = $conn->query($menu);
// Maak een nieuwe array om te vullen met onderstaand resultaat
$menuData = array(
'items' => array(),
'parents' => array()
);
// Maak een nieuwe array met simpelweg items en parents, welke gekoppeld zitten aan cat_id/parent_id
while($menu = $menuconn->fetch_assoc())
{
$menuData['items'][$menu['cat_id']] = $menu;
$menuData['parents'][$menu['parent_id']][] = $menu['cat_id'];
}
// Functie om menu te maken, $parentId is 1 (de categorieen die geen parent hebben)
function buildMenu($parentId, $menuData)
{
$html = '';
if (isset($menuData['parents'][$parentId]))
{
//Als parent_id gelijk is aan 1 gooi een li eromheen (want het is geen subcat) anders een ul
if($parentId == '1'){
$html = '<li>';
}else{
$html = '<ul class="sub-menu">';
}
foreach ($menuData['parents'][$parentId] as $itemId)
{
$html .= '<li class="menu-item"><a href="'.$menuData['items'][$itemId]['cat_alias'].'">'
.$menuData['items'][$itemId]['cat_title'].'</a>';
// Voer deze functie uit binnen de functie loop (recursief)
$html .= buildMenu($itemId, $menuData);
$html .= '</li>';
}
//Als parent_id gelijk is aan 1 gooi een li eromheen (want het is geen subcat)
if($parentId == '1'){
$html .= '</li>';
}else{
$html .= '</ul>';
}
}
return $html;
}
// Echo het resultaat van de functie en geef 1 mee als parent_id
echo buildMenu(1, $menuData);
Но я бы хотел это ТОЛЬКО для кнопки моего магазина (с идентификатором 22).
Так вот, что я и сделал (соединил мою старую рукопись и добавил рекурсивную функцию только тогда, когда cat_id равен 22, что является кнопкой моего магазина):
//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 = '';
$subcatmenulijst = '';
$subcats = '';
//Code om te checken of de huidige pagina gelijk is aan de alias
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);
}
// Query voor de subcats
$subcatmenu = 'SELECT * FROM snm_categories WHERE parent_id IN ('.$conn->real_escape_string($useableids).') and published = 1 ORDER BY lft';
$subcatmenucon = $conn->query($subcatmenu);
while($subcatmenu = $subcatmenucon->fetch_assoc()){
$subcatmenulijst .= '<li><a href="info/'.$subcatmenu['alias'].'.html">'.$subcatmenu['title'].'</a></li>';
}
// Als
if(!empty($subcatmenulijst)){
$subcats = 'true';
}
// IF BUTTON IS NOT THE SHOP BUTTON
if($menu['cat_id'] != 22){
//Loop alle categorieen
$menuresult .= '<li class="'.$class.'"><a href="info/'.$menu['cat_alias'].'.html">'.$menu['cat_title'].'</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);
//Als er het id van een artikel niet leeg is (dus als er artikelen onder hangen) OF als er subcategorieeen aanwezig zijn:
if(!empty($menu['content_id']) OR $subcats == 'true'){
$menuresult .= '<ul class="sub-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 .= $subcatmenulijst;
$menuresult .= '</ul>';
}
// BUT IF IT IS:
}else{
////
//Haal alle categorieen en check gelijk of de desbetreffende categorie artikelen onder zich heeft hangen.
$menucatalogus = "
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
FROM snm_categories cat
WHERE cat.id NOT IN (1, 2, 3, 4, 5, 7)
AND cat.published = 1
GROUP BY cat.id
ORDER BY cat.rgt ASC";
$menucatalogusconn = $conn->query($menucatalogus);
$menuData = array(
'items' => array(),
'parents' => array()
);
// Maak een nieuwe array met simpelweg items en parents, welke gekoppeld zitten aan cat_id/parent_id
while($menucatalogus = $menucatalogusconn->fetch_assoc())
{
$menuData['items'][$menu['cat_id']] = $menu;
$menuData['parents'][$menu['parent_id']][] = $menu['cat_id'];
$arr[] = $menucatalogus;
}
// Functie om menu te maken, $parentId is 1 (de categorieen die geen parent hebben)
function buildMenu($parentId, $menuData)
{
//$menuresult = '';
if (isset($menuData['parents'][$parentId]))
{
//Als parent_id gelijk is aan 1 gooi een li eromheen (want het is geen subcat) anders een ul
if($parentId == '1'){
$menuresult = '<li>';
}else{
$menuresult = '<ul class="sub-menu">';
}
foreach ($menuData['parents'][$parentId] as $itemId)
{
$arrtje[] = $itemId;
$menuresult .= '<li class="menu-item"><a href="'.$menuData['items'][$itemId]['cat_alias'].
'">'.$menuData['items'][$itemId]['cat_title'].'</a>';
// Voer deze functie uit binnen de functie loop (recursief)
$menuresult .= buildMenu($itemId, $menuData);
$menuresult .= '</li>';
}
//Als parent_id gelijk is aan 1 gooi een li eromheen (want het is geen subcat)
if($parentId == '1'){
$menuresult .= '</li>';
}else{
$menuresult .= '</ul>';
}
}
return $menuresult;
}
// Echo het resultaat van de functie en geef 1 mee als parent_id
echo buildMenu(22, $menuData);
////
}
$menuresult .= '</li>';
}
echo $menuresult;
Этот запрос:
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
FROM snm_categories cat
WHERE cat.id NOT IN (1, 2, 3, 4, 5, 7)
AND cat.published = 1
GROUP BY cat.id
ORDER BY cat.rgt ASC
Выходы:
А вот этот:
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
Выходы:
Кнопка моего магазина (Verhuur) с cat_id 22 не отображается в моем меню? Почему?
На данный момент мое меню выглядит так:
HOME
INFORMATIE
- ANNULATIE VOORWAARDEN
VEEL GESTELDE VRAGEN
CONTACT
Так что мне не хватает VERHUUR со всеми его подкатегориями.
Мне нужно это как вывод:
HOME
VERHUUR
- SPRINGKUSSENS
- WATER ATTRACTIES
- TRAKTATIES
- FEESAPPARATUUR
- STORMBANEN
- SPECIALE KUSSENS
- SPORT & SPEL
- ACTIE PAKKETTEN
INFORMATIE
- ANNULATIE VOORWAARDEN
VEEL GESTELDE VRAGEN
CONTACT