| Current Path : /var/www/iplanru/data/www/i-plan.ru/templates/yoo_everest/warp/src/Warp/Helper/ | 
| Current File : /var/www/iplanru/data/www/i-plan.ru/templates/yoo_everest/warp/src/Warp/Helper/MenuHelper.php | 
<?php
/**
* @package   Warp Theme Framework
* @author    YOOtheme http://www.yootheme.com
* @copyright Copyright (C) YOOtheme GmbH
* @license   http://www.gnu.org/licenses/gpl.html GNU/GPL
*/
namespace Warp\Helper;
use Warp\Warp;
/**
 * Menu helper class.
 */
class MenuHelper extends AbstractHelper
{
    /**
     * Menu renderers.
     *
     * @var array
     */
    protected $renderers = array();
    /**
     * Constructor.
     */
    public function __construct(Warp $warp)
    {
        parent::__construct($warp);
        // register menus
        foreach ($this['config']->get('menu', array()) as $name => $renderer) {
            $this->register($name, $renderer);
        }
    }
    /**
     * Register a menu renderer.
     *
     * @param string          $name
     * @param string|Renderer $renderer
     */
    public function register($name, $renderer)
    {
        $this->renderers[$name] = $renderer;
    }
    /**
     * Process menu module and apply renderers.
     *
     * @param object $module
     * @param array  $renderers
     *
     * @return string
     */
    public function process($module, $renderers)
    {
        // init vars
        $menu     = $this['dom']->create($module->content);
        $defaults = array('modifier' => '', 'accordion' => false);
        $module->nav_settings = isset($module->nav_settings) ? array_merge($defaults, $module->nav_settings) : $defaults;
        foreach (array_unique((array) $renderers) as $renderer) {
            if (isset($this->renderers[$renderer])) {
                if (is_string($class = $this->renderers[$renderer])) {
                    $this->renderers[$renderer] = new $class;
                }
                $menu = $this->renderers[$renderer]->process($module, $menu);
            }
            if (!$menu) {
                return $module->content;
            }
        }
        return $menu->first('ul:first')->html();
    }
}