|
ZHart
|
 |
« : 29.01.2011, 16:07:40 » |
|
ВОПРОС:Как известно, в Joomla 1.6 есть поддержка многоязычности «Из коробки». Применительно к названиям пунктов меню, она заключается в том, что для каждого пункта меню можно указать язык к которому он относится. Главный пункт меню (ведущий на домашнюю страницу) может быть только один, и он обязательно должен быть включен для всех языков. Вроде бы все логично, но беда в том, что и название этого пункта едино для всех языков. В итоге, если назовем его по-русски, то в англоязычной версии меню отображаются, например, такие пункты: «Главная», «Articles», «Gallery», «Contacts». Если поменяем «Главная» на «Home», то, соответственно, в русскоязычной версии сайта будет: «Home», «Статьи», «Галерея», «Контакты». Можно ли как-то сделать, чтобы для каждого языка первый пункт главного меню можно было назвать по-своему? ОТВЕТ:Да, можно, причем существует несколько вариантов решения (обратите особое внимание на последний, 4-й метод): 1. Картинка вместо текста. картинка типа home не вариант? а название не отображать
2. Небольшой хак. решение "топором" открываем файл \modules\mod_menu\helper.php, втавляем после static function getList(&$params) { вот это $lang = JFactory::getDocument(); $lang = $lang->language;
далее ищем в конце $item->title = htmlspecialchars($item->title); и пишем после неё if($item->title=="Home" && $lang=="ru-ru") $item->title="дом2"; где Home - это название пункта меню, которое надо переводить зы файл надо сохранить в utf-8 без BOM, зарубежные други опять в ANSI всё пишут ) зы2 разумеется, на крошки это решение никак не повлияет, но крошки делаются ровно так же - правкой пары строк, либо просто отрубаем в модуле показ главной, что обычно и делается ) 3. Метод отдельных меню с псевдонимами. по порядку: идём в менеджер языков, выбираем вкалдку "Content" создаём там, к примеру, русский язык, заполняя все обязательные поля. включаем системный плагин System - Language Filter и создаём соотвествующий модуль для переключения языков.
создаём отдельные меню для каждого языка. в каждом делаем по псевдониму главного пункта меню, но язык выбираем свой. создаём новые модули для вывода этих меню, в настройках ставим привязку к соотвествующим языкам. модуль с единственной двуязычной ссылкой снимаем с публикации.
так всё нормально, но почему-то не могу сделать дефолтным русский язык. главная страница стразу редиректит на /en, даже если в дефолте стоит русский. щас попробую кэши почистить и перезайти.
upd: последний выбранный язык, кажется, сохраняется в кукисах. после их очистки по дефолту становится правильный /ru
с крошками косяк остаётся, так что либо отрубаем показ главного в настройках модуля крошек или хакаем его по примеру выше.
4. Ну и наконец, самый красивый, корректный и простой метод, который даже под спойлер прятать не буду (я использовал именно его, спасибо Lex!): В шаблоне пишем <?php $menu = JSite::getMenu(); $menu->getDefault()->title = JText::_($menu->getDefault()->title); ?> В языковом файле шаблона HOME=Главная Решение работает, если первый пункт меню называется не иначе как «Home».
Если главная home в языковом файле HOME=Главная, если главная не home то и в языковом файле надо ЧЕТОТАМ=Главная
При использовании этого метода вопрос с «крошками» (breadcrumbs) также решается без всяких хаков. Для вывода названия главного пункта меню можно создать отдельные модули крошек для каждого языка: Необходимо просто продублировать модуль «Breadcrumbs», после чего в настройках первого модуля выбрать русский язык и вписать «Главная» в поле «Текст пункта `Главная`». В настройках второго модуля соответственно нужно выбрать английский язык и вписать текст «Home». Если кому-то нужны другие языки — делается по аналогии, для каждого языка — свой модуль.
...А можно даже модули не дублировать, а просто оставить пустым поле «Текст пункта `Главная`», при этом текст будет браться из языковых файлов: Кстати о крошках. Сегодня полез в модуль и увидел if ($params->get('showHome', 1)) { $item = new stdClass(); $item->name = $params->get('homeText', JText::_('MOD_BREADCRUMBS_HOME')); $item->link = JRoute::_('index.php?Itemid='.$app->getMenu()->getDefault()->id); array_unshift($items, $item); }Это значит, что если в поле "Текст пункта `Главная`" ничего нет, значение берется из языковой константы MOD_BREADCRUMBS_HOME в файле перевода модуля ru-RU.mod_breadcrumbs.ini Можно не копировать модули для разных языков. Просто оставлять поле пустым, тогда значение будет браться из языковых файлов. _________________________________________________________________________ИНСТРУКЦИЯ ДЛЯ Joomla 1.7Для Joomla 1.7 все поменялось, ибо изменилась логика работы многоязычного сайта. Если обновиться с Jooomla 1.6 до Joomla 1.7, оставив все как есть, то модуль переключения языков перестает работать. Поэтому в случае с Joomla 1.7 нужно забыть все предыдущие инструкции и выполнить другую, не менее простую инструкцию: - Создать несколько главных меню — одно общее и по одному для каждого из языков.
Например: mainmenu-all, mainmenu-ru, mainmenu-en. Для каждого из языковых меню создать соответствующие им модули. Для «общего» меню модуль можно не создавать (ибо его все равно потом придется скрыть). - Назначение «общего» меню только одно — создать в нем единственный пункт меню «Главная», сделать его основным и назначить его всем языкам. Смысл этой манипуляции в том, что хотя-бы один пункт меню обязательно должен быть главным и при этом должен быть назначен всем языкам.
- Далее в каждом из языковых меню нужно создать соответствующие языку пункты меню. Важно, чтобы в каждом из этих меню присутствовал пункт «Главная», при этом чтобы он был сделан основным, а в качестве языка был выбран язык этого конкретного меню.
- Profit.
P.S.: Кого интересует пошаговая настройка мультиязычного сайта на Joomla 1.7 (с нуля, а не после обновления) — можете заглянуть сюда (ахтунг, английский!).
|
|
|
|
« Последнее редактирование: 24.08.2011, 10:44:54 от ZHart »
|
Записан
|
|
|
|
| |
doctorgrif
Завсегдатай
   
Репутация: +82/-1
Offline
Пол: 
Сообщений: 797
Нудный доктор
|
 |
« Ответ #1 : 29.01.2011, 16:16:53 » |
|
Как известно, в Joomla 1.6 есть поддержка многоязычности «Из коробки». Применительно к названиям пунктов меню, она заключается в том, что для каждого пункта меню можно указать язык к которому он относится. Главный пункт меню (ведущий на домашнюю страницу) может быть только один, и он обязательно должен быть включен для всех языков.
Вроде бы все логично, но беда в том, что и название этого пункта едино для всех языков. В итоге, если назовем его по-русски, то в англоязычной версии меню отображаются, например, такие пункты: «Главная», «Articles», «Gallery», «Contacts». Если поменяем «Главная» на «Home», то, соответственно, в русскоязычной версии сайта будет: «Home», «Статьи», «Галерея», «Контакты».
Можно ли как-то сделать, чтобы для каждого языка первый пункт главного меню можно было назвать по-своему?
картинка типа home не вариант? а название не отображать 
|
|
|
|
|
Записан
|
|
|
|
|
ZHart
|
 |
« Ответ #2 : 29.01.2011, 16:36:18 » |
|
Вариант конечно, но это полумера. Картинка не очень хорошо вписывается в общий дизайн. Но если другого варианта нет, то придется делать так. Странно, что разработчики не предусмотрели такую очевидную штуку. Других идей нет?
|
|
|
|
|
Записан
|
|
|
|
doctorgrif
Завсегдатай
   
Репутация: +82/-1
Offline
Пол: 
Сообщений: 797
Нудный доктор
|
 |
« Ответ #3 : 29.01.2011, 16:46:55 » |
|
Вариант конечно, но это полумера. Картинка не очень хорошо вписывается в общий дизайн. Но если другого варианта нет, то придется делать так. Странно, что разработчики не предусмотрели такую очевидную штуку. Других идей нет?
можно, конечно, попробовать подменять название пункта меню исходя из GeoIP, но при заходе через прокси...
|
|
|
|
|
Записан
|
|
|
|
|
ZHart
|
 |
« Ответ #4 : 29.01.2011, 16:51:21 » |
|
можно, конечно, попробовать подменять название пункта меню исходя из GeoIP, но при заходе через прокси...
Это слишком уж мудрено. Хотелось бы делать подобное средствами самой системы.
|
|
|
|
|
Записан
|
|
|
|
doctorgrif
Завсегдатай
   
Репутация: +82/-1
Offline
Пол: 
Сообщений: 797
Нудный доктор
|
 |
« Ответ #5 : 29.01.2011, 16:53:58 » |
|
Это слишком уж мудрено. Хотелось бы делать подобное средствами самой системы.
API 1.6 не смотрел настолько подробно... может на форуме их порыться...
|
|
|
|
|
Записан
|
|
|
|
effrit
Группа развития
   
Репутация: +576/-5
Offline
Пол: 
Сообщений: 5486
effrit.com
|
 |
« Ответ #6 : 29.01.2011, 17:30:31 » |
|
да не сложно сделать, так-то. только надо понять, как узнать текущий язык из кода. дальше стандартно - хакаем хэлпер меню в одну-две строки
|
|
|
|
|
Записан
|
|
|
|
effrit
Группа развития
   
Репутация: +576/-5
Offline
Пол: 
Сообщений: 5486
effrit.com
|
 |
« Ответ #7 : 29.01.2011, 18:12:32 » |
|
решение "топором" открываем файл \modules\mod_menu\helper.php, втавляем после static function getList(&$params) { вот это $lang = JFactory::getDocument(); $lang = $lang->language;
далее ищем в конце $item->title = htmlspecialchars($item->title); и пишем после неё if($item->title=="Home" && $lang=="ru-ru") $item->title="дом2"; где Home - это название пункта меню, которое надо переводить зы файл надо сохранить в utf-8 без BOM, зарубежные други опять в ANSI всё пишут ) зы2 разумеется, на крошки это решение никак не повлияет, но крошки делаются ровно так же - правкой пары строк, либо просто отрубаем в модуле показ главной, что обычно и делается )
|
|
|
|
« Последнее редактирование: 29.01.2011, 18:38:56 от effrit »
|
Записан
|
|
|
|
b2z
Support Team
   
Репутация: +325/-0
Offline
Пол: 
Сообщений: 4335
Contra Gaming Community
|
 |
« Ответ #8 : 29.01.2011, 19:52:23 » |
|
Реально тупизм. По моему это баг.
|
|
|
|
|
Записан
|
|
|
|
effrit
Группа развития
   
Репутация: +576/-5
Offline
Пол: 
Сообщений: 5486
effrit.com
|
 |
« Ответ #9 : 29.01.2011, 20:22:49 » |
|
ещё можно, наверно, в отдельное меню вынести этот пункт. и не публиковать модуль с ним, а только с псевдонимами.
|
|
|
|
|
Записан
|
|
|
|
effrit
Группа развития
   
Репутация: +576/-5
Offline
Пол: 
Сообщений: 5486
effrit.com
|
 |
« Ответ #10 : 01.02.2011, 10:39:42 » |
|
кстати, метод с псевдонимами-работает.
по порядку: идём в менеджер языков, выбираем вкалдку "Content" создаём там, к примеру, русский язык, заполняя все обязательные поля. включаем системный плагин System - Language Filter и создаём соотвествующий модуль для переключения языков.
создаём отдельные меню для каждого языка. в каждом делаем по псевдониму главного пункта меню, но язык выбираем свой. создаём новые модули для вывода этих меню, в настройках ставим привязку к соотвествующим языкам. модуль с единственной двуязычной ссылкой снимаем с публикации.
так всё нормально, но почему-то не могу сделать дефолтным русский язык. главная страница стразу редиректит на /en, даже если в дефолте стоит русский. щас попробую кэши почистить и перезайти.
upd: последний выбранный язык, кажется, сохраняется в кукисах. после их очистки по дефолту становится правильный /ru
с крошками косяк остаётся, так что либо отрубаем показ главного в настройках модуля крошек или хакаем его по примеру выше.
|
|
|
|
« Последнее редактирование: 01.02.2011, 10:56:09 от effrit »
|
Записан
|
|
|
|
|
ZHart
|
 |
« Ответ #11 : 01.02.2011, 16:02:54 » |
|
effrit, спасибо за помощь. В любом случае решение нетривиальное, а проблема очень похожа на косяк разработчиков, так что согласен с bzzik. Реально тупизм. По моему это баг.
|
|
|
|
|
Записан
|
|
|
|
effrit
Группа развития
   
Репутация: +576/-5
Offline
Пол: 
Сообщений: 5486
effrit.com
|
 |
« Ответ #12 : 01.02.2011, 16:09:14 » |
|
да решение как раз логическим путём выведено )) просто этот "мультиязычнй" пункт с толку сбивает поначалу. напоминает подобные телодвижения с убиванием дублей главной, там тоже прятали модуль с единственным главным меню. если не переделают логику, то можно в факи тему. а вот с крошками без хака первый пункт не вытащить на радном языке - тут прокол, согласен. не продумали момент.
|
|
|
|
|
Записан
|
|
|
|
b2z
Support Team
   
Репутация: +325/-0
Offline
Пол: 
Сообщений: 4335
Contra Gaming Community
|
 |
« Ответ #13 : 01.02.2011, 16:23:24 » |
|
Просто пинцет. Но пока в ЧАВО добавил.
|
|
|
|
|
Записан
|
|
|
|
nightstalker
Захожу иногда

Репутация: +0/-0
Offline
Сообщений: 10
|
 |
« Ответ #14 : 14.02.2011, 18:32:16 » |
|
не знаю, как у меня получилось но при включении фильтрации языка home у меня не выводиться (шаблон от Joomlart - меню выводится в виде MegaMenu)
http://vsesvit.uticom.com.ua - сайтик в разработке
сделано следующим образом: одно главное меню содержит пункты и на русском, и на укр. пункты на русском выводятся только при включенном русском на украинском соответственно - при включенном укр.
тоже долго думал, как быть с home page назвал Всестів.Home - ну и понятно осталась опция выводить везде, но он не выводится
|
|
|
|
|
Записан
|
|
|
|
effrit
Группа развития
   
Репутация: +576/-5
Offline
Пол: 
Сообщений: 5486
effrit.com
|
 |
« Ответ #15 : 14.02.2011, 20:35:50 » |
|
nightstalker, ну и? рекламировть Joomlart пришёл? )) взял бы да разобрался, как они сделали - была бы польза.
|
|
|
|
|
Записан
|
|
|
|
nightstalker
Захожу иногда

Репутация: +0/-0
Offline
Сообщений: 10
|
 |
« Ответ #16 : 15.02.2011, 01:19:57 » |
|
рекламировть Joomlart пришёл? ))
опс, я, честно говоря, думал, что это я сам такого результата добился (наивняк) простой комбинацией языков :-) но сомневался, поэтому и указал еще и шаблон разобраться попробую - но на себя бы не поставил
|
|
|
|
|
Записан
|
|
|
|
effrit
Группа развития
   
Репутация: +576/-5
Offline
Пол: 
Сообщений: 5486
effrit.com
|
 |
« Ответ #17 : 15.02.2011, 09:11:50 » |
|
если бы комбинация работала, то и на стандартных шаблонах тоже должно было получиться ) попробуй сменить шаблон и опиши результат )
|
|
|
|
|
Записан
|
|
|
|
nightstalker
Захожу иногда

Репутация: +0/-0
Offline
Сообщений: 10
|
 |
« Ответ #18 : 15.02.2011, 13:54:02 » |
|
сменил нашблон на Yougrids 16 Template первый пункт в меню вылез - как следовало ожидать, заслуга не моя, а разработчиков шаблона
|
|
|
|
|
Записан
|
|
|
|
effrit
Группа развития
   
Репутация: +576/-5
Offline
Пол: 
Сообщений: 5486
effrit.com
|
 |
« Ответ #19 : 15.02.2011, 14:00:55 » |
|
ну вот. значит надо расковырять код модуля и посмотреть как они маскируют двуязычный пункт, чтобы было альтернативное решение. )
|
|
|
|
|
Записан
|
|
|
|
nightstalker
Захожу иногда

Репутация: +0/-0
Offline
Сообщений: 10
|
 |
« Ответ #20 : 15.02.2011, 14:27:15 » |
|
я в этом деле полный лось
есть модуль меню - mod_mainmenu есть стили относящиеся к меню - CSS.css есть еще стили по цветовым гаммам...
но нигде ниего явного я не нашел, ибо не теми глазами смотрю если поможет делу, могу выложить коды этих файлов (хоть это и запрещено их лицензией)
|
|
|
|
|
Записан
|
|
|
|
effrit
Группа развития
   
Репутация: +576/-5
Offline
Пол: 
Сообщений: 5486
effrit.com
|
 |
« Ответ #21 : 15.02.2011, 14:37:59 » |
|
ну у нас тоже варез запрещён, так что не надо. тем более что меню - сложное, и не факт что с ходу можно будет понять, где маскировка происходит. но будем знать, что есть такая штука, хотя бы )
|
|
|
|
|
Записан
|
|
|
|
|
Lex
|
 |
« Ответ #22 : 15.02.2011, 14:55:52 » |
|
В шаблоне пишем <?php $menu = JSite::getMenu(); $menu->getDefault()->title = JText::_($menu->getDefault()->title); ?> В языковом файле шаблона HOME=Главная
|
|
|
|
|
Записан
|
|
|
|
|
ZHart
|
 |
« Ответ #23 : 16.02.2011, 13:41:12 » |
|
Lex, не помогло. Возможно, я что-то не так понял. В index.php шаблона прописал указанный код, в языковые файлы шаблона (английский и русский) прописал соответствующие каждому языку переменные — никакого видимого результата.
|
|
|
|
|
Записан
|
|
|
|
effrit
Группа развития
   
Репутация: +576/-5
Offline
Пол: 
Сообщений: 5486
effrit.com
|
 |
« Ответ #24 : 16.02.2011, 13:44:53 » |
|
я вообще не понял, при чём тут заголовок...
|
|
|
|
|
Записан
|
|
|
|
|
Lex
|
 |
« Ответ #25 : 16.02.2011, 14:00:42 » |
|
Lex, не помогло. Возможно, я что-то не так понял. В index.php шаблона прописал указанный код, в языковые файлы шаблона (английский и русский) прописал соответствующие каждому языку переменные — никакого видимого результата.
echo $menu->getDefault()->title; что покажет?, может там не home во всяком случае проверил щас на стандартном шаблоне rhuk_milkyway и пустой Joomla 1.6 при переключении языка по умолчанию работает.
|
|
|
|
|
Записан
|
|
|
|
|
ZHart
|
 |
« Ответ #26 : 16.02.2011, 14:22:40 » |
|
Решение работает, если первый пункт меню называется не иначе как «Home». Если название другое — не работает. Сначала у меня первый пункт меню назывался «Главная», и после указанных изменений для обоих языков (а также по «echo $menu->getDefault()->title;») выводилось «Главная». После того, как поменял название первого пункта на «Home», все заработало. При этом в крошках в обоих случаях выводится «Home». В принципе, решение вполне приемлемое, если быть уверенным, что оно нигде ничего не попортит (например, не произойдет автозамена в другом месте, где это никому не нужно). Опасаться нечего? 
|
|
|
|
|
Записан
|
|
|
|
|
Lex
|
 |
« Ответ #27 : 16.02.2011, 14:26:26 » |
|
Да нет. Если главная home в языковом файле HOME=Главная, если главная не home то и в языковом файле надо ЧЕТОТАМ=Главная
|
|
|
|
|
Записан
|
|
|
|
|
ZHart
|
 |
« Ответ #28 : 16.02.2011, 14:30:46 » |
|
Ок, значит оставляю как есть. Большое спасибо за помощь в решении проблемы  Кстати говоря, вопрос с крошками тоже решил, и ничего хакать не пришлось. Необходимо просто продублировать модуль «Breadcrumbs», после чего в настройках первого модуля выбрать русский язык и вписать «Главная» в поле «Текст пункта `Главная`». В настройках второго модуля соответственно нужно выбрать английский язык и вписать текст «Home». Если кому-то нужны другие языки — делается по аналогии, для каждого языка — свой модуль.
|
|
|
|
« Последнее редактирование: 16.02.2011, 16:56:24 от ZHart »
|
Записан
|
|
|
|
|
|
|
Lex
|
 |
« Ответ #30 : 17.02.2011, 13:03:36 » |
|
Кстати о крошках. Сегодня полез в модуль и увидел if ($params->get('showHome', 1)) { $item = new stdClass(); $item->name = $params->get('homeText', JText::_('MOD_BREADCRUMBS_HOME')); $item->link = JRoute::_('index.php?Itemid='.$app->getMenu()->getDefault()->id); array_unshift($items, $item); }Это значит, что если в поле "Текст пункта `Главная`" ничего нет, значение берется из языковой константы MOD_BREADCRUMBS_HOME в файле перевода модуля ru-RU.mod_breadcrumbs.ini Можно не копировать модули для разных языков. Просто оставлять поле пустым, тогда значение будет браться из языковых файлов.
|
|
|
|
|
Записан
|
|
|
|
effrit
Группа развития
   
Репутация: +576/-5
Offline
Пол: 
Сообщений: 5486
effrit.com
|
 |
« Ответ #31 : 17.02.2011, 13:08:28 » |
|
прикольно надо в первый пост это вписать вместе с предыдущим советом, чтобы не по всей теме размазано было
|
|
|
|
|
Записан
|
|
|
|
|
ZHart
|
 |
« Ответ #32 : 17.02.2011, 15:16:53 » |
|
надо в первый пост это вписать вместе с предыдущим советом, чтобы не по всей теме размазано было
Постарался резюмировать все самое полезное в первом сообщении.
|
|
|
|
|
Записан
|
|
|
|
Сержo
Осваиваюсь на форуме
 
Репутация: +3/-0
Offline
Сообщений: 117
|
 |
« Ответ #33 : 23.02.2011, 13:00:33 » |
|
Да ужжжж..., на мудрили они со встроенной мультиязычностью, сам попарился когда разбирался, и в конечном счёте пришёл к виду двух модулей меню, на русском и английском. Вот только весь этот геморрой не решает основной проблемы со статьями, их всё равно надо делать для каждого языка отдельно, а в этом случае JoomFish лучший выход, только нет его для 1.6 версии. 
|
|
|
|
|
Записан
|
|
|
|
b2z
Support Team
   
Репутация: +325/-0
Offline
Пол: 
Сообщений: 4335
Contra Gaming Community
|
 |
« Ответ #34 : 23.02.2011, 13:30:17 » |
|
Сержo - не по теме пишем...
|
|
|
|
|
Записан
|
|
|
|
pika4y
Осваиваюсь на форуме
 
Репутация: +2/-0
Offline
Пол: 
Сообщений: 27
|
 |
« Ответ #35 : 01.03.2011, 09:08:14 » |
|
Поясните как текст на другом языке добавить. Вот к примеру - есть материал (статья) на рус, а мне надо еще что бы и англ был, я чего то не вкурил куда перевод вставлять к материалу.
|
|
|
|
|
Записан
|
|
|
|
effrit
Группа развития
   
Репутация: +576/-5
Offline
Пол: 
Сообщений: 5486
effrit.com
|
 |
« Ответ #36 : 01.03.2011, 09:15:02 » |
|
pika4y, ты читать умеешь уже, или только писАть? постом выше модератор просил писать ПО ТЕМЕ. к тому же мог просто в разделе посмотреть, или, на худуй конец, создать НОВУЮ тему, а не соваться в первую попавшуюся с невтемачным вопросом. http://joomlaforum.ru/index.php/topic,153050.0.html
|
|
|
|
|
Записан
|
|
|
|
b2z
Support Team
   
Репутация: +325/-0
Offline
Пол: 
Сообщений: 4335
Contra Gaming Community
|
 |
« Ответ #37 : 01.03.2011, 11:15:24 » |
|
Блин, какой все же народ глупый... Следующий оффтоп тру тупо без предупреждения!
|
|
|
|
|
Записан
|
|
|
|
radiouniverse
Новичок
Репутация: +0/-0
Offline
Сообщений: 9
|
 |
« Ответ #38 : 23.04.2011, 17:15:15 » |
|
Кто может подробней написать, как создать Главную и Меню на четырёх языках? В каких файлах и где именно файлы находятся? Joomla 1.6.3 За ранее очень благодарен.
|
|
|
|
|
Записан
|
|
|
|
|
ZHart
|
 |
« Ответ #39 : 23.04.2011, 18:05:51 » |
|
radiouniverse, в первом сообщении темы недостаточно подробно написано?
|
|
|
|
|
Записан
|
|
|
|
|
Rasputin
Гость
|
 |
« Ответ #40 : 02.05.2011, 20:08:15 » |
|
radiouniverse, в первом сообщении темы недостаточно подробно написано?
Видимо недостаточно. Я шаблон собирал сам и к сожалению понятия не имею, что такое ЯЗЫКОВОЙ ФАЙЛ ШАБЛОНА, как он выглядит, где находится и что содержит. Поэтому чтение первого поста темы мне никак не помогло и видимо не мне одному  Уважаемый, ZHart, помогите всетаки решить проблему до конца, приведите имя, расположение и содержание ЯЗЫКОВОГО ФАЙЛА ШАБЛОНА и как его правильно подключить. Заранее благодарю.
|
|
|
|
|
Записан
|
|
|
|
|
ZHart
|
 |
« Ответ #41 : 02.05.2011, 20:28:05 » |
|
Rasputin, по поводу языковых файлов, их нахождения, содержания и принципов создания ищите и спрашивайте все же в других темах. Это слишком общие и не относящиеся напрямую к этой теме вопросы. В двух словах — находятся они в директории «language» для фронта сайта, и в директории «administrator/language» для админки, и создаются не только для шаблонов, а для всех составляющих Joomla. За примером рекомендую обратиться в один из бесплатных шаблонов.
|
|
|
|
|
Записан
|
|
|
|
n_i_x
Осваиваюсь на форуме
 
Репутация: +5/-0
Offline
Сообщений: 113
|
 |
« Ответ #42 : 09.05.2011, 14:41:15 » |
|
у меня тоже не получилось с 4 способом. в какую часть вставлять (начало, конец, центр)? и что делать, если шаблон поделён на части, то есть типа head, main, footer?
за ранее спасибо!
|
|
|
|
« Последнее редактирование: 09.05.2011, 15:33:11 от n_i_x »
|
Записан
|
|
|
|
rstas
Новичок
Репутация: +0/-0
Offline
Сообщений: 6
|
 |
« Ответ #43 : 15.05.2011, 00:57:24 » |
|
у меня тоже не получилось с 4 способом. в какую часть вставлять (начало, конец, центр)? и что делать, если шаблон поделён на части, то есть типа head, main, footer?
за ранее спасибо!
В mainmenu должен быть пункт HOME(на англ.) установленный как главная страница, в шаблоне прописаны строки из 4 способа.В директории \language\ru-RU\ должен находиться файл ru-RU.tpl_НазваниеШаблонаНаАнглМаленькимиБуквами.ini *например ru-RU.tpl_beez5.ini, в котором должна быть строка вида HOME="НазваниеПункаМенюПоРусски". Следует заметить что в файле перевода строки должны начинаться со 2ой... т.е. 1ая строка должна быть пустой. Например -
- HOME="Главная"
- CONTACTS="Контакты"
|
|
|
|
|
Записан
|
|
|
|
n_i_x
Осваиваюсь на форуме
 
Репутация: +5/-0
Offline
Сообщений: 113
|
 |
« Ответ #44 : 16.05.2011, 10:04:59 » |
|
это понятно, спасибо за разъяснение. но вот так и не могу разобраться, с тем куда в какой всё таки файл шаблона вписывать код, если index.php поделён на части (типа head.php, main.php, footer.php)
п.с. сам шаблон построен на основе T3 framework 2.0 от joomlart
|
|
|
|
|
Записан
|
|
|
|
|
Lex
|
 |
« Ответ #45 : 16.05.2011, 10:06:25 » |
|
Да куда хочешь. Пиши в head.php.
|
|
|
|
|
Записан
|
|
|
|
AlexeyMaloi
Новичок
Репутация: +0/-0
Offline
Сообщений: 6
|
 |
« Ответ #46 : 16.05.2011, 14:27:28 » |
|
Все это конечно хорошо, но у меня вопрос такого плана. Для того что бы появились иконки языков в опубликованном модуле "Переключение языка" - необходимо что бы как минимум для 2х пунктов меню были установлены используемые языки (допустим RU и EN) и они были обозначены как ГЛАВНАЯ СТРАНИЦА! Но также Joomla не дает уже сделанной Главной странице выбрать один из пунктов языка (либо Ru либо En) просит указать в качестве языка пункт "Все" отсюда получается что у меня на главной странице сайта всегда есть пункт меню "Главная" и в зависимости от выбранного языка дублирующий его пункт меню. Каким образом это можно исправить?
|
|
|
|
|
Записан
|
|
|
|
rstas
Новичок
Репутация: +0/-0
Offline
Сообщений: 6
|
 |
« Ответ #47 : 16.05.2011, 14:47:17 » |
|
Все это конечно хорошо, но у меня вопрос такого плана. Для того что бы появились иконки языков в опубликованном модуле "Переключение языка" - необходимо что бы как минимум для 2х пунктов меню были установлены используемые языки (допустим RU и EN) и они были обозначены как ГЛАВНАЯ СТРАНИЦА! Но также Joomla не дает уже сделанной Главной странице выбрать один из пунктов языка (либо Ru либо En) просит указать в качестве языка пункт "Все" отсюда получается что у меня на главной странице сайта всегда есть пункт меню "Главная" и в зависимости от выбранного языка дублирующий его пункт меню. Каким образом это можно исправить?
оставить главную страницу, у которой в качестве языка "Все", в покое, а страницы указанные как главные для языков снять с публикации... на самом деле, мультиязычность в joomle сделана из одного места, после нескольких попыток сделать что-то нормальное с помощью нее я плюнул на это дело, название сайта, мета кейворды, дескрипшен указанный в основных настройках сайта, цепляется везде и всюду, при использовании контактной информации форма обратной связи почему-то отображается только на одном языке, и т.д.
|
|
|
|
|
Записан
|
|
|
|
AlexeyMaloi
Новичок
Репутация: +0/-0
Offline
Сообщений: 6
|
 |
« Ответ #48 : 16.05.2011, 15:00:56 » |
|
Спасибо..Сделал как указано в п.3 (геморройно конечно) =(
|
|
|
|
|
Записан
|
|
|
|
n_i_x
Осваиваюсь на форуме
 
Репутация: +5/-0
Offline
Сообщений: 113
|
 |
« Ответ #49 : 17.05.2011, 20:43:39 » |
|
Следует заметить что в файле перевода строки должны начинаться со 2ой... т.е. 1ая строка должна быть пустой. Например -
- HOME="Главная"
- CONTACTS="Контакты"
ничего не понял)
|
|
|
|
|
Записан
|
|
|
|
|
|
|
ZHart
|
 |
« Ответ #51 : 24.06.2011, 08:33:01 » |
|
genko1, тоже топорное и некрасивое решение. Хотя понятно, что приходится извращаться, раз разработчики не предусмотрели такую простую возможность.
Для тех, кому лень идти по ссылке: Предлагается сделать фейковое (нигде не отображаемое) меню, в котором сделать пункт «по умолчанию», ведущий неважно куда. Это позволит нам снять с публикации первый пункт отображаемого (главного) меню. В итоге для каждого языка все пункты меню могут быть свои, в том числе и главный (Home/Главная).
|
|
|
|
|
Записан
|
|
|
|
genko1
Новичок
Репутация: +0/-0
Offline
Сообщений: 6
|
 |
« Ответ #52 : 24.06.2011, 14:17:32 » |
|
genko1, тоже топорное и некрасивое решение.
А можно по-подробнее: в чем заключается топорность и некрасивость данного решения?
|
|
|
|
|
Записан
|
|
|
|
|
ZHart
|
 |
« Ответ #53 : 24.06.2011, 14:24:21 » |
|
А по-вашему специально создавать отдельное меню и скрывать его только ради того, чтобы получить возможность вывода первого пункта меню — это красиво и правильно? Сущность меню используется совершенно не по назначению. Это явный костыль, по-моему это очевидно. Другой вопрос, что разработчики не предоставили возможности некостыльных решений, поэтому приходится извращаться.
|
|
|
|
|
Записан
|
|
|
|
genko1
Новичок
Репутация: +0/-0
Offline
Сообщений: 6
|
 |
« Ответ #54 : 24.06.2011, 14:35:03 » |
|
То, что приходиться извращаться для отключения первого пункта меню - согласен, не красиво. Но что сделано разработчиками, то сделано. И нам приходится искать возможность, или "костыль" по-Вашему как обойти этот косяк. И из всех "костылей" которые были предложены, этот самый быстрый и не связан с копанием в коде. Вы его сами в двух словах описали, даже картинок не потребовалось:)
|
|
|
|
|
Записан
|
|
|
|
Aquasonick
Давно я тут
  
Репутация: +0/-4
Offline
Сообщений: 293
Он не страдает безумием... - Он им наслаждается!
|
 |
« Ответ #55 : 01.07.2011, 11:23:45 » |
|
Что ты вы тут намудрили... Или у меня походу ещё и 5 вариант.) Решил просто настройками. 3 языка, везде соответствующий пункт меню. Потом попросили убрать его вообще - убрал. Ничего сложного Короче не понял я почему у вас так сложно.
|
|
|
|
|
Записан
|
|
|
|
|
ZHart
|
 |
« Ответ #56 : 24.08.2011, 10:41:13 » |
|
Для Joomla 1.7 все поменялось, ибо изменилась логика работы многоязычного сайта. Если обновиться с Jooomla 1.6 до Joomla 1.7, оставив все как есть, то модуль переключения языков перестает работать. Поэтому в случае с Joomla 1.7 нужно забыть все инструкции и выполнить другую, не менее простую инструкцию: - Создать несколько главных меню — одно общее и по одному для каждого из языков.
Например: mainmenu-all, mainmenu-ru, mainmenu-en. Для каждого из языковых меню создать соответствующие им модули. Для «общего» меню модуль можно не создавать (ибо его все равно потом придется скрыть). - Назначение «общего» меню только одно — создать в нем единственный пункт меню «Главная», сделать его основным и назначить его всем языкам. Смысл этой манипуляции в том, что хотя-бы один пункт меню обязательно должен быть главным и при этом должен быть назначен всем языкам.
- Далее в каждом из языковых меню нужно создать соответствующие языку пункты меню. Важно, чтобы в каждом из этих меню присутствовал пункт «Главная», при этом чтобы он был сделан основным, а в качестве языка был выбран язык этого конкретного меню.
- Profit.
P.S.: Кого интересует пошаговая настройка мультиязычного сайта на Joomla 1.7 (с нуля, а не после обновления) — можете заглянуть сюда (ахтунг, английский!).
|
|
|
|
|
Записан
|
|
|
|
Testikus
Захожу иногда

Репутация: +0/-0
Offline
Сообщений: 16
|
 |
« Ответ #57 : 13.10.2011, 17:56:01 » |
|
В Joomla 1.6/1.7 есть тип пункта меню "Псевдоним пункта меню" или "Menu Item Alias".
Пробую делать так: В главном меню, есть пункт по умолчанию "Главная", который ведёт на главную страницу. Это меню для всех языков и НЕ выводится не в одном из модулей.
Создаю второе меню (для всех языков) которое будет видно пользователям, делая два пункта на разных языках, с типом "Псевдоним пункта меню", в параметрах указываю, что это псевдоним главной страницы из не отображаемого главного меню. Дальше в этом же меню создаю остальные пункты для каждого из нужных языков.
На тесте вроде работает, посмотрим не вылезет ли каких багов.
|
|
|
|
|
Записан
|
|
|
|
|
pantela
|
 |
« Ответ #58 : 05.12.2011, 14:39:57 » |
|
И как понять? В итоге что ли Joomla использовать в качестве мультиязычности лучеще едлать клоны меню, материалов, модулей... чем использовать что то на подобии JoomFish (Конечно когда он будет поддерживатся)
|
|
|
|
|
Записан
|
|
|
|
veselun
Новичок
Репутация: +0/-0
Offline
Сообщений: 1
|
 |
« Ответ #59 : 06.12.2011, 18:01:12 » |
|
установил программу Joomla все нормально запустил сервер создал шаблон сайта , теперь хочу текст сохранить на Главной странице сайта , беру код текста захожу в панель управления сайтом через admin , хочу вставить текст ,а кнопка html не нажимается и не открывается редактор HTML . Обычный текст вставить можна , что я не так сделал подскажите . Может что то недогрузил в корневой папке ? Отдельно на компе редактор есть HTML .
|
|
|
|
« Последнее редактирование: 06.12.2011, 18:08:01 от veselun »
|
Записан
|
|
|
|
|
ZHart
|
 |
« Ответ #60 : 07.12.2011, 10:48:22 » |
|
veselun, вы бы для начала правила форума почитали, прежде чем писать сообщение в первой попавшейся теме.
|
|
|
|
|
Записан
|
|
|
|
genko1
Новичок
Репутация: +0/-0
Offline
Сообщений: 6
|
 |
« Ответ #61 : 13.01.2012, 00:24:43 » |
|
Хоть и поменяли разработчки Joomla 1.7 чуток, но геморрой с многоязычностью остался. Нужно практически дублировать сайт, а если языков несколько то, это еще тот подарочек. Слава Богу, наткнулся на копию joomfisha, только для 1.7 - falang http://www.faboba.com/en/composants/falang.html http://extensions.joomla.org/extensions/languages/multi-lingual-content/18210 Странно, что разработчки Fish так тормозили, что конкуретны выпустили аналогчиный продукт. Танцы с бубном закончились. Ура.
|
|
|
|
|
Записан
|
|
|
|
IrochkaStep
Осваиваюсь на форуме
 
Репутация: +4/-0
Offline
Пол: 
Сообщений: 113
Ненавижу каптчу!
|
 |
« Ответ #62 : 14.03.2012, 16:59:22 » |
|
Здравствуйте. У меня с меню другая проблема случилась: создала два меню (анг и рус). Когда сайт на русском - меню русское нормально отображается, когда переключаешь на англ. язык, появляется английское меню, но только его название - menu_en, а из названия выпадают пункты этого меню. Думаю что может копать надо в шаблоне, но где? Адрес сайта: solodov-art.ru А по ссылке почему-то не получилось скачать компонент falang- загрузка обрывается и все.
|
|
|
|
|
Записан
|
|
|
|
kepa
Осваиваюсь на форуме
 
Репутация: +1/-2
Offline
Пол: 
Сообщений: 63
|
 |
« Ответ #63 : 21.08.2012, 15:01:38 » |
|
Привет! ВОПРОС: Нужна картинка вместо текста. (т.е. у меня меню с картинкой ввиде домика и плюс надпись "HOME" как убрать эту надпись? ) попробовал вместо надписи "HOME" поставить точку "." но получилось не очень (показано на картинке)  у меня установлено zt_megamenuвот файл который выводит меню (zt.common.php): <?php /** * @version 1.7.x * @package ZooTemplate Project * @email webmaster@zootemplate.com * @copyright(c) 2008 - 2011 http://www.ZooTemplate.com. All rights reserved. */ // No direct access defined('_JEXEC') or die(); /** * Class Menu Common * */ require_once(JPATH_BASE .DS.'libraries/joomla/html/parameter.php');
class MenuSystem { var $_name = null; var $_template = null; var $_start = null; var $_end = null; var $_suffix = null; var $_active = null; var $_type = null; var $_cache = null; var $_nav = null; var $Itemid = null; var $fancy = null; var $mega = null; var $moo = null; var $drill = null; /** * Enter description here... * * @param string $name * @param string $menutype * @param string $template_name * @param string $suffix * @return MenuSystem */ function MenuSystem($name, $menutype, $template_name, $rtl, $fancy = 0, $transition = 'Fx.Transitions.linear', $duration = '350', $xdelay = 350, $xduration = 350, $xtransition = 'Fx.Transitions.linear') { global $Itemid; $Itemid = JRequest::getVar('Itemid'); $this->_name = $name; $this->_template = $template_name; $this->_suffix = ""; $this->_type = $menutype; $this->Itemid = $Itemid; $document = JFactory::getDocument(); $this->mega = '<script type="text/javascript"> /*<![CDATA[ */ window.addEvent("domready", function(){var _smart = Array();var megas = $(document.body).getElements(\'div[class="menusub_mega"]\');megas.each(function(mega, i){var id = mega.getProperty("id").split("_");if(id[2] != null){var smart = "_" + id[1] + "_" + id[2];_smart.include(smart); }});_smart.each(function(item, index){ZTMenu('.$xdelay.', 0, 0, item, "megamenu_close", true, '.$xduration.', '.$xtransition.');});}); /* ]]> */ </script>'; $this->moo = '<script type="text/javascript"> /*<![CDATA[ */ window.addEvent("domready",function() {new MooMenu($("menusys_moo"), {transition: '.$xtransition.', duration: '.$xduration.'})}); /* ]]> */ </script>'; $this->drill = '<script type="text/javascript"> /*<![CDATA[ */ var mymenu=new drilldownmenu({menuid: "drillmenu1", base: "'.JURI::base().'", menuheight: "auto", breadcrumbid: "drillcrumb", persist: {enable: true, overrideselectedul: true}, base: "'.JURI::base().'templates/'.$this->_template.'/zt_menus/'.'"}) /* ]]> */ </script>'; if($this->_name == 'mega') { if(!class_exists('plgSystemPlg_ZTools')) { echo JText::_('Missing ZTTools plugin.'); die(); } } $document->addStyleSheet(JURI::base().'templates/'.$this->_template.'/zt_menus/'.'zt_'.$this->_name.'menu/'.'zt.'.$this->_name.'menu.css'); if($rtl == 'rtl') { $document->addScript(JURI::base().'templates/'.$this->_template.'/zt_menus/'.'zt_'.$this->_name.'menu/'.'zt.'.$this->_name.'menu.rtl.js'); } else { $document->addScript(JURI::base().'templates/'.$this->_template.'/zt_menus/'.'zt_'.$this->_name.'menu/'.'zt.'.$this->_name.'menu.js'); } if($fancy) { $document->addScript(JURI::base().'templates/'.$this->_template.'/zt_menus/zt_fancymenu/zt_fancymenu.js'); $document->addStyleSheet(JURI::base().'templates/'.$this->_template.'/zt_menus/zt_fancymenu/zt_fancymenu.css'); $this->fancy = '<script type="text/javascript">window.addEvent("load", function(){new ZTFancy($("menusys_'.$name.'"), {transition: '.$transition.', duration: '.$duration.', onClick: function(ev, item){ev.stop();}});});</script>'; } $this->genmenu(); } function hasChild($lvl) { $pid = $this->fatherId($lvl); if(!$pid) return false; if(@$this->_nav[$pid]) return true; else return false; } function _showMenuDetail($row, $level = 0) { $_temp = null; $title = "title=\"$row->title\""; $menu_params = new JParameter($row->params); $nofollow = ($menu_params->get('mega_nofollow'))? " rel=\"nofollow\"" : ""; if($menu_params->get('menu_image') && $menu_params->get('menu_image')!= -1) { $str = '<img src="'.JURI::base(true).'/'.$menu_params->get('menu_image').'" alt="'.$row->title.'" /><span class="menusys_name">'.$row->title.'</span>'; } else { $str = '<span class="menusys_name">'.$row->title.'</span>'; } $Class = $this->activeClass($row, $level); $id ='id="menusys'.$row->id.'"'; if(@$row->url != null) { if($row->browserNav == 0) { $menuItem = '<a href="'.$row->url.'" '.$Class.' '.$id.' '.$title.$nofollow.'>'.$str.'</a>'; } elseif($row->browserNav == 1) { $menuItem = '<a target="_blank" href="'.$row->url.'" '.$Class.' '.$id.' '.$title.$nofollow.'>'.$str.'</a>'; } elseif($row->browserNav == 2) { $url = str_replace('index.php', 'index2.php', $tmp->url); $atts = 'toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=yes,width=500,height=350'; $menuItem = '<a href="'.$url.'" onclick="window.open("'.$url.'",\'targetWindow\',\''.$atts.'\'); return false;" '.$Class.' '.$id.' '.$title.$nofollow.'>'.$str.'</a>'; } } else { $menuItem = '<a '.$id.' '.$title.$nofollow.'>'.$str.'</a>'; } echo $menuItem; } function show($per=0, $start=0, $end = 14) { $this->_per = $per; $this->_start = $start; $this->_end = $end; echo "<div class=\"menusys_".$this->_name.$this->_suffix."\">"; if($this->_start == 0) { switch($this->_name) { case "mega": $this->showMegaMenu($this->_per, 1, 0); $this->endMenu($this->mega); $this->endMenu($this->fancy); break; case "drill": $this->showDrillMenu(1, 0); $this->endMenu($this->drill); break; default: $this->showMenu(1, 0); $this->endMenu($this->moo); $this->endMenu($this->fancy); break; } } else { $parID = $this->fatherId($this->_start); switch($this->_name) { case "mega": $this->showMegaMenu($this->_per, $parID, $this->_start); $this->endMenu($this->mega); $this->endMenu($this->fancy); break; case "drill": $this->showDrillMenu($parID, $this->_start); $this->endMenu($this->drill); break; default: $this->showMenu($parID, $this->_start); $this->endMenu($this->moo); $this->endMenu($this->fancy); break; } } echo "</div>"; } function showMenu($pid, $level) { if(@$this->_nav[$pid]) { if($level == 0) $this->beginUl(NULL, "menusys_".$this->_name); elseif($level == 1 &&($this->_name == 'submoo' || $this->_name == 'split')) $this->beginUl(NULL, "menusub_".$this->_name); else $this->beginUl(); $i = 0; foreach($this->_nav[$pid] as $menu) { if(@$this->_nav[$menu->id]) $abc = " hasChild"; else $abc = ""; $class =($this->isActive($menu))? " active" : ""; $id =(@$this->_nav[$menu->id])? "menu-".$menu->id : ''; if($i == 0) $this->beginLi("first-item".$abc.$class, $id); elseif($i == count($this->_nav[$pid]) - 1) $this->beginLi("last-item".$abc, $id); else $this->beginLi($abc, $id); $this->_showMenuDetail($menu, $level); if(($level < $this->_end) &&(@$this->_nav[$menu->id])) { $this->showMenu($menu->id, $level+1); } $i++; $this->endLi(); } $this->endUl(); } } function activeClass($menu_item, $level) { return(in_array($menu_item->id, $this->_active))? " class=' active'" : " class=' item'"; } //~~ This function will found the father ID of and item marked by level in array of active items ~~~~~~~ function fatherId($lvl) { if(!$lvl) return 0; //echo "<pre>";print_r($this->_active);exit; if(count($this->_active) < $lvl) return 0; $parID = count($this->_active) - $lvl; return $this->_active[$parID]; } /** * Generate the menu * * @return mixed */ function genmenu() { $nav = @JMenu::getInstance(); $my = JFactory::getUser(); $nav = array(); $this->_cache = array(); if(@strtolower(get_class($menu)) == 'jexception') { $nav = @JMenu::getInstance('site'); } $menus = &JSite::getMenu(); $rows = $menus->getItems('menutype', $this->_type); $_tmp = array(); if(count($rows)) { foreach($rows as $key => $value) { if($value->access <= $my->get('gid', 1)) { $par = $value->parent_id; $list_menu = @($nav[$par])? $nav[$par] : array(); if($value->type == 'separator') { $value->_index = count($list_menu); $list_menu[] = $value; $nav[$par] = $list_menu; $this->_cache[$value->id] = $value; $_tmp[$value->id] = $key; continue; } elseif($value->type == 'url') { if((strpos($value->link, 'index.php?')!== false) &&(strpos($value->link, 'Itemid=') === false)) { $value->url = $value->link.'&Itemid='.$value->id; } else { $value->url = $value->link; } } elseif($value->type == 'url') { $value->url = 'index.php?Itemid='.$value->params->get('aliasoptions'); } else { $router = JSite::getRouter(); if($router->getMode() == JROUTER_MODE_SEF) { //~~ No JRoute now ~~~ $value->url = 'index.php?Itemid='.$value->id; } else { //~~ No JRoute now ~~~ $value->url = $value->link.'&Itemid='.$value->id; } } if(strcasecmp(substr($value->url, 0, 4), 'http') &&(strpos($value->url, 'index.php?')!== false)) { $value->url = JRoute::_($value->url, true, $value->params->get('secure')); } else { $value->url = JRoute::_($value->url); } $value->_index = count($list_menu); $list_menu[] = $value; $nav[$par] = $list_menu; } $this->_cache[$value->id] = $value; $_tmp[$value->id] = $key; } } $this->_nav = $nav; //~~ Find out what submenus this item has ~~~~~~~~~~~ $active = array($this->Itemid); $max = 14; //~~ We dont need more than 14 levels of menu, do we? ~~~ $id = $this->Itemid; while($max) { if(isset($_tmp[$id])) { $tmp = $_tmp[$id]; if(isset($rows[$tmp]) && $rows[$tmp]->parent_id > 1) { $id = $rows[$tmp]->parent_id; $active[] = $id; } else { break; } } $max--; } $this->_active = $active; } /** Package: Mega Menu Function Created: December 04, 2010 */ function showMegaMenu($per, $pid, $level) { if(@$this->_nav[$pid]) { $this->beginUl( NULL, "menusys_".$this->_name); $i = 0; foreach($this->_nav[$pid] as $menu) { $params = $menu->params; $aclass = $this->getMegaMenuParam($params, "mega_class", ''); $cols = $this->getMegaMenuParam($params, "mega_cols", 1); if(@$this->_nav[$menu->id]){$class = "item hasChild"; $id = "menu-".$menu->id;} else {$class = "item"; $id = "";} if($i == 0) $class = "first-item $class"; elseif($i == count($this->_nav[$pid]) - 1) $class = "last-item $class"; else $class = $class; $class .=($this->isActive($menu))? " active" : ""; $class .=($aclass != '')? $aclass : "";
if($per && $per<count($this->_nav[$pid])) { if($i==0) $this->beginDiv("menusys-left", NULL, NULL); elseif($i==$per) $this->beginDiv("menusys-right", NULL, NULL); } $this->beginLi($class, $id); $this->genMegaTypeNormal($menu, $level); if(@$this->_nav[$menu->id]) { $this->beginDiv("menusub_mega", "menu-".$menu->id."_menusub_sub0"); $this->showSubMegaMenu($menu, $menu->id, $level+1, $cols); $this->endDiv(); } $this->endLi();
if($per && $per<count($this->_nav[$pid])) { if($i==($per-1)) $this->endDiv(); elseif($i==(count($this->_nav[$pid])-1)) $this->endDiv(); }
$i++; } $this->endUl(); } } function showSubMegaMenu($row, $pid, $level, $cols) { $params = $row->params; $swidth = $this->getMegaMenuParam($params, "mega_colw", ''); $colxw = $this->getMegaMenuParam($params, "mega_colxw", ''); $colw = array(); $width = $this->getMegaMenuParam($params, "mega_width", ''); $style =($width != '')? "width:$width" : ""; if($colxw != '') { $colx = explode("\n", $colxw); for($i = 0; $i < count($colx); $i++) { $col = explode("=", $colx[$i]); $colw[] = $col[1]; } } $subs = $this->_nav[$pid]; $total = count($subs); $count = floor($total/$cols); $bal = $total - $count*$cols; $m = 0;
$isgroup = $this->getMegaMenuParam($params, "mega_group", 0);
if(!$isgroup) { if(strpos($width,'px')) //$width_wrap = "width:".((str_replace('px','',$width))+34)."px"; //not add +34 $width_wrap = "width:".((str_replace('px','',$width)))."px"; else //$width_wrap = "width:".($width+34)."px"; //not add +34 $width_wrap = "width:".($width)."px"; } else { if(strpos($width,'px')) $width_wrap = "width:".$width; else $width_wrap = "width:".$width."px"; } $this->beginDiv("submenu-wrap", NULL, $width_wrap);
$isgroup = $this->getMegaMenuParam($params, "mega_group", 0); /* if(!$isgroup) { $this->beginDiv("subarrowtop", NULL, NULL); $this->endDiv(); $this->beginDiv("subwraptop", NULL, NULL); $this->beginDiv("subwraptop-left", NULL, NULL); $this->endDiv(); $this->beginDiv("subwraptop-right", NULL, NULL); $this->endDiv(); $this->endDiv();
$this->beginDiv("subwrapcenter-left", NULL, NULL); $this->beginDiv("subwrapcenter-right", NULL, NULL); $this->beginDiv("subwrapcenter", NULL, "width:".$width); } */ for($i = 1; $i <= $cols; $i++) { $width =(count($colw) == $cols)? "width:".$colw[$i-1] :(($swidth !='')? "width:".$swidth : NULL); $params = $subs[$m]->params; $group = $this->getMegaMenuParam($params, "mega_group", 0); if($group) { for($g = 0; $g < $count; $g++) { $this->beginDiv("megacol column$i", NULL, $width); $this->_showMegaMenuDetail($subs[$m], $level); //Show sub level $spid = $subs[$m]->id; if(@$this->_nav[$spid]) { $level = $level + 1; $scols = $this->getMegaMenuParam($subs[$m]->params, "mega_cols", 1); $this->showSubMegaMenu($subs[$m], $spid, $level, $scols); } $this->endDiv(); $m ++; } } else { $this->beginDiv("megacol column$i", NULL, $width); $this->beginUl("mega-ul ul"); for($k = 0; $k < $count; $k++) { if($k == 0) $class = "mega-li li first-item"; elseif($k ==($count - 1)) $class = "mega-li li last-item"; else $class = "mega-li li"; $spid = $subs[$m]->id; if(@$this->_nav[$spid]){ $id = "menu-$spid"; $class .= " hasChild"; } else{$id = "";} $this->beginLi($class, $id); $this->_showMegaMenuDetail($subs[$m], $level); //Show sub level if(@$this->_nav[$spid]) { $level = $level + 1; $scols = $this->getMegaMenuParam($subs[$m]->params, "mega_cols", 1); $this->beginDiv("menusub_mega", "menu-".$subs[$m]->id."_menusub_sub$level"); $this->showSubMegaMenu($subs[$m], $spid, $level, $scols); $this->endDiv(); } $this->endLi(); //Balance if($m == 0 && $bal !=0) for($b = 0; $b < $bal; $b++) { $m ++; $this->beginLi("mega-li li"); $this->_showMegaMenuDetail($subs[$m], $level); //Show sub level $spid = $subs[$m]->id; if(@$this->_nav[$spid]) { $level = $level + 1; $scols = $this->getMegaMenuParam($subs[$m]->params, "mega_cols", 1); $this->showSubMegaMenu($subs[$m], $spid, $level, $scols); } $this->endLi(); } $m ++; } $this->endUl(); $this->endDiv(); } } /* if(!$isgroup) { $this->endDiv(); $this->endDiv(); $this->endDiv();
$this->beginDiv("subwrapbottom", NULL, NULL); $this->beginDiv("subwrapbottom-left", NULL, NULL); $this->endDiv(); $this->beginDiv("subwrapbottom-right", NULL, NULL); $this->endDiv(); $this->endDiv(); } */ $this->endDiv(); } function isActive($row) { $active = $this->_active; $mid = $row->id; return(in_array($mid, $active))? true : false; } function getMegaMenuParam($params, $key, $default = 0) { $params = new JParameter($params); $type = $params->def($key, $default); return $type; } function genMegaTypeNormal($row, $level = 0) { $str = ""; $params = $row->params; $image = $this->getMegaMenuParam($params, "menu_image", -1); $stitle = $this->getMegaMenuParam($params, "mega_showtitle", 0); $desc = $this->getMegaMenuParam($params, "mega_desc", ''); $group = $this->getMegaMenuParam($params, "mega_group", 0); $width = $this->getMegaMenuParam($params, "mega_width", ''); $colw = $this->getMegaMenuParam($params, "mega_colw", ''); $colxw = $this->getMegaMenuParam($params, "mega_colxw", ''); //split menu-title if($group){ $title1 = ($stitle !== false)? JString::substr($row->title, 0, 1).'<span>'.JString::substr($row->title, 1).'</span>' : JString::substr($row->title, 1); $name = '<span class="menu-title"> </span>'; }else{ $name = '<span class="menu-title">'.$row->title.'</span>'; }
$description =($desc != '')? '<span class="menu-desc">'.$desc.'</span>' : ""; $title =($stitle)? " title=\"$row->title\"" : ""; $nofollow = ($this->getMegaMenuParam($params, "mega_nofollow", 0))? " rel=\"nofollow\"" : ""; if($image != -1) { //$itembg = 'style="background-image:url('.JURI::base(true).'/'.$image.');"'; $str = "<span class=\"has-image\" $itembg>".$name.$description.'</span>'; } else { $str = "<span class=\"no-image\">".$name.$description.'</span>'; } $Class = $this->activeClass($row, $level); $id = 'id="menusys'.$row->id.'"'; $add_class = $this->getMegaMenuParam($params, "mega_class", ''); if(@$row->url != null) { if($row->browserNav == 0) { $menuItem = '<a href="'.$row->url.'" '.$Class.' '.$id.' >'.$str.'</a>'; } elseif($row->browserNav == 1) { $menuItem = '<a target="_blank" href="'.$row->url.'" '.$Class.' '.$id.' '.$title.$nofollow.'>'.$str.'</a>'; } elseif($row->browserNav == 2) { $url = str_replace('index.php', 'index2.php', $tmp->url); $atts = 'toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=yes,width=500,height=350'; $menuItem = '<a href="'.$url.'" onclick="window.open("'.$url.'",\'targetWindow\',\''.$atts.'\'); return false;" '.$Class.' '.$id.' '.$title.$nofollow.'>'.$str.'</a>'; } } else { $menuItem = '<a '.$id.' '.$title.$nofollow.'>'.$str.'</a>'; } if($group) { $menuItem = '<div class="mega-group'.$add_class.'">'.$menuItem.'</div>'; } echo $menuItem; } function getModule($id=0, $name='') { $Itemid = $this->Itemid; $app = JFactory::getApplication(); $user = JFactory::getUser(); $groups = implode(',', $user->authorisedLevels()); $db = JFactory::getDbo();
$query = $db->getQuery(true); $query->select('id, title, module, position, content, showtitle, params, mm.menuid'); $query->from('#__modules AS m'); $query->join('LEFT','#__modules_menu AS mm ON mm.moduleid = m.id'); $query->where('m.published = 1'); $query->where('m.id = '.$id); $date = JFactory::getDate(); $now = $date->toMySQL(); $nullDate = $db->getNullDate(); $query->where('(m.publish_up = '.$db->Quote($nullDate).' OR m.publish_up <= '.$db->Quote($now).')'); $query->where('(m.publish_down = '.$db->Quote($nullDate).' OR m.publish_down >= '.$db->Quote($now).')');
$clientid =(int) $app->getClientId();
if(!$user->authorise('core.admin',1)) { $query->where('m.access IN('.$groups.')'); } $query->where('m.client_id = '. $clientid); if(isset($Itemid)) { $query->where('(mm.menuid = '.(int) $Itemid .' OR mm.menuid <= 0)'); } $query->order('position, ordering');
// Filter by language if($app->isSite() && $app->getLanguageFilter()) { $query->where('m.language in(' . $db->Quote(JFactory::getLanguage()->getTag()). ',' . $db->Quote('*'). ')'); }
// Set the query $db->setQuery($query); $cache = JFactory::getCache('com_modules', 'callback'); $cacheid = md5(serialize(array($Itemid, $groups, $clientid, JFactory::getLanguage()->getTag(), $id)));
$module = $cache->get(array($db, 'loadObject'), null, $cacheid, false); if(!$module) return null; $negId = $Itemid ? -(int)$Itemid : false; // The module is excluded if there is an explicit prohibition, or if // the Itemid is missing or zero and the module is in exclude mode. $negHit =($negId ===(int) $module->menuid) ||(!$negId &&(int)$module->menuid < 0);
// Only accept modules without explicit exclusions. if(!$negHit) { //determine if this is a custom module $file = $module->module; $custom = substr($file, 0, 4) == 'mod_' ? 0 : 1; $module->user = $custom; // Custom module name is given by the title field, otherwise strip off "com_" $module->name = $custom ? $module->title : substr($file, 4); $module->style = null; $module->position = strtolower($module->position); $clean[$module->id] = $module; } return $module; } function genMegaTypeMod($row, $level = 0, $mid, $style = 'xhtml') { $document = &JFactory::getDocument(); $renderer = $document->loadRenderer('module'); $params = array('style' => $style); $db = JFactory::getDBO(); if(count($mid)) for($i = 0; $i < count($mid); $i++) { $module = $this->getModule($mid[$i]); $this->beginDiv("mega-module"); echo $renderer->render($module, $params); $this->endDiv(); } } function genMegaTypePosition($row, $level = 0, $position, $style = 'xhtml') { $document = &JFactory::getDocument(); $renderer = $document->loadRenderer('module'); $params = array('style' => $style); $contents = ''; if(count($position)) for($i = 0; $i < count($position); $i++) { $modules = JModuleHelper::getModules($position[$i]); if(count($modules)) for($k = 0; $k < count($modules); $k++) { $this->beginDiv("mega-module"); echo $renderer->render($modules[$k], $params); $this->endDiv(); } } } function _showMegaMenuDetail($row, $level = 0) { $type = $this->getMegaMenuParam($row->params, 'mega_subcontent', 0); switch($type) { case "mod": $module = $this->getMegaMenuParam($row->params, 'mega_subcontent_mod_modules'); $style = $this->getMegaMenuParam($row->params, 'mega_module_style', 'xhtml'); $this->genMegaTypeMod($row, $level, $module, $style); break; case "pos": $position = $this->getMegaMenuParam($row->params, 'mega_subcontent_pos_positions'); $style = $this->getMegaMenuParam($row->params, 'mega_module_style', 'xhtml'); $this->genMegaTypePosition($row, $level, $position, $style); break; default: $this->genMegaTypeNormal($row, $level); break; } } function showDrillMenu($pid, $level) { if(@$this->_nav[$pid]) { $this->beginUl(); $i = 0; foreach($this->_nav[$pid] as $menu) { $this->beginLi(); if(count(@$this->_nav[$menu->id])) $this->echoText('<a href="#" title="Go To Submenu" class="next-link"><span class="next-title">'.$menu->title.'</span></a>'); $this->_showMenuDetail($menu, $level); if($level < $this->_end) $this->showDrillMenu($menu->id, $level+1); $this->endLi(); $i++; } $this->endUl(); } } //Begin, End DIV function beginDiv($class = NULL, $id = NULL, $style = NULL) { $class =($class)? ' class="'.$class.'"' : ''; $id =($id)? ' id="'.$id.'"' : ''; $style =($style)? ' style="'.$style.'"' : ''; echo '<div'.$id.$class.$style.'>'; }
function endDiv() { echo "</div>"; } //Begin, end UL function beginUl($class = NULL, $id = NULL, $style = NULL) { $class =($class)? ' class="'.$class.'"' : ''; $id =($id)? ' id="'.$id.'"' : ''; $style =($style)? ' style="'.$style.'"' : ''; echo '<ul'.$id.$class.$style.'>'; } function endUl() { echo "</ul>"; } //Begin, end LI function beginLi($class = NULL, $id = NULL, $style = NULL) { $class =($class)? ' class="'.$class.'"' : ''; $id =($id)? ' id="'.$id.'"' : ''; $style =($style)? ' style="'.$style.'"' : ''; echo '<li'.$id.$class.$style.'>'; } function endLi() { echo "</li>"; } //Function end menu function endMenu($text) { echo $text; } //Function echo TEXT function echoText($text) { echo $text; } } ?>
|
|
|
|
|
Записан
|
|
|
|
kepa
Осваиваюсь на форуме
 
Репутация: +1/-2
Offline
Пол: 
Сообщений: 63
|
 |
« Ответ #64 : 22.08.2012, 13:19:41 » |
|
up
|
|
|
|
|
Записан
|
|
|
|
|