Перехід з 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, яку потрібно виводити правий шаблон.