mootools меню - помогите

Discussion in 'PHP' started by ufalog, 20 Dec 2009.

  1. ufalog

    ufalog Elder - Старейшина

    Joined:
    28 Jul 2007
    Messages:
    174
    Likes Received:
    6
    Reputations:
    -5
    делаю сайт http://www.egodesign.ru/ на нем стоит меню основанное на mootools... сейчас меню работает.... (нажимаеш на родителя и открывается подменю.)

    и закрываются под категории только при повторном нажатии

    а надо чтобы открывшееся подменю закрывалось пр открытии следующего


    исходник - http://egoweb.ru/mod_mainmenu.rar


    PHP:

    <?php
    /**
    * @package   yoo_mellow Template
    * @version   1.5.0 2009-10-01 16:02:39
    * @author    YOOtheme http://www.yootheme.com
    * @copyright Copyright (C) 2007 - 2009 YOOtheme GmbH
    */

    // no direct access
    defined('_JEXEC') or die('Restricted access');

    function 
    YOOMenuAccordionDecorator(&$node, $args) {

        
    $yoomenu  = &YOOMenu::getInstance();
        
    $params   = $yoomenu->getParams();
        
    $user     = &JFactory::getUser();
        
    $menu     = &JSite::getMenu();
        
    $active   = $menu->getActive();
        
    $path     = isset($active) ? array_reverse($active->tree) : null;

        
    // remove child items deeper than end level
        
    if (($args['end']) && ($node->attributes('level') >= $args['end'])) {
            
    $children = $node->children();
            foreach (
    $node->children() as $child) {
                if (
    $child->name() == 'ul') {
                    
    $node->removeChild($child);
                }
            }
        }

        if (
    $node->name() == 'ul') {
            
    // remove inaccessable items according to user rights
            
    foreach ($node->children() as $child) {
                if (
    $child->attributes('access') > $user->get('aid', 0)) {
                    
    $node->removeChild($child);
                }
            }
            
            
    // set order/first/last for li
            
    $count = count($node->children());
            foreach (
    $node->children() as $i => $child) {
                if (
    $i == 0) $child->addAttribute('first', 1);
                if (
    $i == $count - 1) $child->addAttribute('last', 1);
                
    $child->addAttribute('order', $i + 1);
            }
            
            
    // set ul level
            
    if (isset($node->_children[0])) {
                
    $level = $node->_children[0]->attributes('level') - $params->get('startLevel');
                
    $css   = 'level' . $level;
                
    $node->attributes('class') ? $node->addAttribute('class', $node->attributes('class') . ' ' . $css) : $node->addAttribute('class', $css);
            }
        }

        
    // set item styling
        
    if ($node->name() == 'li') {

            
    $item        = $menu->getItem($node->attributes('id'));
            
    $item_params = new JParameter($item->params);
            
    $sfx_params  = new YOOTemplateParameter($params->get('class_sfx'));    
            
    $page_params = new YOOTemplateParameter($item_params->get('pageclass_sfx'));        
            
    $level       = $node->attributes('level') - $params->get('startLevel');
            
    $images      = $sfx_params->get('images') != 'off';
            
    $color       = $page_params->get('itemcolor', '');
            
    $css         = 'level' . $level . ' item' . $node->attributes('order');
            
    $span_css    = '';

            if (
    $color) $css .= ' '.$color;
            if (
    $node->attributes('first')) $css .= ' first';
            if (
    $node->attributes('last')) $css .= ' last';
            if (isset(
    $node->ul) && ($args['end'] == 0 || $node->attributes('level') < $args['end'])) $css .= ' parent';
            if (isset(
    $path) && in_array($node->attributes('id'), $path)) $css .= ' active';
            if (isset(
    $path) && $node->attributes('id') == $path[0]) $css .= ' current';
            if (
    $item->type == 'separator') $css .= ' separator';

            
    // add a/span css classes
            
    if (isset($node->_children[0])) {
                
    $node->_children[0]->attributes('class') ? $node->_children[0]->addAttribute('class', $node->_children[0]->attributes('class') . ' ' . $css) : $node->_children[0]->addAttribute('class', $css);
            }

            
    // add accordion css class 
            
    if (isset($node->ul[0]) && $item->type == 'separator' && $level == 1) {
                
    $css .= ' toggler';
                
    $node->ul[0]->addAttribute('class', 'accordion');
            }

            
    // add item css classes
            
    $node->attributes('class') ? $node->addAttribute('class', $node->attributes('class') . ' ' . $css) : $node->addAttribute('class', $css);

            
    // add item background image
            
    if ($item_params->get('menu_image') && $item_params->get('menu_image') != -1) {
                if (isset(
    $node->_children[0])) {
                    if (
    $images && isset($node->_children[0]->span[0])) {
                        
    $img = 'images/stories/'.$item_params->get('menu_image');
                        
    $alt = dirname($img).'/'.JFile::stripExt(basename($img)).'_alt.'.JFile::getExt($img);

                        
    // check for alternate image
                        
    if (JFile::exists(JPATH_ROOT.DS.$alt)) {
                            
    $img = $alt;
                        }
                        
                        
    $node->_children[0]->span[0]->addAttribute('style', 'background-image: url('.JURI::base().$img.');');
                        
    $span_css .= 'icon';
                    }
                    if (
    $img = $node->_children[0]->getElementByPath('img')) {
                        
    $node->_children[0]->removeChild($img); // remove old item image
                    
    }
                }
            }

            
    // add span css and subtitle span
            
    if (isset($node->_children[0]) && isset($node->_children[0]->span[0])) {
                
    $node->_children[0]->span[0]->addAttribute('class', 'bg '.$span_css);
                
    $title = $node->_children[0]->span[0];
                
    $split = explode('||', $title->data(), 2);
                if (
    count($split) == 2) {
                    
    $span =& $node->_children[0]->span[0]->addChild('span', array('class' => 'title'));
                    
    $span->setData(trim($split[0]));
                    
    $span =& $node->_children[0]->span[0]->addChild('span', array('class' => 'subtitle'));
                    
    $span->setData(trim($split[1]));
                }
            }            
        }
        
        
    // remove inactive child items except for accordion
        
    if (!(isset($path) && in_array($node->attributes('id'), $path))) {
            if (isset(
    $args['children']) && !$args['children'])    {
                
    $children = $node->children();
                foreach (
    $node->children() as $child) {
                    if (
    $child->name() == 'ul') {
                        
                        
    // dont remove children for accordion
                        
    if (!$child->attributes('class') == 'accordion') {
                            
    $node->removeChild($child);
                        }
                    }
                }
            }
        }

        
    $node->removeAttribute('id');
        
    $node->removeAttribute('rel');
        
    $node->removeAttribute('level');
        
    $node->removeAttribute('access');
        
    $node->removeAttribute('order');
        
    $node->removeAttribute('first');
        
    $node->removeAttribute('last');
    }