0 Пользователей и 1 Гость просматривают эту тему.
  • 9 Ответов
  • 3207 Просмотров
*

Glip

  • Новичок
  • 23
  • 1 / 0
Надо сделать горизонтальное меню с картинками без текста для каждого пункта меню. Решил делать это стандартным модулем mod_mainmenu. Для того, чтобы добавить картинки в меню хочу к каждому пункту добавить уникальный класс вида "truck_n", где n - числа от 1 до количества пунктов меню. Тогда легко будет через CSS файл присвоить каждому пункту свою картинку. Для этого пытаюсь подправить файл default.php, который отвечает за вывод меню (прилагается). Проблема в том, что php практически не знаю. Догадался где нужно ковырять. Добился того, что добавляется class="truck1":
Код: html4strict
<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:
Код: php
$span->addAttribute('class','truck'.++$idmenu);
где $idmenu - порядковый номер пункта меню от 1 до 6 (в моем случае)
только не могу добиться, чтобы $idmenu для каждого последующего пункта меню увеличивался на 1. Помогите, пожалуйста.  !

[вложение удалено Администратором]
*

beliyadm

  • Легенда
  • 8839
  • 1624 / 63
  • Севастополь == Россия
Не надо ничего ковырять, для каждого элемента списка меню (если в настройках стоит плоский список) генерится уникальный класс, к примеру из вашего же кода <li class="item29">
Вот для item29 в стилях и назначайте картинку фоновую
Все истины, которые я хочу вам изложить, — бесстыдная ложь.
Записки нетрезвого кодера || -=Joomla FAQ=- || -=все плохо=- || skype: beliyadm_pb
*

Glip

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

beliyadm

  • Легенда
  • 8839
  • 1624 / 63
  • Севастополь == Россия
Тоже вариант. Но тогда до того, как создадутся окончательные статьи не будет известен их id. Пока у меня сайт не заполнен контентом. То что есть - это просто временные статьи.
так в чем проблема набить сайт контентом (не обязательно все статьи, главное структура меню) и после за 20 минут набросать заранее подготовленные цифирьки Itemid в болванку стилей (оттестированную и отстроенную на полигоне заранее)
Все истины, которые я хочу вам изложить, — бесстыдная ложь.
Записки нетрезвого кодера || -=Joomla FAQ=- || -=все плохо=- || skype: beliyadm_pb
*

ankoch

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

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

SmokerMan

  • Гуру
  • 5293
  • 719 / 26
Как бы сделать так, чтобы помимо itemid добавлялся класс с псевдонимом пункта меню?
какая разница  id или псевдоним? Это уникальные значения.
*

ankoch

  • Захожу иногда
  • 498
  • 50 / 1
При создании другого пункта я запросто могу прописать старый псевдоним и всё в порядке, а с id такой номер не пройдёт.

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

SmokerMan

  • Гуру
  • 5293
  • 719 / 26
Да, странно конечно это как-то. Ну так добавляйте что хотите никто же не мешает то :)
вот пример с псевдонимом в разметке 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

  • Захожу иногда
  • 498
  • 50 / 1
SmokerMan спасибо +, попробую.
*

dron

  • Завсегдатай
  • 1168
  • 11 / 9
добрый день.

а я использую коммерческое меню. у него свой 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 для каждого пункта меню?

заранее спасибо!
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Пункт меню

Автор s120367

Ответов: 0
Просмотров: 243
Последний ответ 03.06.2018, 13:02:55
от s120367
Большое меню Joomla

Автор Amakeeva

Ответов: 1
Просмотров: 410
Последний ответ 22.01.2018, 13:17:45
от effrit
Как можно отображать имя пользователя в название меню?

Автор selimoff

Ответов: 27
Просмотров: 3569
Последний ответ 02.01.2018, 15:24:44
от logan-19
как сделать пункт меню не кликабельным?

Автор qweqweqwe

Ответов: 13
Просмотров: 6407
Последний ответ 07.09.2017, 01:45:49
от forzi
Сдвинуть пункты меню в левое положение

Автор wectra

Ответов: 6
Просмотров: 675
Последний ответ 12.07.2017, 21:09:01
от wectra