Operating Instructions

Theory of operation

Mymenus separates logic from presentation almost 100%!

It is mymenus task to generate an array with menus information and let each skin decide what to do with that information.

How can skin know when to open a new <li> or <ul> and when to close it?

Mymenus append that information to each menu item, that way you can know if that item should be prefixed with a or not.

This is the composition of an item array:

 [id] => 3 (id of the menu item)
 [pid] => 0 (id of the parent menu item)
 [mid] => 2 (id of the menu package)
 [title] => Home (title of the menu item)
 [alt_title] => Home (alt/title of the menu item)
 [visible] => 1 (visibility of the menu item, it will be 1 for all menus,you can disregard it)
 [link] => http://localhost/xoops-2.4.5/htdocs/ (alt/title of the menu item)
 [weight] => 1 (this is for internal usage of the builder class, you can disregard it)
 [target] => _self (to be used in link target element, it can be _self, _blank, etc..)
 [groups] => Array (holds the groups who can view this link, you can disregard it)
 ([0] => 2
  [1] => 3
 )
 [hooks] => Array (holds the hooks available to render the menu, you can disregard it)
 ()
 [image] => (image to be used in the link, you can choose not to support it in your skin)
 [css] => (this is inline css for this item, it goes inside <a style="$item.css">)
 [oul] => 1 (IMPORTANT! Open UL -> this menu item requires skin to prepend <ul> open element tag)
 [oli] => 1 (IMPORTANT! Open LI -> this menu item requires skin to prepend <li> open element tag)
 [close] => (IMPORTANT! this holds closing tags, it will automatically generate </li></ul> tags for you)
 [cul] => (IMPORTANT! Close UL -> this menu item requires skin to append </ul> close element tag, you should use [close] instead, unless you are not supporting multilevel menus)
 [cli] => (IMPORTANT! Close LI -> this menu item requires skin to append </li> close element tag, you should use [close] instead, unless you are not supporting multilevel menus)
 [hassub] => 1 (informs if this menu item has submenus, 1 for true, 0 for false)
 [level] => 0 (informs the level of nesting of the menu item, 0 is for root, 1 for second level, etc..)
 [down_weight] => 3 (for usage in menu sorting in admin side, you can ignore it)
 [selected] => 1 (IMPORTANT, this tells the skin to highlight this item)
 [topselected] => 1 (Important, this informs the skin that the menu is of level 0(root) and it is selected, you should highlight it)
 )

Skin structure

Skins go into

and they should have a skin_version.php file in it

skin_version.php structure:

or

or

//code to be appended in the theme tag

//you can pass any configuration from this file to the template using ['config']

example:

This can be fetched in template with <{$config.home}> and <{$config.iconset}>

Smarty variables available in the template

For Theme designers

Since users can choose the smarty variable for each menu,

I would advise you to use <{$xoops_links_navbar}> as a place holder.

If you provide a skin for your theme, ask users to:

Important to know:

Links and images are relative to the root of your site:

For linking to external sites you need to use complete url:

http://www.xuups.com

You can use DECORATORS for links, images, title, and alt_title.

The decorators follow this syntax:

There are 6 decorators available:

  • USER -> gets info for the user that is seeing the page

  • OWNER -> gets info for the user that match uid on the url(if given)

  • URI -> gets info about the url arguments

  • MODULE -> gets dynamic menu from a module (Used in title field only)

  • SMARTY -> gets smarty variables

  • CONSTANT -> gets defined constants

Some syntax examples{USER|UNAME} gets the username of this user, returns anonymous if not a user{USER|UID} gets the uid of this user, returns 0 if not a user{USER|REGDATE} gets the regdate of this user, returns empty if not a user{USER|any other field of the user table} yes! You can get what you need!Some special fields you may use:

The same is valid for OWNER:

And you can get any parameter on the uri with:

Example of links using decorators:

Example on titles using decorators:

You have searched for {URI|SEARCH}Populating menus with modules information:

Using smarty information:

Using constants information:

Last updated