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

Войти
   
   Начало   Поиск Joomla 1.7 FAQ Joomla 1.5 FAQ Joomla 1.0 FAQ Правила форума Новости Joomla Войти Регистрация Помощь  
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор Тема: Переопределение er.php для mod_mainmenu  (Прочитано 1886 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
voland
JComments Tester
*

Репутация: +155/-17
Offline Offline

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


любит наш народ всякое гавно...


« : 22.05.2010, 15:19:48 »

Дошли руки до подробного изучения данного вопроса для того чтобы добавить к меню тайтл.
Все оказалось не так просто, но реализуемо :-)
Более подробно можно прочесть в статье или можно сразу скачать файлики и распаковать его содержимое в папку /templates/название шаблона/html/mod_mainmenu.
Внимание! Если в Вашем шаблоне эта папка ну пуста и там реализован другой функционал, то он потеряется (а именно шаблоны от yootheme, joomlart, icetheme и другие).
« Последнее редактирование: 22.05.2010, 18:57:21 от voland » Записан
danik.html
Практически профи
*******

Репутация: +305/-3
Offline Offline

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



« Ответ #1 : 22.05.2010, 15:34:14 »

а как же node->addAttribute()?
Записан
voland
JComments Tester
*

Репутация: +155/-17
Offline Offline

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


любит наш народ всякое гавно...


« Ответ #2 : 22.05.2010, 15:36:54 »

а как же node->addAttribute()?
И что это даст?

PS Код в default.php
Код:
$node->removeAttribute('title','Какой то тайтл');
ошибки не вызывает но и тайтла не дает
« Последнее редактирование: 22.05.2010, 15:47:14 от voland » Записан
danik.html
Практически профи
*******

Репутация: +305/-3
Offline Offline

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



« Ответ #3 : 22.05.2010, 15:56:16 »

Я говорю о функции modMainMenuXMLCallback, через которую прогоняются все элементы меню
Отлавливаем элемент "a", вытягиваем текст из нее, делим по нашему разделителю(как в примере :: ), часть сохраняем, а часть добавляем в атрибут title. немножко трудней может, но реализовать возможно.
А вот статья меня реально шокировала. сколько возился с mod_mainmenu, а о такой фишке, как переопределение helper-а  даже не догадывался)
Записан
voland
JComments Tester
*

Репутация: +155/-17
Offline Offline

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


любит наш народ всякое гавно...


« Ответ #4 : 22.05.2010, 16:01:56 »

Я говорю о функции modMainMenuXMLCallback, через которую прогоняются все элементы меню
Отлавливаем элемент "a", вытягиваем текст из нее, делим по нашему разделителю(как в примере :: ), часть сохраняем, а часть добавляем в атрибут title. немножко трудней может, но реализовать возможно.
А вот статья меня реально шокировала. сколько возился с mod_mainmenu, а о такой фишке, как переопределение helper-а  даже не догадывался)
Проблема в том что функция не получает html-код сссылки, в параметрах есть только название пункта, а преобразование в HTML происходит уже на уровне helper.php, а именно
Код:
switch ($tmp->browserNav)
{
default:
case 0:
// _top
$data = '<a title="'.$tmp->title.'" href="'.$tmp->url.'">'.$image.$tmp->name.'</a>';
break;
case 1:
// _blank
$data = '<a title="'.$tmp->title.'"  href="'.$tmp->url.'" target="_blank">'.$image.$tmp->name.'</a>';
break;
case 2:
// window.open
$attribs = 'toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=yes,'.$this->_params->get('window_open');

// hrm...this is a bit dickey
$link = str_replace('index.php', 'index2.php', $tmp->url);
$data = '<a title="'.$tmp->title.'"  href="'.$link.'" onclick="window.open(this.href,\'targetWindow\',\''.$attribs.'\');return false;">'.$image.$tmp->name.'</a>';
break;
}
Причем
Код:
title=
в оригинальном helper.php отсутвует, таким образом перехватывая на уровне default.php мы можем поменять название (то, что внутри span) но никак не получится добавить генерацию тайтла.
Записан
danik.html
Практически профи
*******

Репутация: +305/-3
Offline Offline

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



« Ответ #5 : 22.05.2010, 16:23:59 »

Цитировать
Проблема в том что функция не получает html-код сссылки
Ты плохо разбирался в работе хелпера. Формируется лишь строка, которая скормится XML парсеру.
Ключевые строки:
      $xml = JFactory::getXMLParser('Simple');
      $xml->loadString($xmls[$type]);
Записан
danik.html
Практически профи
*******

Репутация: +305/-3
Offline Offline

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



« Ответ #6 : 22.05.2010, 16:26:53 »

Вот ща для примера накодю то что я предлагал)
Записан
danik.html
Практически профи
*******

Репутация: +305/-3
Offline Offline

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



« Ответ #7 : 22.05.2010, 16:54:26 »

реализация того же эффекта, но без переопределения хелпера, и как следствие объявления практически класса-дубликата:
Код
	if (($node->name() == 'a') && isset($node->span)) {
$parts=explode('::',$node->getElementByPath(span)->data());
$node->getElementByPath(span)->setData($parts[0]);
!$parts[1] or $node->addAttribute('title',$parts[1]);
}
добавляем эти строчки в default.php
Записан
voland
JComments Tester
*

Репутация: +155/-17
Offline Offline

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


любит наш народ всякое гавно...


« Ответ #8 : 22.05.2010, 17:01:55 »

реализация того же эффекта, но без переопределения хелпера, и как следствие объявления практически класса-дубликата:
Код
	if (($node->name() == 'a') && isset($node->span)) {
$parts=explode('::',$node->getElementByPath(span)->data());
$node->getElementByPath(span)->setData($parts[0]);
!$parts[1] or $node->addAttribute('title',$parts[1]);
}
добавляем эти строчки в default.php
Работоспособность проверена?
[/quote]
Записан
danik.html
Практически профи
*******

Репутация: +305/-3
Offline Offline

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



« Ответ #9 : 22.05.2010, 17:15:50 »

да, конечно, отлично работает. Но я не гуру пыха, так что 100%-ную гарантию на код не даю)
Я раньше и сам ворчал на джумлосоздателей что вывод меню хрен отшаблонизируешь, но недавно разобрался что к чему Wink
Записан
Wharfadale
Завсегдатай
*****

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

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


« Ответ #10 : 17.06.2010, 13:35:52 »

danik.html, вставляю после    
Код:
if (($node->name() == 'li') && ($id = $node->attributes('id'))) {
if ($node->attributes('class')) {
$node->addAttribute('class', $node->attributes('class').' item'.$id);
} else {
$node->addAttribute('class', 'item'.$id);
}
}

ничего не работает.
« Последнее редактирование: 17.06.2010, 15:25:11 от Wharfadale » Записан
danik.html
Практически профи
*******

Репутация: +305/-3
Offline Offline

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



« Ответ #11 : 17.06.2010, 16:00:13 »

Цитировать
ничего не работает.
прикрепи получившийся файл - посмотрю
Записан
Wharfadale
Завсегдатай
*****

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

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


« Ответ #12 : 17.06.2010, 16:13:22 »

Я же так понял, кроме этого куска кода больше ничего не нужно?

* default.rar (0.78 Кб - загружено 61 раз.)
Записан
danik.html
Практически профи
*******

Репутация: +305/-3
Offline Offline

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



« Ответ #13 : 17.06.2010, 17:24:43 »

Wharfadale, все прекрасно работает. прописывай в названии пункта меню так: Название::вспывающая подсказка
теперь при наведении на пункт меню во фронте будет всплывать подсказка "всплывающая подсказка"
Записан
Wharfadale
Завсегдатай
*****

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

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


« Ответ #14 : 18.06.2010, 13:43:15 »

Неа.. и с :: и без - никак не хочет. Ну правда у меня ещё ссылка в h1 стоит
Записан
Страниц: [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