Перехід з Joomla 1.5 до Joomla 1.6 для програмістів

08.07.2011

Joomla

У цій статті я розповім про труднощі при переході з 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 '
',JHTML::_('image.site',$image,NULL,NULL,NULL,$text),' ',$text,'
'; } echo '
'; JFactory::getDBO()->setQuery('SELECT `link`, `img`, `title` FROM jos_menu WHERE `parent_id`=40 ORDER BY `ordering`'); $res = &JFactory::getDBO()->loadObjectList(); if (isset($res[0])) { foreach ($res as $menu) { if (!isset($_REQUEST['tab'])) $_REQUEST['tab'] = NULL; $img = (is_file($img = strtr($menu->img,array('-16'=>NULL)))) ?$img :'../images/icons/icon.png'; $current = ($_REQUEST['tab'] != substr($menu->link,strpos($menu->link,'tab='.$_REQUEST['tab'])+4)) ?false :true ; $access = array('core.manage','com_users'); quickiconButton(htmlspecialchars($menu->link),htmlspecialchars($img),htmlspecialchars($menu->title),$current,$access); } } $current = ($_REQUEST['option'] != 'com_users') ?false :true; quickiconButton('index.php?option=com_users','templates/'.$app->getTemplate().'/images/header/icon-48-user.png',JText::_('MOD_QUICKICON_USER_MANAGER'), $current,array('core.manage','com_users')); $current = ($_REQUEST['option'] != 'com_config') ?false :true; quickiconButton('index.php?option=com_config','templates/'.$app->getTemplate().'/images/header/icon-48-config.png',JText::_('MOD_QUICKICON_GLOBAL_CONFIGURATION'), $current,array('core.manage','com_config','core.admin','com_config')); 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, яку потрібно виводити правий шаблон.

Останнє в нашому блозі

Інтернет маркетинг
04.11.2019