Jump to content

Menu Builder


kongondo

Recommended Posts

7 minutes ago, kongondo said:

Glad you like the module @cjx2240

Do you mean if disabled menu item does not show in the frontend? What's the use case? Why not just not add that menu item? 

 

I don't follow. Please explain.

Well, sometimes you just want to turn off a menu item, temporarily right? Like I have a client who wants to disable registrations in a few months. He can just delete it, but if he wants to put it back, then he has to get the right page and fill out (accurately) the css class again etc.

And change type I mean, if I make a "Pages" menu item, but later I want to change the URL, or maybe make it external... I have to delete and remake. This is fine for me, but maybe less intuitive for some people.

Basically, I am talking about things that you and I won't need, but an end-user of the CMS might ;)

Link to comment
Share on other sites

Hi kongondo, one question: the title of the page is always taken from the module? Because after creating the menu, I modified some page titles in pw by request of the client and the module continues printing the old title. Maybe I can use a var %s or something in the title input to tell the module that get it from the pw page.

Link to comment
Share on other sites

14 minutes ago, Pixrael said:

Hi kongondo, one question: the title of the page is always taken from the module? Because after creating the menu, I modified some page titles in pw by request of the client and the module continues printing the old title. Maybe I can use a var %s or something in the title input to tell the module that get it from the pw page.

Please see the 'default_title' option as documented here.

Link to comment
Share on other sites

  • 4 weeks later...

Hi Kongondo,

I have been searching this support forum for an answer to my scenario for a while to no avail, and was hoping you could advise me on the following:

Scenario:

I have created a menu using MB with a structure similar to this:

Menu Builder items:

  1. Home
  2. Page 1
  3. Page 2
  4. Page 3
  5. Contact

My problem:
in the PW page tree ‘Page 1’ has 20-children. 

I don’t want to include the 20-children in MB.  However, I want ‘Page 1’ to maintain the <li class=“active”> if I navigate to any of its 20 children.

Question:
Is it possible to keep ‘Page 1’ <li class=“active”>, without the children of ‘Page 1’ being included and output into the MB HTML?

Link to comment
Share on other sites

On 4/19/2017 at 5:54 PM, CodeCoffeeCode said:

Hi Kongondo,

I have been searching this support forum for an answer to my scenario for a while to no avail, and was hoping you could advise me on the following:

Scenario:

I have created a menu using MB with a structure similar to this:

Menu Builder items:

  1. Home
  2. Page 1
  3. Page 2
  4. Page 3
  5. Contact

My problem:
in the PW page tree ‘Page 1’ has 20-children. 

I don’t want to include the 20-children in MB.  However, I want ‘Page 1’ to maintain the <li class=“active”> if I navigate to any of its 20 children.

Question:
Is it possible to keep ‘Page 1’ <li class=“active”>, without the children of ‘Page 1’ being included and output into the MB HTML?

I think you would need to work with the "custom render" solution as described here.

  • Like 1
Link to comment
Share on other sites

This is probably a basic question and I've failed to spot the answer in the docs, in which case, many apologies...

Using an example such as example-recursive-function3.php is there an easy/built-in way of outputting only a portion of a deep menu, from part-way into that menu?

I need a menu like:

- food
-- cheese
-- fruit
--- apples
--- grapes
- energy
-- solar
-- wind

so at times I can output all of its items. But at other times I need to render only from say `fruit` down, e.g.:

- fruit
-- apples
-- grapes

Thanks in advance for any pointers ^_^

Link to comment
Share on other sites

  • 2 weeks later...
On 11/23/2016 at 11:11 PM, Michael van Laar said:

Anyone has a solution for multi-language menus with custom menu items?

For pages localisation works using the default_title option. But this is not possible with custom menu items. And since the items’ title field is not a multi-language field, I have no idea how to solve this. But I’m probably not the first one stumbling over this. ;-)

If not, I think I have an idea how to build a solution using nested repeater fields.

You already find a solution for this?

 

I came accros the same problem as i wanted to add custom anchor links.

 

Thanks!

Link to comment
Share on other sites

On 8.5.2017 at 4:50 AM, Missariella said:

You already find a solution for this?

 

I just used a Repeater field on a hidden “website config” page to create my own menu building tool with exactly the features I needed for that website, including using multi-language fields within the repeater.

Link to comment
Share on other sites

  • 2 months later...

Update: Menu Builder Version 0.1.8.

Changelog

  1. Added support to disable menu items + related (required for this) permission 'menu-builder-disable-items'. Thanks @cjx2240
  2. Support not to show menu items (pages) not listable to current user. Needs option 'check_listable' => 1 in $options Array. Thanks @Peejay
  3. 'current_class' now also applies to Breadcrumbs as well. Thanks @Jonathan Lahijani

Note

Disabling a menu item cascades the status to all its descendants. In Build Menu view (backend), disabled items displayed with strike-through.

Currently available in dev branch only. Please test and let me know, thanks.

Screenshots

 

mb_disable_menu_items1.thumb.png.665fcf66cbcde728cfd709f9cb433b7b.pngmb_disable_menu_items2.thumb.png.e522c30cfe4cd46fdba6d6b83226a56d.png

Edited by kongondo
  • Like 3
Link to comment
Share on other sites

Hi @kongondo - I'm still getting an issue with HTML in the menu item titles, where quoted attributes (e.g., class names, such as those used FontAwesome icons etc) get garbled in the title's input field.

I did mention a very simple fix earlier in this topic, but it may have got overlooked.  Would it be possible to apply this fix to the module:

In the ProcessMenuBuilder.module file, on line #1158 (in the listMenu() menthod), surround the $title variable with the htmlentities() function:

// Change line #1158 from:
<input type="text" value="' . $title . '" name="item_title[' . $id . ']" class="menu_settings" id="item_title' . $id . '">

// To:
<input type="text" value="' . htmlentities($title) . '" name="item_title[' . $id . ']" class="menu_settings" id="item_title' . $id . '">

It immediately fixes the HTML display issues witin the input field.

Thanks.

Link to comment
Share on other sites

1 hour ago, LMD said:

I'm still getting an issue with HTML in the menu item titles, where quoted attributes (e.g., class names, such as those used FontAwesome icons etc) get garbled in the title's input field.

I did mention a very simple fix earlier in this topic, but it may have got overlooked.  Would it be possible to apply this fix to the module:

Hi @LMD. Sorry about that; forgot about it. Pushed a fix to the dev branch. Please check and let me know if it works for you. Thanks.

Link to comment
Share on other sites

On 2017-4-25 at 7:36 PM, alan said:

This is probably a basic question and I've failed to spot the answer in the docs, in which case, many apologies...

Using an example such as example-recursive-function3.php is there an easy/built-in way of outputting only a portion of a deep menu, from part-way into that menu?

I need a menu like:


- food
-- cheese
-- fruit
--- apples
--- grapes
- energy
-- solar
-- wind

so at times I can output all of its items. But at other times I need to render only from say `fruit` down, e.g.:


- fruit
-- apples
-- grapes

Thanks in advance for any pointers ^_^

Hi @alan,

Hope it's not too late to reply. Sorry I missed this!

It is possible but the how would depend on the condition you want to check for to decide whether to output the whole menu or just part of it. There are at least two solutions:

  1. Using their IDs, remove unwanted menu items from the array or object returned by getMenuItems(). This would probably cost a bit more in memory, but probably nothing to write home about
  2. Modify the menu function in the gist you've linked to, to filter out IDs of unwanted items. It should suffice with creating an array of unwanted parent IDs. The, in the recursive function, check, for example if(in_array($m->parentID, $arrayOfParentIDs)) continue;. This is pseudo/incomplete code. You would also need to account for menu items without parents, etc.

If you gave us more info (condition to check for), I can give you a more clear answer.

  • Like 1
Link to comment
Share on other sites

On 2017-4-19 at 11:54 PM, CodeCoffeeCode said:

Hi Kongondo,

I have been searching this support forum for an answer to my scenario for a while to no avail, and was hoping you could advise me on the following:

Scenario:

I have created a menu using MB with a structure similar to this:

Menu Builder items:

  1. Home
  2. Page 1
  3. Page 2
  4. Page 3
  5. Contact

My problem:
in the PW page tree ‘Page 1’ has 20-children. 

I don’t want to include the 20-children in MB.  However, I want ‘Page 1’ to maintain the <li class=“active”> if I navigate to any of its 20 children.

Question:
Is it possible to keep ‘Page 1’ <li class=“active”>, without the children of ‘Page 1’ being included and output into the MB HTML?

Sorry for late reply @CodeCoffeeCode,

In addition to the suggestion to use the custom menu render strategy as suggested by @elabx, I think the options: include_children and current_class_level should also cover what you need.

https://github.com/kongondo/MenuBuilder/tree/dev#options

Please let me know if this solves your issue.

Link to comment
Share on other sites

On 2017-2-6 at 3:11 PM, Sahil said:

I have few children pages under a parent page.  i want to show that children page under two parents page in Main menu as well as in breadcrumbs.

With the help of menu builder main menu show same childern page under both the parents, but Breadcrumbs follow the page tree structure.

how can i get the expected result?

Hi @Sahil,

Sorry I never resolved this. It's difficult to give an answer without getting more information about your pages tree structure.

Link to comment
Share on other sites

On 2017-3-23 at 3:43 PM, cjx2240 said:

Maybe a way to change a menu from one type to another?

I think it should be easy enough to just create a new menu item, no? I see no easy way of automating this so will have to let the idea go.

Link to comment
Share on other sites

  • 2 weeks later...

Update: Menu Builder Version 0.1.9.

Changelog

  1. Added support for multi-lingual menu items (both PW pages and custom ones)! Thanks @Michael van Laar for 'reminder'.

Note

  • Multilingual feature only applies to multi-lingual sites.
  • You have to choose the languages you want for your menu items (in menu settings).
  • Multi-lingual feature only applies to menu items. This means menu titles themselves remain as normal.
  • The feature only applies to menu item title and URL
  • If other language's item title or URL are left empty, in the frontend, these fallback to default language's title or URL respectively. This means, for other languages, you can have, for example, a German menu title but leave the German URL blank. In that case, assuming the default language is English, the German menu item will get the English URL.

Currently available in dev branch only. Please test and let me know, thanks.

Screenshots

Backend

mb_backend_ml_version_19.thumb.gif.1115b82437543f4a325b0c9bc12e8818.gif

Frontend

mb_frontend_ml_version_19.thumb.gif.45454215ab02f37ae0479c26a1e2790c.gif

Edited by kongondo
  • Like 5
Link to comment
Share on other sites

  • 4 weeks later...

Hi kongondo,

I've bumped into this issue again, and still cannot see how to resolve it without rendering the menu through custom code. I need to have parents displayed (simple nav menu) without their children, but need to assign current_class to the parent when one of its children is currently open. This is for the newsroom part of the site I'm working with. I'm on the dev branch of MB.

Is there no way to include an option like check_current_children on a local/global level so that it applies the current class even if the children are not listed? Or is there another really simple way of doing it?

Thanks a ton!

Link to comment
Share on other sites

On 16/08/2017 at 4:15 PM, Mike Rockett said:

Is there no way to include an option like check_current_children on a local/global level so that it applies the current class even if the children are not listed? Or is there another really simple way of doing it?

Sorry for late response. I have managed to get this working via a new option. Currently testing to check it doesn't break anything. Hopefully will commit later this week.

  • Like 1
Link to comment
Share on other sites

2 minutes ago, kongondo said:

Sorry for late response. I have managed to get this working via a new option. Currently testing to check it doesn't break anything. Hopefully will commit later this week.

No problem at all -- I'm sure you're quite a busy-bee.

Thank you, looking forward to testing it.

Link to comment
Share on other sites

Update: Menu Builder Version 0.2.0.

Changelog

  1. Modified 'current_class_level' option to apply 'current_class' to a menu item when viewing any of its descendant child pages (child, grandchild, etc.) in cases where those descendant pages are neither part of the menu nor included via 'include_children'. To enable this, set 'current_class_level' to '0'. Thanks @Mike Rockett for reviving this.

Note

  • I have tested this thoroughly but sometimes in Multilingual sites, depending on some conditions I am yet to pin down, the setting does not work properly. In such cases, using 'current_class_level' >= what you need does the trick.

Please test and let me know. In dev branch for now.

  • Like 2
Link to comment
Share on other sites

11 hours ago, kongondo said:

Update: Menu Builder Version 0.2.0.

Changelog

  1. Modified 'current_class_level' option to apply 'current_class' to a menu item when viewing any of its descendant child pages (child, grandchild, etc.) in cases where those descendant pages are neither part of the menu nor included via 'include_children'. To enable this, set 'current_class_level' to '0'. Thanks @Mike Rockett for reviving this.

Note

  • I have tested this thoroughly but sometimes in Multilingual sites, depending on some conditions I am yet to pin down, the setting does not work properly. In such cases, using 'current_class_level' >= what you need does the trick.

Please test and let me know. In dev branch for now.

Thank you! It does appear to work, but the root page is also assigned the current class when viewing any decsendant.

This is my code:

$view->siteNavigation = $menuBuilder->render('site-navigation', [
    'current_class' => 'here',
    'menu_css_class' => 'menu-items',
    'default_class' => 'menu-item',
    'current_class_level' => 0,
]);

And this is the output:

<ul class="menu-items">
	<li class="menu-item here">
		<a href='/'>Home</a>
	</li>
	<li class="menu-item">
		<a href='/about'>About</a>
	</li>
	<li class="menu-item">
		<a href='/security'>Security</a>
	</li>
	<li class="menu-item">
		<a href='/recycling-initiatives'>Recycling</a>
	</li>
	<li class="menu-item here">
		<a href='/newsroom/'>Newsroom</a>
	</li>
	<li class="menu-item">
		<a href='/contact-us'>Contact Us</a>
	</li>
</ul>

Is there no clean way to add an option to specific menu items that states "add current class here if an included / non-included descendant is current"?

Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...