Joomla 3. Що нового для розробників у новій версії - Віталій МаренковIgor Bronovskyy З того часу як 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
2. Що таке стартова тема?
Стартова тема – це основа для створення проекту на WordPress. Вона часто включає:
- Код для ініціалізації областей меню та віджетів
- Створення нових типів записів та таксономій
- Функції для обробки подій та фільтрації даних
- Реєстрація стилів, скриптів та розмірів мініатюр
- Код для обробки AJAX-запитів
- Модулі для виводу навігації по сторінкам та по сайту в цілому
- Функції для вирішення типових задач на зразок обрізки тексту, виводу заголовків,
роботи з деревами категорій та багато іншого
3. Підходи до організації коду
1. Весь функціонал теми розміщується в файлі functions.php
2. Код розподіляється по окремим великим файлам без чіткого розділення по
задачам та без явних обмежень
3. Весь код розбивається на незалежні модулі в окремих файлах. Один модуль має
містити весь необхідний функціонал для реалізації основної задачі. Для обміну
даними використовується спеціальний інтерфейс
4. Навіщо розбивати код на незалежні модулі?
1. Незалежний модуль набагато простіше розробляти і тестувати
2. Модулі відчутно легше переносити в інші проекти
3. Цей підхід дозволяє тримати під контролем складність проекту
4. Розбивка на модулі надає більше гнучкості при розробці та тестуванні проекту
5. Стартова тема Twee
Короткий опис роботи:
1. В functions.php підключається файл init.php
2. Ініціалізація починається з включення файлу loader.php, який в свою чергу підключає
налаштування теми в settings.php, а також всі модулі в папках core, ajax та modules.
Модулі з віджетами підключаються трохи пізніше
3. Налаштування теми встановлюються та зчитуються за допомогою функцій
tw_get_setting() та tw_set_setting()
4. Далі в init.php запускається процес ініціалізації теми, додавання областей меню,
підключення перекладу, реєстрація вказаних розмірів мініатюр, типів записів і
таксономій, областей для віджетів і стилів редактора. Реєстрація стилів та скриптів
(assets) має свої особливості та здійснюється окремо в модулі assets.php
Репозиторій проекту: https://github.com/TwistedAndy/wp-theme
6. Створення віджетів
Для спрощення створення віджетів в стартовій темі Twee присутній клас Twisted_Widget.
Він дозволяє в автоматично виводити необхідні поля в налаштуваннях та виконувати їх перевірку.
Для реалізації віджета необхідно:
1. Створити новий файл /includes/widgets/name.php
2. Описати клас Twisted_Widget_Name, що наслідує Twisted_Widget
3. Вказати необхідні налаштування в полі fields
4. Реалізувати конструктор:
$settings['widgets'] = array(
'posts' => false,
'name' => true
);
function __construct() {
parent::__construct('twisted_widget_name', ‘Назва віджету', array('description' => ‘Короткий опис'));
}
5. Підключити віджет в settings.php:
7. Приклад віджета
class Twisted_Widget_Comments extends Twisted_Widget {
public $fields = array(
'title' => array(
'name' => 'Заголовок',
'value' => 'Останні коментарі',
'type' => 'text',
'filter' => 'widget_title'
),
'number' => array(
'name' => 'Кількість коментарів',
'value' => 5,
'type' => 'number'
),
);
function __construct() {
parent::__construct('twisted_widget_comments', 'Останні коментарі', array('description' => 'Останні коментарі з фото'));
}
public function widget($args, $instance) {
$instance = $this->fields_load($instance, false);
echo $args['before_widget'];
if ($instance['title']) echo $args['before_title'] . $instance['title'] . $args['after_title'];
$items = get_comments(array('status' => 'approve', 'number' => $instance['number']));
/* Тут код самого віждета */
echo $args['after_widget'];
}
}
Можливі значення типу поля:
• text
• textarea
• select
• checkbox
• radio
8. Навігація по сторінкам
Параметри виводу навігації по сторінкам (pagination) можна налаштувати в settings.php:
Повний список параметрів можна знайти в файлі з модулем: /includes/modules/pagination.php
Для виводу мініатюр можна використовувати функцію:
tw_pagination($args = array(), $query = false);
$args – массив параметрів, що перезаписують налаштування в самій темі. З важливого варто відмітити
параметр ‘type’, що може приймати значення ‘post’ для сторінок з записами, ‘comments’ для навігації по
коментарям та ‘page’ для навігації по статичній сторінці.
$query – об'єкт WP_Query. Це буває корисно, коли потрібно вивести навігацію для власного циклу
'pagination' => array(
'prev' => '◄',
'next' => '►',
'first' => false,
'last' => false,
),
9. Навігація по сайту
Параметри виводу навігації по сайту (breadcrumbs) можна налаштувати в settings.php:
Повний список параметрів можна знайти в файлі з модулем: /includes/modules/breadcrumbs.php
Для виводу навігації використовувати функцію:
tw_breadcrumbs($separator = '', $before = '<div class="breadcrumbs">', $after = '</div>’)
З особливостей варто відмітити параметр microdata. Якщо його встановити рівним ‘json’, то модуль буде автоматично генерувати
мікророзмітку в форматі JSON-LD та додавати її в секцію head сайту. Також підтримується додавання мікророзмітки безпосередньо в
блок з навігацією (значення ‘inline’)
'breadcrumbs' => array(
'microdata' => 'json',
'include_archive' => false,
'include_current' => true
),
10. Зображення та мініатюри у WordPress
Особливості реалізації:
1. Всі зображення виділені в окремий тип записів attachment
2. Розміри мініатюр реєструються за допомогою функції add_image_size()
3. Мініатюри генеруються при додаванні нового зображення для всіх зареєстрованих розмірів
4. Для виводу мініатюр використовуються функції get_the_post_thumbnail(),
wp_get_attachment_image() та інші
Основні проблеми:
1. При великій кількості розмірів зображень стає дуже багато
2. Не завжди можливо отримати зображення чітко у вказаному розмірі через особливості роботи
функції image_downsize()
3. Додаткові розміри зображень за умовчанням не відображаються в редакторі
4. В деяких випадках вивід мініатюри може вимагати додаткової обробки
11. Робота з мініатюрами в Twee
Розміри мініатюр вказуються в settings.php:
Для виводу мініатюр можна зручно функцію:
tw_thumb($image, $size = '', $before = '', $after = '', $atts = array(), $search_in_content = false);
$image – це ID об'єкту зображення, об'єкт WP_Post або масив поля з зображенням ACF
$size – розмір зображення у вигляді тексту чи масиву
$before та $after – вміст до та після зображення
$atts – масив з атрибутами. Він також може містити параметр ‘link’ з розміром зображення чи ‘url’ для посилання на запис (якщо $image – це WP_Post). У цьому
випадку зображення буде поміщене в посилання з класом, що переданий в параметрі ‘link_class’
$search_in_content – шукати зображення в тексті запису
$settings['thumbs'] = array(
'post' => array(
'label' => 'Рубрика',
'width' => 240,
'height' => 180,
'thumb' => true,
'crop' => array('center', 'center')
),
'slide' => array(
'width' => 500,
'height' => 360,
'hidden' => true
)
);
12. Стилі та скрипти у WordPress
Особливості реалізації:
1. Стилі та скрипти реєструються за допомогою функцій wp_register_sctipt() та
wp_register_style()
2. Підключення здійснюється через wp_enqueue_script() та wp_enqueue_style()
3. Для скриптів можна передати додаткові дані через wp_localize_sctipt()
Основні проблеми:
1. Неможливо об'єднати стилі, скрипти та додаткові дані в один набір (asset)
2. Під одним іменем можна зареєструвати лише один стиль чи скрипт
3. Підключення скриптів та передача даних через wp_localize_script() ускладнюється тим, що
скрипти реєструються набагато раніше ніж ініціалізується сама тема
4. Треба уважно підходити до вибору назви, щоб уникнути конфліктів із зареєстрованими стилями
та скриптами
13. Робота зі скриптами та стилями в Twee
Скрипти, стилі та додаткові дані об'єднуються в набори (asset). Їх конфігурація може бути описана
1. В settings.php:
$settings['assets'] = array(
‘asset_name' => array(
'deps' => array('jquery'),
'style' => array(
'css/style.css',
),
'script' => array(
'scripts/theme.js',
),
'localize' => array(
'ajaxurl' => admin_url('admin-ajax.php')
),
'footer' => true,
'display' => true
),
);
2. В файлах /assets/plugin/asset_name/index.php:
return array(
'style' => array(
'jquery.formstyler.css',
'jquery.formstyler.theme.css'
),
'script' => 'jquery.formstyler.min.js',
);
В процесі ініціалізації теми налаштування об'єднуються, приводяться до єдиного вигляду, реєструються в WordPress та по необхідності
підключаються. Конфігурація в settings.php має вищий пріоритет.
14. Конфігурація
Налаштування набору скриптів та стилів представляють собою масив:
array(
'deps' => array('jquery'),
'style' => array(
'jquery.formstyler.css',
'jquery.formstyler.theme.css'
),
'script' => 'jquery.formstyler.min.js',
'localize' => function() {
return array(
'id' => get_the_ID(),
'title' => get_the_title()
);
},
'display' => function() {
if (is_single()) {
return true;
} else {
return false;
}
},
'prefix' => 'tw_',
'version' => null,
'footer' => true
);
Опис конфігурації:
deps – масив з переліком залежностей
style - шлях до стилю чи масив зі стилями
script – шлях до скрипту чи масив зі скриптами. Стилі та скрипти підключаються
у тому порядку, в якому вони вказані
localize – масив або функція, що повертає масив з даними для скриптів
display – булеве значення або функцію, що його повертає. Вказує чи потрібно
підключати скрипт
prefix – префікс, з яким будуть реєструватися скрипти та стилі
version – версія скриптів та стилів
footer – вивід скрипті в кінці сторінки
15. Способи використання
1. Створюється папка /assets/plugins/asset_name
2. В папку поміщаються всі необхідні скрипти та стилі, а також index.php з конфігурацією
3. Для їх підключення на всіх сторінках можна встановити параметр display рівним true або перезаписати його в settings.php:
'asset_name' => array(
'display' => true
)
'asset_name' => true
або просто
4. Для підключення на певних сторінках можна використовувати один із способів:
- в параметрі display вказати функцію:
'display' => function(){
if (is_single()) {
return true;
} else {
return false;
}
}
- підключити їх вручну в шаблоні за допомогою:
tw_enqueue_asset(‘asset_name’);
16. Конструктор сторінок
Для створення власного конструктора сторінок необхідно:
1. Встановити Advanced Custom Fields Pro
2. Додати нове поле з типом Flexible Content та іменем field_name
3. Вказати декілька блоків з власними шаблонами (layout)
4. Створити папку blocks і помістити туди декілька файлів з іменами шаблонів з
налаштувань поля field_name
5. В коді теми в потрібному місці помістити:
<?php tw_get_blocks('field_name'); ?>
В блоках можна використовувати функцію tw_enqueue_asset() для підключення необхідних скриптів та стилів