it-swarm-tr.com

Joomla'daki her alt menüye sayısal bir değer ekleme

<?php
/**
 * @package     Joomla.Site
 * @subpackage  mod_menu
 *
 * @copyright   Copyright (C) 2005 - 2014 Open Source Matters, Inc. All rights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

defined('_JEXEC') or die;

// Note. It is important to remove spaces between elements.
?>
<?php // The menu class is deprecated. Use nav instead. ?>
<ul class="nav menu<?php echo $class_sfx;?>"<?php
    $tag = '';

    if ($params->get('tag_id') != null)
    {
        $tag = $params->get('tag_id') . '';
        echo ' id="' . $tag . '"';
    }
?>>
<?php
$num = 1;
foreach ($list as $i => &$item)
{
    $class = 'item-' . $item->id;

    if ($item->id == $active_id)
    {
        $class .= ' current';
    }

    if (in_array($item->id, $path))
    {
        $class .= ' active';
    }
    elseif ($item->type == 'alias')
    {
        $aliasToId = $item->params->get('aliasoptions');

        if (count($path) > 0 && $aliasToId == $path[count($path) - 1])
        {
            $class .= ' active';
        }
        elseif (in_array($aliasToId, $path))
        {
            $class .= ' alias-parent-active';
        }
    }

    if ($item->type == 'separator')
    {
        $class .= ' divider';
    }

    if ($item->deeper)
    {
        $class .= ' deeper';
    }

    if ($item->parent)
    {
        $class .= ' parent';
    }

    if (!empty($class))
    {
        $class = ' class="' . trim($class) . '"';
    }

    echo '<li' . $class . '>';

    // Render the menu item.
    switch ($item->type) :
        case 'separator':
        case 'url':
        case 'component':
        case 'heading':
            require JModuleHelper::getLayoutPath('mod_menu', 'default_' . $item->type);
            break;

        default:
            require JModuleHelper::getLayoutPath('mod_menu', 'default_url');
            break;
    endswitch;

    // The next item is deeper.
    if ($item->deeper)
    {
        echo '<ul class="nav-child unstyled small lvl_'.($num++).'>';
    }
    elseif ($item->shallower)
    {
        // The next item is shallower.
        echo '</li>';
        echo str_repeat('</ul></li>', $item->level_diff);
    }
    else
    {
        // The next item is on the same level.
        echo '</li>';
    }
}
?></ul>

Buradaki önemli kod bu.

    {
        echo '<ul class="nav-child unstyled small lvl_'.($num++).'>';
    }

Sorun, sitem başlatıldığında her alt menü katmanına artı 1 ekler, ancak katmanlar üst öğeye en yakın olduğunda yeniden başlamaz.

Örnek İstediğim bu

 <ul class="lvl_1">
   <li>
      <ul class="lvl_2">
      </ul>
   </li>
 </ul>
 <ul class="lvl_1">
   <li>
      <ul class="lvl_2">
      </ul>
   </li>
 </ul>

Aldığım şey bu

 <ul class="lvl_1">
   <li>
      <ul class="lvl_2">
      </ul>
   </li>
 </ul>
 <ul class="lvl_3">
   <li>
      <ul class="lvl_4">
      </ul>
   </li>
 </ul>

Bu muhtemelen düzeltmek için süper kolaydır.

6
Cam

$ Num kullanmak ve artırmak yerine, bunu $ item-> level ile değiştirin.

echo '<ul class="nav-child unstyled small lvl_'.$item->level.'">';

Not: Kodunuzda, sınıf özniteliği için bir kapanış çift tırnak işareti eksikti.

9
Zachary Draper

Bu, aynı gereksinimle ilgilenen geçmiş bir joomla 2.5 sitesinde yaptığım bir menü modülü geçersiz kılma. Buraya yerel dev sürümümde olduğu gibi default.php dosyasındaki kodun eski bir sürümünü buraya yapıştırıyorum. Daha sonra son sürüm için kodu değiştirdim veya geliştirdim, ancak buraya yapıştırmak için bu koda artık erişemiyorum. Bu yüzden dikkatli kullanın veya sorunları bildirin, bu yüzden yazıyı burada düzenleyeceğim.

Maddeler (li) seviyesinin yanı sıra, alt ul'lara da bir sınıf atar.

<?php
/**
 * @package     Joomla.Site
 * @subpackage  mod_menu
 * @copyright   Copyright (C) 2005 - 2014 Open Source Matters, Inc. All rights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

// No direct access.
defined('_JEXEC') or die;

// Note. It is important to remove spaces between elements.
?>

<ul class="menu<?php echo $class_sfx;?>"<?php
    $tag = '';
    if ($params->get('tag_id')!=NULL) {
        $tag = $params->get('tag_id').'';
        echo ' id="'.$tag.'"';
    }
?>>
<?php
foreach ($list as $i => &$item) :
    $class = 'item-'.$item->id;
    if ($item->id == $active_id) {
        $class .= ' current';
    }

    if (in_array($item->id, $path)) {
        $class .= ' active';
    }
    elseif ($item->type == 'alias') {
        $aliasToId = $item->params->get('aliasoptions');
        if (count($path) > 0 && $aliasToId == $path[count($path)-1]) {
            $class .= ' active';
        }
        elseif (in_array($aliasToId, $path)) {
            $class .= ' alias-parent-active';
        }
    }

    if ($item->deeper) {
        $class .= ' deeper';
    }

    if ($item->level == 1) {
        $class .= ' items-level1';
    }
    if ($item->level == 2) {
        $class .= ' items-level2';
    }

    if ($item->level == 3) {
        $class .= ' items-level3';
    }
    if ($item->level == 4) {
        $class .= ' items-level4';
    }

    if ($item->parent) {
        $class .= ' parent';
    }

    if (!empty($class)) {
        $class = ' class="'.trim($class) .'"';
    }

    echo '<li'.$class.'>';

    // Render the menu item.
    switch ($item->type) :
        case 'separator':
        case 'url':
        case 'component':
            require JModuleHelper::getLayoutPath('mod_menu', 'default_'.$item->type);
            break;

        default:
            require JModuleHelper::getLayoutPath('mod_menu', 'default_url');
            break;
    endswitch;

    // The next item is deeper.
    if ($item->deeper) {
        echo '<ul'; if($item->level == 1) {echo " class='first-subs'";} if($item->level == 2) {echo " class='second-subs'";}if($item->level == 3) {echo " class='third-subs'";}
        echo '>';
    }
    // The next item is shallower.
    elseif ($item->shallower) {
        echo '</li>';
        echo str_repeat('</ul></li>', $item->level_diff);
    }
    // The next item is on the same level.
    else {
        echo '</li>';
    }
endforeach;
?></ul>
2
FFrewin