Переход с Joomla 1.5 на Joomla 1.6 для программистов
В этой статье я расскажу про трудности при переходе с Joomla 1.5.23 на Joomla 1.6.4, которые у меня возникли и о том как я с ними справился.
Изменения кардинально коснулись структуры БД, связанные, в том числе, с введением продвинутого доступа и различных стилей у шаблонов.
Компоненты
Больше не существуют таблицы компонентов `jos_components`, теперь компоненты, как и любые другие расширения, включая локализацию, шаблоны и модули, регистрируются в таблице `jos_extensions`.
Пример регистрации главного компонента сайта.
INSERT INTO `jos_extensions` (`extension_id`,`name`,`type`,`element`,`client_id`,`protected`,`manifest_cache`) VALUES (40,'Ceramoteka','component','com_ceramoteka',1,1,`{"legacy":false,"name":"Ceramoteka","type":"component","creationDate":"07.07.2011","author":"Ilya Indigo","version":"1.6.4","description":"Ceramoteka"}`);
Затем что бы зарегистрировать подкомпоненты нашего компонента, а точнее компоненты нашего сайта, их нужно прописывать не в таблице `jos_menu`.
Пример регистрации компонентов сайта в таблице меню.
INSERT INTO `jos_menu` (`id`,`menutype`,`title`,`alias`,`path`,`link`,`type`,`parent_id`,`level`,`component_id`,`ordering`,`img`,`home`,`language`,`client_id`) VALUES (40,'main','Ceramoteka','Ceramoteka','Ceramoteka','index.php?option=com_ceramoteka','component',1,1,40,0,'../images/icons/icon-16.png',0,'*',1), (41,'main','Текстовые страницы','Текстовые страницы','Текстовые страницы','index.php?option=com_ceramoteka&tab=text','component',40,2,40,1,'../images/icons/icon-16.png',1,'*',1), (42,'main','Каталог','Каталог','Каталог','index.php?option=com_ceramoteka&tab=catalog','component',40,2,40,2,'../images/icons/icon-16.png',0,'*',1), (43,'main','Наши проекты','Наши проекты','Наши проекты','index.php?option=com_ceramoteka&tab=portfolio','component',40,2,40,3,'../images/icons/icon-16.png',0,'*',1), (44,'main','Новости','Новости','Новости','index.php?option=com_ceramoteka&tab=news','component',40,2,40,4,'../images/icons/icon-16.png',0,'*',1), (45,'main','Партнёры','Партнёры','Партнёры','index.php?option=com_ceramoteka&tab=partner','component',40,2,40,5,'../images/icons/icon-16.png',0,'*',1), (46,'main','Конфигурация','Конфигурация','Конфигурация','index.php?option=com_ceramoteka&tab=config','component',40,2,40,6,'../images/icons/config-16.png',0,'*',1);
А так же в связи с введением уровней доступа код модуля быстрых иконок, для автоматического создания удобного меню в админке сайта, находящигося в папке administrator/modules/mod_quickicon/mod_quickicon.php изменяем наследующий.
Пример кода меню быстрых иконок.
authorise($access[$i],$access[$i+1])) return false; } $current = (!$current) ?NULL :' class="current"'; echo ''; } echo '
При этом предполагается, что в папке images/icons лежат иконки нашего меню, в таком формате 16*16 - иконка, путь которой прописывается в таблице `jos_menu` для соответствующего компонента сайта имеет вид icon-16.png, а иконка 48*48 нужная для отображения именно в этом меню имеет вид icon.png.
В двух словах отбрасывается строка '-16' в имени иконки и пытается найти иконку с этим новым именем, если не получается, то подставляется иконка с именем icon.png которая всегда должна там быть.
Шаблоны
что бы менеджер шаблонов определил наш шаблон, уже просто недостаточно его скопировать в папку templates. Теперь его так же нужно явно прописать сначала в таблице расширений.
Регистрация шаблона в таблице расширений
INSERT INTO `jos_extensions` (`extension_id`,`name`,`type`,`element`,`client_id`,`protected`,`manifest_cache`) VALUES (506,'Основной','template','main',0,1,`{"legacy":false,"name":"Основной","type":"template","creationDate":"07,07,2011","author":"Ilya Indigo","version":"1.6.4","description":"Основной"}`);
А затем ещё и зарегистрировать, как миниум 1, стиль этого шаблона в таблице стилей шаблонов.
Регистрация стиля шаблона в таблице стилей шаблонов
INSERT INTO `jos_template_styles` (`template`,`title`) VALUES ('main','Основной');
Меню клиентской части сайта.
У меня так и не получилось заставит менеджер меню создать ссылку не на один из моих компонентов. Скорее всего он это уже вообще не делает, так что процес создания главного и скрытого меню сайта, а точнее привязывания пунктов меню к компонетам делается полностью вручную через таблицы.
Сначала регистрируются необходимые модули меню в таблице модулей.
Регистрация модулей меню в таблице модулей
INSERT INTO `jos_modules` (`id`,`title`,`position`,`published`,`module`,`access`,`showtitle`,`language`) VALUES (19,'Главное меню','menu',1,'mod_menu',1,0,'*'), (20,'Скрытое меню','hidden',0,'mod_menu',1,0,'*');
А затем они ещё прописываются в таблице `jos_modules_menu`, где 19,20 - id соответствующих модулей меню в таблице `jos_modules`.
Регистрация модуля в таблице модулей
INSERT INTO `jos_modules_menu` (`moduleid`) VALUES (19), (20);
После регистрации модулей меню, ручная привязка пунктов меню к компонентам осуществляется в таблице `jos_menu`.
Привязка пунктов меню к компонентам в таблице меню
INSERT INTO `jos_menu` (`id`,`menutype`,`title`,`alias`,`path`,`link`,`type`,`parent_id`,`level`,`component_id`,`ordering`,`img`,`home`,`language`,`client_id`) VALUES (51,'mainmenu','Главная','index','index','index.php?option=com_ceramoteka&view=index','component',1,1,40,1,'',1,'*',0), (52,'mainmenu','Каталог','catalog','catalog','index.php?option=com_ceramoteka&view=catalog','component',1,1,40,2,'',0,'*',0), (53,'mainmenu','Наши проекты','portfolio','portfolio','index.php?option=com_ceramoteka&view=portfolio','component',1,1,40,3,'',0,'*',0), (54,'mainmenu','Новости','news','news','index.php?option=com_ceramoteka&view=news','component',1,1,40,4,'',0,'*',0), (55,'mainmenu','О компании','about','about','index.php?option=com_ceramoteka&view=about','component',1,1,40,5,'',0,'*',0), (56,'mainmenu','Партнёры','partner','partner','index.php?option=com_ceramoteka&view=partner','component',1,1,40,6,'',0,'*',0), (57,'mainmenu','Вакансии','vacancy','vacancy','index.php?option=com_ceramoteka&view=vacancy','component',1,1,40,7,'',0,'*',0), (58,'mainmenu','Контакты','contact','contact','index.php?option=com_ceramoteka&view=contact','component',1,1,40,8,'',0,'*',0);
Модули
Что бы менеджер модулей определил наш модуль, уже просто недостаточно его скопировать в папку modules, а потом вызвать диалог "Создать". Теперь его так же нужно явно прописать в таблице модулей.
Регистрация модуля в таблице модулей
INSERT INTO `jos_modules` (`id`,`title`,`position`,`published`,`module`,`access`,`showtitle`,`language`) VALUES (21,'Каталог','catalog',1,'mod_catalog',1,0,'*');
А затем ещё прописать его в таблице `jos_modules_menu`, где 21 - id соответствующего модуля в таблице `jos_modules`.
Регистрация модуля в таблице модулей
INSERT INTO `jos_modules_menu` (`moduleid`) VALUES (21);
Так же вместо объекта $mainframe, используется глобальный объект $app.
Непример если мы раньше вызывали функцию перенаправления таким кодом.
redirect('index.php'); ?>
То в Joomla 1.6 она будет выполнятся таким кодом.
redirect('index.php'); ?>
Ну а так же есть более мелкие проблемы не связанные с изменением структуры БД,такие как:
- Отсутствие готовой руссифицированной joom.ru-шной сборки, и необходимость вручную руссифицировать Joomla 1.6.
- Придёться заново править стили для нового шаблона админки bluestork.
- Отсутствие версии установленной Joomla в футере сайта, в новом шаблоне bluestork, которую нужно выводить правя шаблон.