Створюємо ЧПУ для своїх компонентів у Joomla 1

У Joomla 1.5 механізм генерації посилань був повністю перероблений. Тепер ви можете як завгодно ширяти свої посилання, роблячи їх людино-читаними. Інше важливе нововведення - тепер необов'язково при цьому включати модуль модуль mod_rewrite.

Аліаси

Аліас зазвичай визначається самим користувачем під час створення посилання в меню, але ви повинні забезпечити, щоб вищезазначені вимоги до безпечного URL були виконані. Найпростіший спосіб зробити так це використовувати метод класу Jtable::check(). Ось як це виглядає з прикладу:

Слаг

Протягом прикладу, “слаг” - “1welcometojoomla” має дві частини. Перша частина - це id статті, і друга - це аліас. Вони розділені дефісом. Ці два елементи комбінуються в моделі за запитом до бази даних:

JRoute

Метод JRoute::_() перекладає наші посилання Joomla, на посилання довільного вигляду. JRoute має три параметри (на js і php ті самі):

$url — це рядок, що містить абсолютне або відносне посилання всередині joomla.$xhtml - булеве значення, яке вказує, чи має результат бути в XHTML. Цей параметр необов'язковий$ssl - це ціле число, яке вказує, чи URI має шифруватися. 1 - означає, що URI глобально захищений, 0 - стандартний стан, коли його було прийнято, і -1 - щоб URI був небезпечним.

Найважливішим параметром є $url. Працює метод так:

Іншою перевагою JRoute є те, що роутер обробляє $option (ім'я компонента) та $Itemid (ідентифікатор меню). Тепер посилання не потрібні $option і $Itemid, на відміну від попередніх версій Joomla.

Важливо, щоб ви зрозуміли параметри на цьому етапі. До router.php ми перейдемо далі.

Процес побудови JRouter складається з двохетапів:

1. Створити обробник маршруту У додатках маршрутом повністю займається JRouter і розробник компонента не потрібно робити нічого, щоб він працював.

2. Створити обробник маршруту компонента Для створення маршруту компонента, JRouter шукає файл router.php у каталозі компонента. Файл router.php відповідає за будівництво посилань для компонента.

Простий приклад: Цей простий приклад покаже основи роботи маршрутизатора у вашому компоненті.

JRouter передає масив $query до функції [Componentname] BuildRoute. Ця функція буде додавати відповідні частини до масиву $segments у правильному порядку. Значення масиву запиту $query потрібно відключати, інакше JRouter додасть його до URL.

Наступна функція в router.php парсит URL:

Що тут відбувається? У функції [Componentname]BuildRoute ми організували елементи в масиві $query у конкретній послідовності. Це означає, що в даному прикладі Вигляд йде першим, другим catid і id третім. Ми вибрали правильний вигляд, залежно від значення id, і повернули масив $vars в JRouter.

Це дуже простий приклад. URL, що генерується, в цьому прикладі містить ім'я Вида, і не відображає змісту ієрархії, тому що відображає посилання в наступному вигляді: http://www.example.com/[menualias]/[view]/[slug] .

Більш складний приклад:

У цьому прикладі ми створимо ієрархію такого виду:

Зверніть увагу, що ми не додали ім'я Вида до масиву $segments. Ще одна нова річ тут, це додатковий параметр catid тому, що ми натискаємо на $ сегментів масиву. Ми як і раніше відключаємо змінну $query['view'], щоб забрати її з url.

Ще одна нова річ тут, це додатковий параметр catid, який мипередаємо у масив $segments.

У цій функції ParseRoute є багато різних частин коду в порівнянні з попереднім. Причина цього проста. Ми не маємо ім'я виду в масив $segments, і ми повинні знайти інший спосіб передати її.

Ми повинні дізнатися, на якому рівні ієрархії ми знаходимося, отримуючи кореневий елемент. Ми робимо це, подивившись ім'я Вида у назві активного меню:

Крім того, нам потрібно знати кількість елементів у масиві $segments: $count = count( $segments ); За допомогою цієї інформації ми зможемо правильно встановлювати ієрархію у всіх трьох можливих випадках.

У результаті ми отримуємо людяне посилання.