2017 © Pedro Peláez
 

library menu14

Menu14 is a menu generator designated for ATK14 applications

image

atk14/menu14

Menu14 is a menu generator designated for ATK14 applications

  • Wednesday, March 28, 2018
  • by yarri
  • Repository
  • 2 Watchers
  • 0 Stars
  • 1,627 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 0 Forks
  • 0 Open issues
  • 6 Versions
  • 37 % Grown

The README.md

Menu14

Menu14 is a menu generator designated for ATK14 applications., (*1)

Menu14 has simple configuration that keeps in mind the ATK14 concept of controllers and actions., (*2)

Menu14 can build branched navigation structures. There is no limit of submenu levels count., (*3)

Menu14 can also be used for breadcrumbs., (*4)

Menu14 implements ArrayAccess, Iterator and Countable for easy usage., (*5)

Basic usage

In a controller:, (*6)

$menu = new Menu14();

$submenu = $menu->add("Archive");
$submenu->add("Whole archive",["articles/index"]);
$top_articles = $submenu->add("Top articles","top_articles");
  $top_articles->add("Last Month","top_articles/last_month");
  $top_articles->add("Last Year","top_articles/last_year");

// another submenu
$submenu = $menu->add("Information");
$submenu->add("About us","main/about");
$submenu->add("Contact","main/contact");

// disabled items should be displayed non clickable
$user_menu = $menu->add("User");
$user_menu->add("Login","logins/create_new",["disabled" => $is_user_logged]);
$user_menu->add("Logout","logins/destroy",["disabled" => !$is_user_logged]);
$user_menu->add("Profile","users/detail",["disabled" => !$is_user_logged]);

$this->tpl_data["menu"] = $menu;

In a template:, (*7)

{* file: shared/_menu.tpl *}
{if !$menu->isEmpty()}
<ul>
  {foreach $menu->getItems() as $item}
    <li{if $item->isActive()} class="active"{/if}{if $item->isDisabled()} class="disabled"{/if}>

      {if $item->getUrl() && !$item->isDisabled()}
        <a href="{$item->getUrl()}">{$item->getTitle()}</a>
      {else}
        {$item->getTitle()}  
      {/if}

      {* recursion *}
      {render partial="shared/menu" menu=$item->getSubmenu()}

    </li>
  {/foreach}
</ul>
{/if}

There are two methods for creating node in a menu., (*8)

$menu->add("Label",$targets_or_url,$options); // creates new menu item and return its submenu (which is at the moment empty)
$menu->addItem("Label",$targets_or_url,$options); // creates new menu item - this new menu item is returned

In a controller:, (*9)

$breadcrumbs = new Menu14();

$breadcrumbs[] = ["Home","main/index"];
$breadcrumbs[] = ["Articles","articles/index"];
if($tag = $article->getPrimaryTag()){
  $breadcrumbs[] = ["$tag",$this->_link_to(["action" => "articles/index", "tag_id" => $tag])];
}
$breadcrumbs[] = $article->getTitle();

$this->tpl_data["breadcrumbs"] = $breadcrumbs;

In a template:, (*10)

<ol class="breadcrumb">
  {foreach $breadcrumbs as $breadcrumb}
    <li>
      {if $breadcrumb->getUrl()}
        <a href="{$breadcrumb->getUrl()}">{$breadcrumb->getTitle()}</a>
      {else}
        {$breadcrumb->getTitle()}
      {/if}
    </li>
  {/foreach}
</ol>

Check out http://skelet.atk14.net/en/articles/ to see this example live., (*11)

Metadata

Metadata can be set on menus or menu items. It may be useful for storing things like colors, images, fade effects..., (*12)

$menu = new Menu14();

$websites = $menu->add("Frameworks");
$websites->setMeta("image_url","/public/icons/sprockets.png");

$item_atk14 = $website->addItem("Atk14","https://www.atk14.net/",[
  "meta" => [
    "image_url" => "/public/icons/atk14_birdie.png",
    "color" => "black"
  ]
]);

$item_laravel = $website->addItem("Laravel","https://laravel.com/");
$item_laravel->setMeta("image_url","/public/icons/laravel.png");
$item_laravel->setMeta("color","red");

// getting metadata

$websites->getMeta("image_url"); // "/public/icons/sprockets.png"
$websites->getMeta("color"); // null
$item_atk14->getMeta("image_url"); // "/public/icons/atk14_birdie.png"
$item_atk14->getMeta("color"); // "black"
$item_laravel->getMeta("image_url"); // "/public/icons/laravel.png"
$item_laravel->getMeta("color"); // "red"

Installation

Use the Composer to install Menu14, (*13)

cd path/to/your/project/
composer require atk14/menu14

Licence

Menu14 is free software distributed under the terms of the MIT license, (*14)

The Versions

28/03 2018

dev-master

9999999-dev https://github.com/atk14/Menu14

Menu14 is a menu generator designated for ATK14 applications

  Sources   Download

MIT

The Requires

  • php >=5.3.0

 

The Development Requires

navigation menu breadcrumbs atk14

04/12 2017

v1.3

1.3.0.0 https://github.com/atk14/Menu14

Menu14 is a menu generator designated for ATK14 applications

  Sources   Download

MIT

The Requires

  • php >=5.3.0

 

The Development Requires

navigation menu breadcrumbs atk14

03/09 2017

v1.2

1.2.0.0 https://github.com/atk14/Menu14

Menu14 is a menu generator designated for ATK14 applications

  Sources   Download

MIT

The Requires

  • php >=5.3.0

 

The Development Requires

navigation menu breadcrumbs atk14

30/08 2017

v1.1.1

1.1.1.0 https://github.com/atk14/Menu14

Menu14 is a menu generator designated for ATK14 applications

  Sources   Download

MIT

The Requires

  • php >=5.3.0

 

The Development Requires

navigation menu breadcrumbs atk14

30/08 2017

v1.1

1.1.0.0 https://github.com/atk14/Menu14

Menu14 is a menu generator designated for ATK14 applications

  Sources   Download

MIT

The Requires

  • php >=5.4.0

 

The Development Requires

navigation menu breadcrumbs atk14

29/08 2017

v1.0

1.0.0.0 https://github.com/atk14/Menu14

Menu14 is a menu generator designated for ATK14 applications

  Sources   Download

MIT

The Requires

  • php >=5.3.0

 

menu atk14