PHPackages                             atk14/menu14 - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. atk14/menu14

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

atk14/menu14
============

Menu14 is a menu generator designated for ATK14 applications

v2.0.4(10mo ago)042.8k↓58.6%MITPHPPHP &gt;=7.1

Since Aug 29Pushed 10mo ago2 watchersCompare

[ Source](https://github.com/atk14/Menu14)[ Packagist](https://packagist.org/packages/atk14/menu14)[ Docs](https://github.com/atk14/Menu14)[ RSS](/packages/atk14-menu14/feed)WikiDiscussions master Synced 3w ago

READMEChangelogDependencies (2)Versions (18)Used By (0)

Menu14
======

[](#menu14)

Menu14 is a menu generator designated for ATK14 applications.

Menu14 has simple configuration that keeps in mind the ATK14 concept of controllers and actions.

Menu14 can build branched navigation structures. There is no limit of submenu levels count.

Menu14 can also be used for breadcrumbs.

Menu14 implements ArrayAccess, Iterator and Countable for easy usage.

Basic usage
-----------

[](#basic-usage)

In a controller:

```
$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:

```
{* file: shared/_menu.tpl *}
{if !$menu->isEmpty()}

  {foreach $menu->getItems() as $item}
    isActive()} class="active"{/if}{if $item->isDisabled()} class="disabled"{/if}>

      {if $item->getUrl() && !$item->isDisabled()}
        {$item->getTitle()}
      {else}
        {$item->getTitle()}
      {/if}

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

  {/foreach}

{/if}

```

There are two methods for creating node in a menu.

```
$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

```

Breadcrumbs
-----------

[](#breadcrumbs)

In a controller:

```
$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:

```

  {foreach $breadcrumbs as $breadcrumb}

      {if $breadcrumb->getUrl()}
        {$breadcrumb->getTitle()}
      {else}
        {$breadcrumb->getTitle()}
      {/if}

  {/foreach}

```

Check out  to see this example live.

Metadata
--------

[](#metadata)

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

```
$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
------------

[](#installation)

Use the Composer to install Menu14

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

```

Licence
-------

[](#licence)

Menu14 is free software distributed [under the terms of the MIT license](http://www.opensource.org/licenses/mit-license)

###  Health Score

43

—

FairBetter than 90% of packages

Maintenance54

Moderate activity, may be stable

Popularity27

Limited adoption so far

Community8

Small or concentrated contributor base

Maturity67

Established project with proven stability

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~207 days

Recently: every ~221 days

Total

15

Last Release

314d ago

Major Versions

v1.6 → v2.02022-05-06

v1.x-dev → v2.0.12023-12-06

PHP version history (4 changes)v1.0PHP &gt;=5.3.0

v1.1PHP &gt;=5.4.0

v1.6PHP ^5.3|^7.0

v2.0PHP &gt;=7.1

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/974278?v=4)[Jaromir Tomek](/maintainers/yarri)[@yarri](https://github.com/yarri)

---

Top Contributors

[![yarri](https://avatars.githubusercontent.com/u/974278?v=4)](https://github.com/yarri "yarri (52 commits)")

---

Tags

menunavigationbreadcrumbsatk14

### Embed Badge

![Health badge](/badges/atk14-menu14/health.svg)

```
[![Health](https://phpackages.com/badges/atk14-menu14/health.svg)](https://phpackages.com/packages/atk14-menu14)
```

###  Alternatives

[spatie/menu

Html menu generator

7583.0M10](/packages/spatie-menu)[verbb/navigation

Create navigation menus for your site.

92698.4k18](/packages/verbb-navigation)[kartik-v/yii2-widget-sidenav

An enhanced side navigation menu styled for bootstrap (sub repo split from yii2-widgets)

364.1M8](/packages/kartik-v-yii2-widget-sidenav)[caffeinated/menus

Laravel Menus

132160.3k5](/packages/caffeinated-menus)[extpoint/yii2-megamenu

Configurable site map with auto generate page title, breadcrumbs and navigation

3311.4k](/packages/extpoint-yii2-megamenu)[geeklabs/ci4-breadcrumbs

Breadcrumb navigation for CodeIgniter 4

2814.8k](/packages/geeklabs-ci4-breadcrumbs)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
