Теги в Joomla - використання поля - tag

1. Вступ
Ми вже писали про те, що в Joomla! 3.1 буде інтегрована нова система тегів, що включає такі ключові моменти:
- Мультимовність
- Структура вкладених тегів
- Інтеграція у всі базові компоненти
- Режим тегів (AJAX або вкладеність)
- Створення тега на льоту
- Легка інтеграція у будь-яке розширення
Теги - це те, чого так не вистачало в Joomla!
Мій (Roberto Sergua) внесок у систему тегів полягає в AJAX полі "tag" (тег). Маючи досвід роботи з іншими системами тегів, я встановив такі вимоги до цього поля:
- AJAX пошук тега
- Вставка свого тега натисканням кнопок ENTER або КОМ.
- Використання як основа jQuery плагін chosen
- Не редагувати безпосередньо плагін chosen або будь-яку іншу бібліотеку для можливості оновлення (за винятком перекладів)
2. Основне використання
Більшість розширень використовуватиме стандартний режим використання поля, тому заощадимо час розробникам і спочатку опишемо його.
Для використання системи тегів у розширенні потрібно просто визначити нове поле у вашому XML-файлі:
Ключ тут є type="tag" . І це все. Не треба піклуватися про залежність. Решту за вас зробить система.
Ось як відбувається процес рендерингу кнопки:
- Завантаження jQuery.
- Завантаження плагіна chosen.
- Завантаження плагіна ajax-chosen.
- Завантажити наш JS код для вставлення кастомних тегів.
3. Режим поля
У налаштуваннях компонента com_tags ви знайдете параметр для налаштування режиму поля: AJAX або Вкладення.
3.1.Автоматичний режим
Якщо ви не вкажіть режим поля у визначенні поля тега, то ваше поле будемо працювати відповідно до глобального настроювання в com_tags. За замовчуванням режим встановлено в AJAX.
3.2. AJAX режим
- Поле шукає теги в момент їхнього введення користувачем у полі тега. Для запуску пошуку необхідно ввести мінімум три символи.
- Поле дозволяє вставку свого тега шляхом його написання та натискання кнопки ENTER або КОМ.
- Усі неіснуючі теги, вставлені у полі, створюються на льоту у базі даних.
Щоб примусово використовувати режим AJAX, ви маєте визначити його так:
3.3. Режим вкладеності
- Відображає теги в ієрархічному порядку
- Кастомні теги недоступні
Щоб примусово використовувати режим вкладеності, ви маєте визначити його так:
4. Дозвіл/Заборона кастомних (своїх) тегів
Існують випадки коли ви захочете, щоб користувач міг вибрати теги, але не додавати нові. Поле включає додатковий атрибут custom, який змушує поле дозволяти/забороняти нові теги. Так як режим вкладення не дозволяє додавати нові теги, це налаштування працює тільки для режиму AJAX.
Якщо ви не вкажіть атрибут custom , поле буде дозволяти додавати теги за замовчуванням.
Для дозволу додавання тегів:
5. Додаткові інструменти для розробників
Я вирішив інтегрувати ajax-chosen як бібліотека без прив'язки до поля тег. Наступний розділ пояснить, як використовувати інтеграцію ajax-chosen і створити свою систему тегів.
5.1. ajax-chosen
Новий метод ajaxchosen був доданий у файл libraries/cms/html/formbehavior.php. Ось його визначення:
Опції, якідопустимі в об'єкті JRegistry $options є стандартними AJAX jQuery опціями, плюс деякі специфічні опції ajax-chosen:
- minTermLength : мінімальна кількість символів, яку необхідно надрукувати, щоб спрацював ajax виклик
- afterTypeDelay : через кілька секунд після зупинки написання ініціалізувати ajax виклик
- jsonTermKey : ajax-ключ запиту під час пошуку (за замовчуванням "term")
Я також додав опцію селектора, в який можна передати селектор об'єкта DOM для його автоматичної ініціалізації як ajax-chosen поля. Наприклад: #js-myfield
Як приклад, ми можемо взяти виклик, який виконує поле tag у файлі libraries/cms/html/tag.php :
Досить просто! AJAX результати мають бути повернуті згідно з документацією ajax-chosen. Для стандартних результатів формат такий:
Для згрупованих результатів:
5.2. Кастомне поле тег
Беручи за основу наше визначення поля тег, просто створити своє поле тег. Наприклад, якщо ми хочемо використовувати поле тег у своєму розширенні, але не хочемо завантажувати дані з базових таблиць.
Як приклад ми візьмемо систему тегів K2. Він використовує систему тегів з пошуковим параметром "q". Хелпер для поля тег буде наступним:
Звичайно, система тегів K2 повинна повертати теги в очікуваному форматі.
У визначенні нашого поля ми додамо виклик хелпера в метод getInput:
У файлі libraries/cms/form/field/tag.php можна знайти повне визначення поля тег.
6. Робота кипить
Поточна реалізація поля тег може бути поліпшена. Пропозиції та внесок вітаються. Ось міні todo список того, чим ви можете допомогти нам:
- Поліпшення реюзабіліті функції ajaxfield
- Відображення тегів у списках базових компонентів
- Додавання можливості додавати теги безпосередньо з уявлень списків базових компонентів
- Додавання дерева вкладені теги на льоту. Ви пишіть "motor/bikes/ducati" і створюється повне дерево тегів.