Використання тегів в розширеннях joomla! 3
Система тегів в Joomla використовується у всіх Розширення ядра і призначена для легкої інтеграції в інші розширення, які використовують стандартні шаблони проектування Joomla.
Використовувати теги в розширенні досить просто. Для цього потрібно внести ці зміни в розширення:
- Зареєструвати типи контенту для видів розширення
- Додати "Observer methods" в класи таблиць розширення
- Додати поле тегів до розширення в формах редагування
- Додати код виведення тегів в файли видів розширення
- При бажанні можна додати метод пакетного створення тегів в панелі адміністрування розширення
Реєстрація типу контенту для кожного виду
При установці вашого розширення необхідно створити новий запис для кожного виду, що використовує теги.
Ось структура таблиці #__content_types. кожен стовпець буде описаний в наступних розділах.
Це поле є Автоінкрементний ключ записи.
type_title
type_alias
Рядок, що визначає компонент і вид (що б в запиті на сторінку, як правило, відповідні назву моделі), наприклад com_contact.contact, com_weblinks.weblink.
Кожен з цих компонентів використовується клас для запису в таблиці: ContactTableContact для компонента Контакти і WeblinksTableWeblink для компонента Посилань. Вам будуть потрібні префікси назв класів, наприклад ContactTable, WeblinksTable.
Осередок table дає повну інформацію про клас таблиці у вигляді об'єкта JSON з двома елементами. Перший елемент представляє свою "особливу" таблицю, другий - необов'язкову загальну таблицю (за замовчуванням виконається JTableCorecontent).
Масив налаштувань, який використовується в вашому компоненті в конструкторах і getInstance () методах, може бути порожнім
Ця інформація дозволяє системі тегів (і іншим інтерфейсів API) виробляти легкий доступ до таблиць компонента.
Примітки
- Іменем таблиці для головної таблиці є #__ucm_content; це невірно для 3.1 і 3.1.1, де ці дані не використовується. Дані використовуються починаючи з 3.1.4.
- Поле type_title потенційно може бути використано для відображення заголовків типів, хоча це не реалізовано в даний час, за винятком області ContentType. Зазвичай воно повинно починатися з великої літери, писатися англійською мовою. Дивись замітку про те, як зробити це поле перекладним: для того, щоб ваші імена типів були перекладними треба додати COM_TAGS_CONTENT_TYPE_ + type_title = "Type Title" в ini і sys.ini мовних файлах.
Правила в даний час не використовується. Це поле, ймовірно, буде видалено на користь asset_id для кожного типу, в даний час ви можете ігнорувати це поле, яке буде управлятися JTable.
field_mappings
Ця запис відображає відповідність імен стовпців в таблиці вашого компонента з набором стандартних Joomla! імен. Це відображення зберігається у вигляді масиву JSON з першим "common"
елементом із загальними полями і другим "special" елементом, що відображає інші поля з таблиці.
Ось запис field_mappings для Content Type Банер (обраний тому, що він є багатшими приклад, ніж статті або WebLink). Зверніть увагу, що 'загальні' відображення, які не мають ніякого еквівалента включені як «нуль» (залишаючи їх порожніми може викликати SQL питання); імена і значення в "спеціальної" елемента всього матчу, як вони обмежені до цього компоненту.
Примітка
- API-інтерфейси JHelperTags і JUcm в 3.1.1 підтримують масиви для цього поля, але за станом на 3.1.4 підтримуються масиви або об'єкти. За замовчуванням об'єкти.
Це необов'язкове поле включає ім'я статичного методу помічника маршрутизатора для цього типу, знайденого в фронт-енд папці помічників компонента, наприклад WeblinksHelperRoute :: getWeblinkRoute.
Якщо у вашому компоненті немає призначеного для користувача маршрутизатора, то теги повертаються до правил в JHelperRoute.
Якщо ви тільки зберігаєте дані в #__ucm_content ви в кінцевому підсумку можете залишити поле маршрутизатор порожнім, хоча ця опція ще не реалізована.
content_history_options
Цей розділ був доданий в Joomla! 3.2 як зв'язок з компонентом історії контенту.
Ось запис для типу контенту Банер:
створення запису
Можна робити записи в програмі установки в одному з трьох способів:
- в postflight методі інсталяційного скрипта
- шляхом створення екземпляра JTableContenttype і додавання рядка або
- за допомогою SQL, щоб створити запис безпосередньо
Зміна класу таблиці вашого компонента (або класи, якщо у вас є кілька таблиць)
Додайте наступне в вашому JTable конструктор:
Додавання цього рядка більше не потрібно після 3.1.4 ласка, прочитайте історію документа для цієї сторінки, якщо ви повинні підтримувати 3.1.0 або 3.1.1.
Для Joomla 3.2 потрібно додати цей рядок: (Не забудьте замінити weblinks вашим ім'ям компонента)
Додати теги до методу getItem () моделі
Примітка: це потрібно тільки в 3.1.0 і 3.1.1. Це не повинно бути використана в 3.1.4 або пізнішої версії. Будь ласка, прочитайте історію цій сторінці, якщо ви потрібні інструкції для більш старих версій.
Додавання поля тегів в види редагування
У будь-яких макетах редагування, де ви хочете використовувати цю функцію, ви повинні додати поле в XML і відповідних макетах при необхідності. Основні макети використовують JLayout для управління тегами, той же макет може бути використаний будь-яким розширенням.
Оновлення: Зверніть увагу, що тільки в3.1.1 є спеціальна обробка цього в ядрі. Теги в вигляді редагування ПОВИННІ бути частиною метаданих
В 3.1.4 або пізніше ця спеціальна обробка не потрібна. Найкращим варіантом є використання стандартних JLayouts так як це забезпечує послідовну процедуру для користувачів.
Поле має два режими:
- Nested tags mode. Ієрархічний список тегів. Не підтримує створення тегів нальоту.
- AJAX mode. Теги шукаються під час введення користувачем (хв. 3 символу необхідні для запуску пошуку AJAX). Призначені для користувача теги додаються натисканням на ENTER або кому. Теги показують глобальний маршрут / шлях. Приклад: grandpa / parent / tag
Поле може бути налаштоване для використання com_tags налаштувань Tag field mode. щоб визначити його режим. Для примусової установки режиму поля ми повинні додати mode = "ajax" або mode = "nested" до визначення поля тегів.
Приклад примусового режиму AJAX:
Поле також включає атрибут дозволити / заборонити йому вводити довільні значення тегів. В даний момент це працює тільки в режимі AJAX. Атрибут повинен бути доданий у визначенні поля як ** custom = "allow" ** або ** custom = "deny" **
Приклад поля з забороною довільних тегів:
якщо він ще не введений. Зазвичай multiple має бути true, якщо у вас немає особливих причин робити інакше. В основних компонентах в панелі адміністрування, поле тегів знаходиться в групі, показаної справа, нижче поля мови.
Примітка: Станом на 3.1.2, якщо ви хочете використовувати поле для позначення батьківських тегів, ви повинні додати parent = "parent" в XML визначення поля.
підготовка виду
Додайте в ваш view.html.php перед завантаженням макета:
Перший параметр повинен відповідати типу в таблиці типів. Другий параметр є первинним ключем, з яким цей запис зберігається в таблиці. Це може бути використано в будь-якому вигляді, де ви хочете вивести теги пов'язані з цим елементом.
У будь-якому макеті, де ви хочете відобразити теги, пов'язані з матеріалом введіть:
Змініть імена об'єктів і властивостей у міру необхідності.
Ви, швидше за все, хочете додати параметр show_tags параметрам елементів, параметрам пунктів меню і конфігурації компонентів у міру необхідності для вашого використання.
пакетна обробка
Якщо ви хочете додати можливість робити пакетне додавання тегів у вигляді списку матеріалів, додайте тег до default_batch layout
І додати тег до класу кнопки в модальному вікні (Не повністю необхідно на даний момент, але добре для потенційних майбутніх змін, наприклад, якщо додається unTag.)