Edward Ver Posted August 1 Share Posted August 1 Hello, I'm new to ProcessWire and I love using it so far. Using Runway CMS for years, It's simply easy to use both for myself and the client. I'm almost finish with a project, but stuck on the menu. I'm not good in PHP, so I will need a bit of help. My menu structure: Home - Laser treatment -- Acne -- Etc... - Contact us HTML: <nav class="menu"> <ul> <!-- If the menu has child --> <li class="menu-item-has-children"> <!-- notice the href="#" below with no real url value --> <a href="#" class="menu_link ">treatments<i class="icon-chevron-down"></i></a> <div class="sub-menu mega-menu"> <div class="list-item"> <ul> <li> <a href="/laser-treatment/acne-kviser">Acne</a> </li> </ul> </div> </div> </li> <!-- If the menu has no child --> <li> <a href="/contact-us">Contact us</a> </li> </ul> </nav> I have tried menuBuilder, But it does not meet my menu structure. As well as MarkupSimpleNavigation. Any help will be appreciated... Thanks in advance Link to comment Share on other sites More sharing options...
Sanyaissues Posted August 1 Share Posted August 1 Hi @Edward Ver don't worry, we are here to help you navigate PW! Here's an example for the menu you asked for: <?php // Get the homepage $home = pages()->get('/'); // Get the children of the homepage $children = $home->children(); ?> <nav class="menu"> <ul> <!-- Loop through each child of the homepage --> <?php foreach($children as $child): ?> <li> <a href="<?= $child->url ?>" class="menu_link"><?= $child->title ?></a> <!-- Check if the child has sub-children --> <?php if($child->hasChildren()): ?> <ul class="sub-menu mega-menu"> <!-- Loop through each sub-child --> <?php foreach($child->children() as $subchild): ?> <li class="menu-item-has-children"> <a href="<?= $subchild->url ?>"><?= $subchild->title ?></a> </li> <?php endforeach; ?> </ul> <?php endif; ?> </li> <?php endforeach; ?> </ul> </nav> The code wasn't tested but it should work. 5 Link to comment Share on other sites More sharing options...
Edward Ver Posted August 1 Author Share Posted August 1 Wow, The community of PW is awesome. Thank you Sanyaissues. I will try it later and give a feedback. Thank you so much again. 2 Link to comment Share on other sites More sharing options...
Edward Ver Posted August 1 Author Share Posted August 1 Sadly, it did not work as expected. Sorry for the confusion, but i have added the classes. Your code html output: <ul class="menu-main md:text-[16px] text-[18px]"> <ul> <!-- Loop through each child of the homepage --> <li> <a href="/laser-treatments/" class="menu_link">Laser treatments</a> <!-- Check if the child has sub-children --> <ul class="sub-menu mega-menu"> <!-- Loop through each sub-child --> <li class="menu-item-has-children"> <a href="/laser-trstments/achilles/">Achilles</a> </li> </ul> </li> <li> <a href="/kontakt-oss/" class="menu_link">Kontakt oss</a> <!-- Check if the child has sub-children --> </li> </ul> </ul> The output html should be: <ul class="menu-main md:text-[16px] text-[18px]"> <!-- If the parent has HAS child, it should output this as well. But with the child menu --> <li class="menu-item-has-children"><a href="#" class="menu_link ">Laser treatment<i class="text-lg icon-chevron-down align-[-2px]"></i></a> <div class="w-full border-t-2 rounded-md md:w-9/12 sub-menu mega-menu border-rose-600 max-w-[1280px] "> <div class="list-item"> <ul class="grid grid-cols-1 gap-1 lg:grid-cols-3 megamen--seclevel lg:grid-flow-col md:grid-rows-1 lg:grid-rows-11"> <li class="w-full"> <a class="" href="/laser-treatment/acne">Acne</a> </li> </ul> </div> </div> </li> <!-- If the parent has no child, it should output this --> <li><a href="/Contact-us">Contact us</a></li> </ul> So close...thanks. 1 Link to comment Share on other sites More sharing options...
Sanyaissues Posted August 2 Share Posted August 2 Try this @Edward Ver: <ul class="menu-main md:text-[16px] text-[18px]"> <!-- Loop through each child of the homepage --> <?php foreach($children as $child): ?> <!-- Check if the child has sub-children --> <?php if($child->hasChildren()): ?> <li class="menu-item-has-children"> <a href="<?= $child->url ?>" class="menu_link "> <?= $child->title ?> <i class="text-lg icon-chevron-down align-[-2px]"></i> </a> <div class="w-full border-t-2 rounded-md md:w-9/12 sub-menu mega-menu border-rose-600 max-w-[1280px] "> <div class="list-item"> <ul class="grid grid-cols-1 gap-1 lg:grid-cols-3 megamen--seclevel lg:grid-flow-col md:grid-rows-1 lg:grid-rows-11"> <!-- Loop through each sub-child --> <?php foreach($child->children() as $subchild): ?> <li class="w-full"> <a href="<?= $subchild->url ?>"><?= $subchild->title ?></a> </li> <?php endforeach; ?> </ul> </div> </div> </li> <!-- If the child has no sub-children --> <?php else: ?> <li><a href="<?= $child->url ?>"><?= $child->title ?></a></li> <?php endif; ?> <?php endforeach ?> </ul> Or this alternative where the <li> for subchildren and non-subchildren is the same, but we apply different classes based on $child->hasChildren() output. <?php // Get the homepage $home = pages()->get('/'); // Get the children of the homepage $children = $home->children(); ?> <ul class="menu-main md:text-[16px] text-[18px]"> <!-- Loop through each child of the homepage --> <?php foreach($children as $child): ?> <!-- Apply 'menu-item-has-children' class if the child has sub-children --> <li class="<?= $child->hasChildren() ? 'menu-item-has-children' : '' ?>"> <a href="<?= $child->url ?>" class="menu_link"> <?= $child->title ?> <!-- Show dropdown icon if the child has sub-children --> <?php if($child->hasChildren()): ?> <i class="text-lg icon-chevron-down align-[-2px]"></i> <?php endif; ?> </a> <!-- Display sub-menu if the child has sub-children --> <?php if($child->hasChildren()): ?> <div class="w-full border-t-2 rounded-md md:w-9/12 sub-menu mega-menu border-rose-600 max-w-[1280px]"> <div class="list-item"> <ul class="grid grid-cols-1 gap-1 lg:grid-cols-3 megamen--seclevel lg:grid-flow-col md:grid-rows-1 lg:grid-rows-11"> <!-- Loop through each sub-child --> <?php foreach($child->children() as $subchild): ?> <li class="w-full"> <a href="<?= $subchild->url ?>"><?= $subchild->title ?></a> </li> <?php endforeach; ?> </ul> </div> </div> <?php endif; ?> </li> <?php endforeach; ?> </ul> 2 Link to comment Share on other sites More sharing options...
Edward Ver Posted August 2 Author Share Posted August 2 @Sanyaissues Thanks a lot. That works like magic. 2 Link to comment Share on other sites More sharing options...
Edward Ver Posted October 29 Author Share Posted October 29 @Sanyaissues How not to show the Submenu of a "Blog" parent menu. I tried to search the forum and found no answers. Thanks. Link to comment Share on other sites More sharing options...
Edward Ver Posted October 30 Author Share Posted October 30 (edited) OK, did it. I just added this: <?php if( $child->id == $pages->get("/news")->id ): ?> <li <?php if ($child->id == $page->rootParent->id): ?> class="current"<?php endif; ?>><a href="<?= $child->url ?>"><?= $child->title ?></a></li> <?php else: ?> Edited October 30 by Edward Ver Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now