Використання тегів в розширеннях 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 є спеціальна обробка цього в ядрі. Теги в вигляді редагування ПОВИННІ бути частиною метаданих групи. Ядро забезпечує два JLayouts щоб допомогти вам керувати стандартними форматами - один (details) для метаданих і один для бічній панелі, яка включає вкладки. В оновленні розширення 3.1.4 вам може знадобитися, щоб виправити налаштувати виду редагування.

В 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.)

Додайте метод пакетної обробки до вашої моделі, якщо ви не розширювалися від JModelAdmin або перевизначати метод пакетної обробки.