LiveInternetMail.ru
Форум русской поддержки Joomla!® CMS
28.05.2012, 02:58:47 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 1.7 FAQ Joomla 1.5 FAQ Joomla 1.0 FAQ Правила форума Новости Joomla Войти Регистрация Помощь  
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор Тема: Задание уникального класса для пунктов меню модуля mainmenu.  (Прочитано 1806 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Glip
Захожу иногда
**

Репутация: +1/-0
Offline Offline

Сообщений: 23


« : 26.09.2009, 01:50:13 »

Надо сделать горизонтальное меню с картинками без текста для каждого пункта меню. Решил делать это стандартным модулем mod_mainmenu. Для того, чтобы добавить картинки в меню хочу к каждому пункту добавить уникальный класс вида "truck_n", где n - числа от 1 до количества пунктов меню. Тогда легко будет через CSS файл присвоить каждому пункту свою картинку. Для этого пытаюсь подправить файл default.php, который отвечает за вывод меню (прилагается). Проблема в том, что php практически не знаю. Догадался где нужно ковырять. Добился того, что добавляется class="truck1":
Код
<div class="nav">
<ul class="artmenu">
<li class="item28">
<a href="/index.php?option=com_content&amp;view=article&amp;id=25&amp;Itemid=28">
<span class="truck1"><span>Truck</span></span>
</a></li>
<li class="item29">
<a href="/index.php?option=com_content&amp;view=article&amp;id=22&amp;Itemid=29">
<span class="truck1"><span>Long truck</span></span>
</a></li>

в файле default.php добавил строку 95:
Код
$span->addAttribute('class','truck'.++$idmenu);
где $idmenu - порядковый номер пункта меню от 1 до 6 (в моем случае)
только не могу добиться, чтобы $idmenu для каждого последующего пункта меню увеличивался на 1. Помогите, пожалуйста.  !

* default.rar (1.17 Кб - загружено 58 раз.)
Записан
beliyadm
Профи
********

Репутация: +1438/-61
Offline Offline

Пол: Мужской
Сообщений: 8893


Севастополь==Россия


« Ответ #1 : 26.09.2009, 01:54:17 »

Не надо ничего ковырять, для каждого элемента списка меню (если в настройках стоит плоский список) генерится уникальный класс, к примеру из вашего же кода <li class="item29">
Вот для item29 в стилях и назначайте картинку фоновую
Записан
Glip
Захожу иногда
**

Репутация: +1/-0
Offline Offline

Сообщений: 23


« Ответ #2 : 26.09.2009, 02:14:06 »

Тоже вариант. Но тогда до того, как создадутся окончательные статьи не будет известен их id. Пока у меня сайт не заполнен контентом. То что есть - это просто временные статьи.
Записан
beliyadm
Профи
********

Репутация: +1438/-61
Offline Offline

Пол: Мужской
Сообщений: 8893


Севастополь==Россия


« Ответ #3 : 26.09.2009, 02:26:49 »

Тоже вариант. Но тогда до того, как создадутся окончательные статьи не будет известен их id. Пока у меня сайт не заполнен контентом. То что есть - это просто временные статьи.
так в чем проблема набить сайт контентом (не обязательно все статьи, главное структура меню) и после за 20 минут набросать заранее подготовленные цифирьки Itemid в болванку стилей (оттестированную и отстроенную на полигоне заранее)
Записан
ankoch
Завсегдатай
*****

Репутация: +48/-1
Offline Offline

Пол: Мужской
Сообщений: 621



« Ответ #4 : 23.12.2010, 12:14:11 »

Не нравится мне, что этот класс в Joomla никакой информативности не несёт, да и то, что если на место одного пункта меню захочется расположить какой-то другой, то придётся править CSS и добавлять новый класс с этим самым itemid.

Как бы сделать так, чтобы помимо itemid добавлялся класс с псевдонимом пункта меню?
Записан
SmokerMan
Профи
********

Репутация: +521/-20
Offline Offline

Пол: Мужской
Сообщений: 5195



« Ответ #5 : 23.12.2010, 12:24:59 »

Как бы сделать так, чтобы помимо itemid добавлялся класс с псевдонимом пункта меню?
какая разница  id или псевдоним? Это уникальные значения.
Записан
ankoch
Завсегдатай
*****

Репутация: +48/-1
Offline Offline

Пол: Мужской
Сообщений: 621



« Ответ #6 : 23.12.2010, 12:27:28 »

При создании другого пункта я запросто могу прописать старый псевдоним и всё в порядке, а с id такой номер не пройдёт.

Хотя может было бы удобно задавать свой собственный класс для нужного пункта меню. Захотел - добавил свой класс, не захотел - останется только с itemid.
« Последнее редактирование: 23.12.2010, 12:36:19 от ankoch » Записан
SmokerMan
Профи
********

Репутация: +521/-20
Offline Offline

Пол: Мужской
Сообщений: 5195



« Ответ #7 : 23.12.2010, 12:55:36 »

Да, странно конечно это как-то. Ну так добавляйте что хотите никто же не мешает то Azn
вот пример с псевдонимом в разметке default.php
Цитировать
   if (($node->name() == 'li') && ($id = $node->attributes('id'))) {
      if ($node->attributes('class')) {
         $node->addAttribute('class', $node->attributes('class').' item'.$id.' '.$menu->getItem($id)->alias);
      } else {
         $node->addAttribute('class', 'item'.$id.' '.$menu->getItem($id)->alias);
      }
   }
Записан
ankoch
Завсегдатай
*****

Репутация: +48/-1
Offline Offline

Пол: Мужской
Сообщений: 621



« Ответ #8 : 23.12.2010, 15:11:10 »

SmokerMan спасибо +, попробую.
Записан
dron
Завсегдатай
*****

Репутация: +4/-7
Offline Offline

Сообщений: 725


« Ответ #9 : 19.04.2011, 23:59:39 »

добрый день.

а я использую коммерческое меню. у него свой default.php. вот его код: 

Код:
<?php

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

//
if ( ! defined('modMainMenuXMLCallbackDefined') )
{
//
function modMainMenuXMLCallback(&$node, $args)
{
//
$user = &JFactory::getUser();
$menu = &JSite::getMenu();
$active = $menu->getActive();
$path = isset($active)? array_reverse($active->tree) : null;
//
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')
{
//
foreach ($node->children() as $child)
{
//
if ($child->attributes('access') > $user->get('aid', 0))
{
//
$node->removeChild($child);
}
}
}
//
if($node->attributes('level') == 1)
{
//
if ($node->attributes('class'))
{
//
$node->addAttribute('class', $node->attributes('class').' level1');
}
else //
{
//
$node->addAttribute('class', 'level1');
}
}
//
if($node->name() == 'li')
{
//
$children = $node->children();
//
if ($node->attributes('level') == 1)
{

if(isset($children[1]) && $children[1]->name() == 'ul')
{
//
if($node->attributes('class'))
{
//
$node->addAttribute('class', $node->attributes('class').' topli');
}
else //
{
//
$node->addAttribute('class', ' topli');
}
}
//
if ($children[0]->name() == 'a')
{
//
if($node->attributes('class'))
{
//
$children[0]->addAttribute('class', $node->attributes('class').' topdaddy');
}
else //
{
//
$children[0]->addAttribute('class', 'topdaddy');
}
}
}
}
//
if (isset($path) && in_array($node->attributes('id'), $path))
{
//
if ($node->attributes('class'))
{
//
$node->addAttribute('class', $node->attributes('class').' active');
}
else //
{
//
$node->addAttribute('class', 'active');
}
}
else //
{
//
if (isset($args['children']) && !$args['children'])
{
//
$children = $node->children();
//
foreach ($node->children() as $child)
{
//
if ($child->name() == 'ul') {
//
$node->removeChild($child);
}
}
}
}
//
if (isset($path) && $node->attributes('id') == $path[0])
{
//
$node->addAttribute('id', 'current');
}
else //
{
//
$node->removeAttribute('id');
}
//
$node->removeAttribute('level');
//
$node->removeAttribute('access');
}
//
define('modMainMenuXMLCallbackDefined', true);
}
//
modMainMenuHelper::render($params, 'modMainMenuXMLCallback');

где здесь нужно дописать .' '.$menu->getItem($id)->alias); что бы заполучить id для каждого пункта меню?

заранее спасибо!
Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Рейтинг@Mail.ru Rambler Top100 Powered by SMF 1.1.16 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet