З того часу як Joomla 1.0 відокремилась від CMS Mambo, вона пройшла шлях
від мішанини ООП і функціонального програмування із міксом PHP з HTML,
де часто, заради дрібних правок доводилось правити код самої системи, до
системи на базі MVC-фреймворка. Версія 1.5 принесла нам MVC, систему
подій та зручну шаблонізацію, завдяки яким поняття “хак” практично
зникло. 1.6 та 1.7 стали проміжними на шляху до наступної LTS-версії —
2.5. Цього разу ключовою зміною стало відокремлення Joomla CMS і Joomla
Platform. Joomla 3.0 знову є перехідною, перед виходом 3.5. Перше, що
можна в ній помітити — це направленість на мобільні пристрої та
впровадження Twitter Bootstrap, а разом з ним і jQuery. Також, нарешті,
добавлено модульне тестування. А “під капотом” криється нова концепція
MVC — HMVC.
http://itevent.if.ua/lecture/joomla-3-shcho-novogo-dlya-rozrobnikiv-u-novii-versiyi
Joomla 3. Що нового для розробників у новій версії - Віталій Маренков
1. Joomla 3
Що нового для розробників
Доповідач:
Віталій Маренков
admin@mavik.com.ua
Skype: vitaliy.marenkov
Студія mAvik
2. Сьогодні розглянемо
●
Нові системні вимоги
●
Twitter Bootstrap та
приціл на мобільні
пристрої
●
Модулі та плагіни
●
Компоненти
●
Joomla 3.1 і теги
●
Нова концепія MVC
●
Нові корисні бібліотеки
●
Чого чекати в майбутньому
Практична частина Теоретична частина
4. Короткий екскурс в історіюКороткий екскурс в історію
Joomla 1.5
Ядро
Компонент
PHP
Шаблон сайту
HTML
Плагіни
Шаблон
Компоненту
HTML
Компонент
PHP
Шаблон
Компоненту
HTML
5. Короткий екскурс в історію
Joomla 2.5
Joomla CMS
Компонент
PHP
Шаблон сайту
HTML
Плагіни
Шаблон
Компоненту
HTML
Компонент
PHP
Шаблон
Компоненту
HTML
Joomla Platform
6. Короткий екскурс в історію
Joomla 3
●
Версії 3.0, 3.1, 3.2 — перекідні до LTS-версії 3.5
●
Стандартизація користвувацького інтерфейсу
●
Нова версія Joomla Platform
●
Нова концепція MVC
9. Twitter Bootstrap
Twitter Bootstrap — html/css/js фреймворк, який
спрошує та прискорює верстку. Також він включає
js-скрипти для багатьох часто використовуваних
задач, наприклад: випадаючі меню, закладки,
акордеон і т.п.
Використовує LESS - динамічну мову стилів, яка
розширює звичні CSS змінними, вкладеними
блоками, міксами, опараторами та фукнціями.
Основною JS-бібліотекою тепер є jQuery.
11. Шаблони
●
Базуються на Twitter Bootstrap.
●
Joomla User Interface — бібліотека найбільш
вживаних елементів користувацького інтерфейсу.
●
Класс JHtmlBootstrap допогає використовувати
компоненти Twitter Bootsrap.
●
Вбудовані компоненти та модулі адаптовані для
роботи з Twitter Bootsrap.
●
В якості зразка можна використовувати шаблон
Protostar.
13. Шаблони. Використання LESS
●
Стилі шаблонів задаються в less-файлах.
●
В папку css файли потрапляють при компіляції less.
●
У файлі template.less відвувається «збирання»
стилів з необхідних компонентів JUI.
●
Використовуючи власний файл variables.less можна
налаштовувати Twitter Bootstrap.
●
Використання less.js для компіляції less на стороні
клієнта:
<link rel="stylesheet/less" type="text/css"
href="styles.less">
<script src="less.js" type="text/javascript"></script>
16. Шаблони. Використання LESS
Файл template.less (фрагмент):
// CSS Reset
@import "../../../media/jui/less/reset.less";
// Core variables and mixins
@import "variables.less"; // Custom for this template
@import "../../../media/jui/less/mixins.less";
// Grid system and page structure
@import "../../../media/jui/less/scaffolding.less";
@import "../../../media/jui/less/grid.less";
@import "../../../media/jui/less/layouts.less";
// Base CSS
@import "../../../media/jui/less/type.less";
@import "../../../media/jui/less/code.less";
@import "../../../media/jui/less/forms.less";
17. Шаблони
Файл index.php
●
Підключення Twitter Bootstrap:
JHtml::_('bootstrap.framework');
●
Використання HTML5 у старих версіх IE:
<!--[if lt IE 9]>
<script
src="<?php echo $this->baseurl ?>/media/jui/js/html5.js">
</script>
<![endif]-->
18. Спільні слої (layouts)
●
Пакет JLayouts дозволяє використовувати слої
(розмітки) спільно різними видами розширення,
або, навіть, кількома розширеннями.
●
Пакет JLayouts скадається з:
●
інтерфесу JLayout,
●
базового класу JLayoutBase,
●
класу JLayoutFile, який і є найбільш
застосувауваним.
19. Спільні слої (layouts)
●
Приклад використання JLayouts:
Простий приклад використання:
$layout = new JLayoutFile('joomla.sidebars.submenu',
$basePath = null);
$sidebarHtml = $layout->render($data);
●
Приклад використання у власному розширенні:
$layout = new JLayoutFile('my_layout',
JPATH_ROOT .'/components/com_something/layouts');
$html = $layout->render($data);
20. Спільні слої (layouts)
●
Приклад заміщення слою в шаблоні:
/administrator/templates/
{template}/html/layouts/joomla/sidebars/submenu.php
●
Рекомендовані каталоги для зберігання слоїв:
● /administrator/components/com_example/layouts
● /components/com_example/layouts
● /plugins/content/example/layouts
● /modules/mod_example/layouts
●
всередині каталогу layouts рекомендується сворити
підкаталог по назві розширення, наприклад:
● /components/com_example/layouts/com_example
22. Модулі та плагіни
●
В роботі модулів змін не відбулося.
●
Плагіни:
onContentBeforeSave і onContentAfterSave
параметр $article передається тепер
по значенню, а не по посиланню
23. Компоненти
●
В Joomla 3 новий фреймворк і нова MVC.
●
Всі наявні компоненти під Joomla 3, включаючи
вбудовані, використовують режим сумісності з 2.5.
24. Компоненти. Сумісніть.
●
В Joomla 3 є пакет сумісності з 2.5.
●
Joomla 2.5 має сумість вперед — для версії 3.
●
Класи JController, JModel та JView необхідно
замінити на JControllerLegacy, JModelLegacy та
JViewLegacy.
●
Вбудовані компоненти 2.5 вже використовували
JControllerLegacy, JModelLegacy та JViewLegacy.
25. Компоненти. Сумісніть.
Основн і зміни у вбудованих компонентах:
●
JRequest замінено на JFactory::getApplication()->input
В контролері $this->input.
JRequest все ще підтримується, але оголошено застарілим.
●
У виглядах замість $this->assignRef використовується
присвоєння значень властивостям $this.
●
Замість JDispatcher використовується JEventDispatcher.
●
Внутрішні шаблони розширень переписані під Twitter
Bootstap.
26. Компоненти. Сумісніть.
Адміністративна частина.
●
В адміністративній частині підменю тепер відображається не
зверху, а зліва.
●
Про відображення підменю потрібно потурбуватися самостійно:
●
В код виду потрібно добавити рядок:
$this->sidebar = JHtmlSidebar::render();
●
В шаблон добавити код для відображення підменю.
●
В решті коду потрібно замість JSubMenuHelper використовувати
JHtmlSidebar.
●
Шаблон адмніністративної частини компоненту тепер повинен
використовувати JUI та Twitter Bootstrap — це стандарт.
27. Joomla Platform 12.1
●
Видалено константу DS
Можна використовувати DIRECTORY_SEPARATOR.
●
Деякі глобальні константи перенесено в класи, з якими вони
логічно пов’язані.
●
Більшість класів не наслідуються від JObject.
●
В JObject видалено метод toString() тепер використовується
__toString().
●
Деякі класи переіменовано. Наприклад, JFTP тепер називається
JClientFtp.
●
У багатьох властивостей та методів видалено символа “_” на
початку назви.
●
Класи, назви яких складалися з прописних літер, переіменовані по
принципу CamelCase.
28. Joomla Platform 12.1
●
Замість JHtmlBehavior::mootools() тепер використовується
JHtmlBehavior::framework().
●
Замість JDate::toMysql() тепер JDate::toSql().
●
JUtility::sendMail() видалено. Використовуйте JMail::sendMail(), а
замість JUtility::sendAdminMail() - JMail::sendAdminMail()
●
Більшість методів тепер не повертає false, об’єкт JError або
JException, а викликає виключення.
●
Аргументи багатьох методів змінено.
29. Joomla 3.1 і теги
●
В Joomla 3.1 добавлено теги.
●
Теги впроваджено в усі вбудовані компоненти.
●
Теги можна впроваджувати у власних компонентах. Для цього
достатньо добавити поле типу tag.
●
Добавлено плагін для поля з автопідбором значення.
31. Нова концепія MVC
●
JController, JModel та JView тепер лише інтерфейси.
●
Нові базові класи: JModelBase , JViewBase і JControllerBase.
●
Нові котролери однозадачні.
●
Розширені класи JModelAdmin , JModelForm , JModelItem і
JModelList є частиною пакету сумісності.
32. Контролер
class MyController extends JControllerBase
{
public function execute()
{
$model = new MyModel();
$paths = new SplPriorityQueue;
$paths->insert(JPATH_BASE.'/view/item/tmpl', 1);
$view = new MyView($model, $paths);
return $view->render();
// Для AJAX останній рядок можна замінити на:
// return json_encode($model->getItems());
}
}
33. Модель
●
Базовий клас JModelBase.
●
Базовий клас для моделі, що використовую базу даних,
JModelDatabase.
/**
* Модель без використання бази даних
*/
class MyModel extends JModelBase
{
public function getTime()
{
return time();
}
}
34. Модель
/**
* Модель що використовує базу даних
*/
class MyModel extends JModelDatabase
{
public function getItems()
{
$q = $this->db->getQuery(true);
$q->select('*')
->from($q->qn('#__mytable'));
$this->db->setQuery($q);
return $this->db->loadResult();
}
}
35. Вид
●
Інтерфейс JView вимагає наявності лише методів escape
і render.
●
Базовий клас JViewBase не містить реалізації методу
render.
●
Базовий клас: JViewHtml містить реалізаці методу
render для використання з шаблонами.
●
Згідно нового стандарту файли видів повинні
іменуватися html.php, xml.php і т.д. відповідно до
формату вихідних даних.
36. Вид
/**
* Вид для виводу JSON
*/
class MyJsonView extends JViewBase
{
public function render()
{
$data = array(
'items' => $this->model->getItems()
);
return json_encode($data);
}
}
37. Нові корисні бібліотеки
●
Google для роботи з Google API.
Забезпечую взаємодію з сервісами Google, такими як:
календар, Picaso, Google+, картами.
●
Клієнт для протоколу OAuth2
38. Чого чекати в майбутньому
●
Цього року вийде Joomla Platform 13
●
Ведуться роботи над Joomla Framework, в якому буде:
●
простір імен
●
відхід від моноліту і побудову фреймворку на окремих
компонентах
●
встановлення за допомогою Composer