Overview

Namespaces

  • Inteve
    • Navigation

Classes

  • Inteve\Navigation\BaseControl
  • Inteve\Navigation\BreadcrumbsControl
  • Inteve\Navigation\MenuControl
  • Inteve\Navigation\Navigation
  • Inteve\Navigation\NavigationItem
  • Inteve\Navigation\Url

Exceptions

  • Inteve\Navigation\DuplicateException
  • Inteve\Navigation\MissingException
  • Inteve\Navigation\NavigationException
  • Overview
  • Namespace
  • Class
  1:   2:   3:   4:   5:   6:   7:   8:   9:  10:  11:  12:  13:  14:  15:  16:  17:  18:  19:  20:  21:  22:  23:  24:  25:  26:  27:  28:  29:  30:  31:  32:  33:  34:  35:  36:  37:  38:  39:  40:  41:  42:  43:  44:  45:  46:  47:  48:  49:  50:  51:  52:  53:  54:  55:  56:  57:  58:  59:  60:  61:  62:  63:  64:  65:  66:  67:  68:  69:  70:  71:  72:  73:  74:  75:  76:  77:  78:  79:  80:  81:  82:  83:  84:  85:  86:  87:  88:  89:  90:  91:  92:  93:  94:  95:  96:  97:  98:  99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 
<?php

    namespace Inteve\Navigation;

    use Nette\Utils\Strings;


    class MenuControl extends BaseControl
    {
        const TEMPLATE_DEFAULT = 'default';

        /** @var Navigation */
        private $navigation;

        /** @var string|NULL */
        private $subTree;

        /** @var string */
        private $templateFile;

        /** @var array|NULL */
        private $ignoredPages;


        public function __construct(Navigation $navigation)
        {
            $this->navigation = $navigation;
            $this->setTemplateFile(self::TEMPLATE_DEFAULT);
        }


        /**
         * @param  string  file path or template name
         * @return self
         */
        public function setTemplateFile($file)
        {
            if ($file === self::TEMPLATE_DEFAULT) {
                $file = __DIR__ . '/templates/menu/' . $file . '.latte';
            }
            $this->templateFile = $file;
            return $this;
        }


        /**
         * @deprecated  use setSubTree()
         */
        public function setParentPage($parentPage)
        {
            return $this->setSubTree($parentPage);
        }


        /**
         * @param  string|NULL
         */
        public function setSubTree($subTree)
        {
            $this->subTree = Navigation::formatPageId($subTree);
            return $this;
        }


        /**
         * @param  string[]|NULL
         */
        public function setIgnoredPages(array $ignoredPages = NULL)
        {
            if ($ignoredPages === NULL) {
                $this->ignoredPages = NULL;
                return $this;
            }

            $navigation = $this->navigation;

            foreach ($ignoredPages as $ignoredPage) {
                $ignoredPage = $navigation::formatPageId($ignoredPage);
                $this->ignoredPages[$ignoredPage] = TRUE;
            }

            return $this;
        }


        /**
         * @return void
         */
        public function render()
        {
            $items = array();
            $subTree = ltrim($this->subTree . '/', '/');
            $subTreeLevel = substr_count($subTree, '/');

            foreach ($this->navigation->getPages() as $pageId => $page) {
                if (isset($this->ignoredPages[$pageId])) {
                    continue;
                }

                $pageLevel = substr_count($pageId, '/');

                if (Strings::startsWith($pageId, $subTree) && $subTreeLevel === $pageLevel) {
                    $active = FALSE;

                    if ($pageId === '') { // homepage
                        $active = $this->navigation->isPageCurrent($pageId);

                    } else {
                        $active = $this->navigation->isPageActive($pageId);
                    }

                    $items[] = array(
                        'page' => $page,
                        'active' => $active,
                        'level' => 0,
                    );
                }
            }

            $template = $this->createTemplate();
            $template->items = $items;
            $template->render($this->templateFile);
        }
    }
inteve/navigation v1.2.0 API documentation API documentation generated by ApiGen