Перейти к содержанию
Форум поддержки пользователей VamShop

Выделение текущего пункта меню


Рекомендуемые сообщения

Было необходимо выводить развернутым дерево меню.

Для этого использовал файл templates/имя_шаблона/source/boxes/categories.php из модуля CSS-меню.

Получилось как надо, но не отмечается активный пункт меню (т.е. не добавляется стиль "Current")

 

Подскажите, пожалуйста, куда добавить код, чтобы к текущему пункту меню добавлялось class="current" ?

 

Вот листинг файла categories.php :

 

<?php
$start = microtime();
$box = new vamTemplate;
$box_content = '';
$box->assign('language', $_SESSION['language']);
// set cache ID
if (!CacheCheck()) {
    $cache=false;
    $box->caching = 0;
} else {
    $cache=true;
    $box->caching = 1;
    $box->cache_lifetime = CACHE_LIFETIME;
    $box->cache_modified_check = CACHE_CHECK;
    $cache_id = $_SESSION['language'].$_SESSION['customers_status']['customers_status_id'].$cPath;
}
if(!$box->is_cached(CURRENT_TEMPLATE.'/boxes/box_categories.html', $cache_id) || !$cache){
$box->assign('tpl_path', 'templates/'.CURRENT_TEMPLATE.'/');
    // cssMenu - Begin of configuration //
    $cssMenuConfig = array();
    $cssMenuConfig['ShowEmptyCategories'] = true;  // Should CSS Menu show empty categories? true/false
    $cssMenuConfig['includeProducts']     = false; // Should CSSMenu show products
    $cssMenuConfig['maxProductsInMenu']   = 8;     // Max.number of products to show in menu(stops massive menus being created)
    $cssMenuConfig['moreText']            = "More...."; // Max.number of products to show in a menu(stops massive menus being created)
    // cssMenu - End of configuration //
// include needed functions
//require_once (DIR_FS_CATALOG.'templates/'.CURRENT_TEMPLATE.'/source/inc/vam_show_category.inc.php');
require_once (DIR_FS_INC.'vam_has_category_subcategories.inc.php');
require_once (DIR_FS_INC.'vam_count_products_in_category.inc.php');
$categories_string = '';
if (GROUP_CHECK == 'true') {
    $group_check = "and c.group_permission_".$_SESSION['customers_status']['customers_status_id']."=1 ";
}
$categories_query = "select c.categories_id,
                                           cd.categories_name,
                                           c.parent_id from ".TABLE_CATEGORIES." c, ".TABLE_CATEGORIES_DESCRIPTION." cd
                                           where c.categories_status = '1'
                                           and c.parent_id = '0'
                                           ".$group_check."
                                           and c.categories_id = cd.categories_id
                                           and cd.language_id='".(int) $_SESSION['languages_id']."'
                                           order by sort_order, cd.categories_name";
$categories_query = vamDBquery($categories_query);
  function PrintProducts( $category_id, $categories_string , $includeul, $languageID)
  {
       global $cssMenuConfig;
       $product_path="product_info.php?cPath=".$category_id."&products_id=";
       $products_query = vam_db_query("select pc.products_id, pc.categories_id from products_to_categories pc, products p where pc.categories_id = " . $category_id . " and p.products_id = pc.products_id and products_status=1 order by products_price");
       $productsDisplay=mysql_num_rows( $products_query );
       $addMore= false;
       if ( $includeul  && $productsDisplay > 0 ) {
         $returnval .= "<ul>";
       }
       if ( $productsDisplay > $cssMenuConfig['maxProductsInMenu'] ) {
        $productsDisplay=$cssMenuConfig['maxProductsInMenu'];
        $addMore= true;
       }
       $count_string = '';
        if (SHOW_COUNTS == 'true') {
          if ($totalitemsincategory > 0) {
            $count_string = '&nbsp;(' . $totalitemsincategory . ')';
          }
        }
       $i=0;
       while ($i < $productsDisplay) {
         $products = vam_db_fetch_array($products_query);
         $product_query = vam_db_query("select products_name from products_description where products_id = " . $products['products_id'] . " AND language_id = ".$languageID );
         $product = vam_db_fetch_array($product_query);
         $returnval .= "<li><a href='".$product_path.$products['products_id']."'>".$product['products_name']."</a></li>\n";
//         $returnval .= "<li><a href='".vam_href_link(FILENAME_PRODUCT_INFO, vam_product_link($products['products_id'], $product['products_name']))."</a></li>\n";
         $i++;
       }
        if ( $addMore ) {
         $returnval .= "<li><a href='".$categories_string."'>".$cssMenuConfig['moreText']."</a></li>\n";
        }
        if ( $productsDisplay > 0 || !$includeul ) {
        $returnval .= "</ul>";
        }
        return $returnval;
  }
  function PrintSubMenus( $parentID, $languageID, $start_path ){
      global $cssMenuConfig;
      $returnval = '';
      if (($start_path == '') && ($parentID > 0)) {
        $start_path = $parentID;
      } else {
        if ($parentID > 0) $start_path .= "_" . $parentID;
      }
      if ($parentID != 0) {
        $returnval .= "<ul>";
      } else {
        $returnval .= "<div>";
        $returnval .= "<ul id='CatNavimenu'>";
      }

if (GROUP_CHECK == 'true') {
    $group_check = "and c.group_permission_".$_SESSION['customers_status']['customers_status_id']."=1 ";
}
      $categories_query = vam_db_query("select c.categories_id, cd.categories_name, c.parent_id from " . TABLE_CATEGORIES . " c, " . TABLE_CATEGORIES_DESCRIPTION . " cd where c.categories_status = '1' and c.parent_id = '".$parentID."' ".$group_check." and c.categories_id = cd.categories_id and cd.language_id='" . (int)$languageID ."' order by sort_order, cd.categories_name");
      while ($categories = vam_db_fetch_array($categories_query))  {
        if ($start_path == "") {
          $grouppath = $categories['categories_id'];
        } else {
          $grouppath = $categories['categories_id'];
// $grouppath = $start_path . "_" . $categories['categories_id'];
        }
        $cPath_new = vam_category_link($grouppath,$categories['categories_name']);
        $categories_string = vam_href_link(FILENAME_DEFAULT, $cPath_new);
        $totalitemsincategory = vam_count_products_in_category($categories['categories_id']);
        $count_string = '';
        if ((SHOW_COUNTS == 'true') && ($totalitemsincategory > 0) ){
            $count_string = '&nbsp;(' . $totalitemsincategory . ')';
        }
        if (cssMenu_ShowCategory($cssMenuConfig['ShowEmptyCategories'], $totalitemsincategory)) {
            $returnval .= "<li><a href='".$categories_string."'>".$categories['categories_name'].$count_string."</a>\n";
        }
        if ( vam_has_category_subcategories($categories['categories_id'] ) ) {
           $returnval .= PrintSubMenus( $categories['categories_id'], $languageID, $start_path );
           if ( $cssMenuConfig['includeProducts'] ) {
              $returnval .= PrintProducts($categories['categories_id'],$categories_string, false, $languageID);
           }
        } else {
           if ( $cssMenuConfig['includeProducts'] ) {
              $returnval .= PrintProducts($categories['categories_id'],$categories_string, true, $languageID);
           }
        }
        if (cssMenu_ShowCategory($cssMenuConfig['ShowEmptyCategories'], $totalitemsincategory)) {
           $returnval .= "</li>";
        }
      }
      if ( !$cssMenuConfig['includeProducts'] ) {
        $returnval .= "</ul>";
      }
      if ($parentID == 0) $returnval .= "</div>";
      return $returnval;
  }
  function cssMenu_ShowCategory( $switch, $products) {
      if ( $switch == 1 ) {
         return true;
      } else {
        if ($products > 0) {
           return true;
        } else {
           return false;
        }
      }
  }
$box->assign('BOX_CONTENT', PrintSubMenus( 0, $_SESSION['languages_id'], '' ));
}
// set cache ID
if (!$cache) {
    $box_categories = $box->fetch(CURRENT_TEMPLATE.'/boxes/box_categories.html');
} else {
    $box_categories = $box->fetch(CURRENT_TEMPLATE.'/boxes/box_categories.html', $cache_id);
}
$vamTemplate->assign('box_CATEGORIES', $box_categories);
?>

 

 

Спасибо.

Ссылка на сообщение
Поделиться на другие сайты

Можно посмотреть как в стадартном меню выделяется категория и сделать аналогично в Вашем меню.

Ссылка на сообщение
Поделиться на другие сайты

В стандартном меню активный пункт выделяется слассом Current

 

Этот класс формируется не в оригинальном файле templates/имя_шаблона/source/boxes/categories.php

а в файле templates/имя_шаблона/source/inc/vam_show_category.inc.php

Вот его код:

 

<?php
function vam_show_category($counter) {
global $foo, $categories_string, $id;
$categories_string .= '<li class="CatLevel'.$foo[$counter]['level'].'';
if ( ($id) && (in_array($counter, $id)) ) {
$categories_string .=  ' Current">';
} else {
$categories_string .=  '">';
}
$categories_string .=  '<a href="';
$cPath_new=vam_category_link($counter,$foo[$counter]['name']);
$categories_string .= vam_href_link(FILENAME_DEFAULT, $cPath_new);
$categories_string .= '">';

// display category name
$categories_string .= $foo[$counter]['name'];
if (SHOW_COUNTS == 'true') {
$products_in_category = vam_count_products_in_category($counter);
if ($products_in_category > 0) {
$categories_string .= '&nbsp;(' . $products_in_category . ')';
}
}
$categories_string .= '</a></li>';
if ($foo[$counter]['next_id']) {
vam_show_category($foo[$counter]['next_id']);
} else {
$categories_string .= '';
}
}
?>

 

 

Но в новом файле categories.php из модуля CSS-меню ссылка на файл vam_show_category.inc.php закомментирована.

 

Не силен в PHP и не знаю, как решить эту проблему. Т.е как засунуть условие, чтобы текуший пункт меню помечался классом Current

Ссылка на сообщение
Поделиться на другие сайты

Может попробовать поменять:

 

            $returnval .= "<li><a href='".$categories_string."'>".$categories['categories_name'].$count_string."</a>\n";

на что-то типа:

 

            $returnval .= "<li><a ".(($_GET['cat'] == $categories['categories_id']) ? "class=current' " : "")."href='".$categories_string."'>".$categories['categories_name].$count_string."</a>\n";
Ссылка на сообщение
Поделиться на другие сайты

Да, работает.

 

Спасибо!

 

Но чтобы класс "вешался" на тег <li> (а не на тег <a href=.....) я немного изменил на это:

 

$returnval .= "<li ".(($_GET['cat'] == $categories['categories_id']) ? "class=current'" : "")."><a href='".$categories_string."'>".$categories['categories_name].$count_string."</a>\n";

Ссылка на сообщение
Поделиться на другие сайты
×
×
  • Создать...