Человекопонятные адреса в Joomla 1.5
Опубликовано: 01.09.2018
В Joomla более ранних версий, чем 1.5.х ссылки нельзя было видоизменять и сделать их, как в WordPress, человекопонятными. Начиная с версии 1.5.ч такая возможность появилась – теперь ссылки можно редактировать и видоизменять. Модуль mod_rewrite на apach включать совсем необязательно. Как пример, приведем статью «Welcome to Joomla». Пример первой ссылки – без применения mod_rewrite, пример второй – с применением модуля mod_rewrite:
http://www.example.com/index.php/thenews/1latestnews/1welcometojoomla
http://www.example.com/thenews/1latestnews/1welcometojoomlaПсевдонимы (алиасы)
Псевдоним сайта добавляется в адрес сайта вместо заголовка. В целях безопасности некоторые символы в UTF-8 подменяются эквивалентными, но кодированными в ASCII7. Псевдоним, или алиас создается самим пользователем и может быть любым, но в любом случае – безопасным, в случае неправильного применения символов вы получите предупреждение. Простейший способ получить безопасный псевдоним – применить метод Jtable::check(). Пример:
Настройка ЧПУ в Joomla 2 5
1 2 3 4 5 6 7 8 9 | function check() { jimport( 'joomla.filter.output' ); $alias = JOutputFilter::stringURLSafe( $this->title ); if(empty( $this->alias ) || $this->alias === $alias ) { $this->alias = $alias; } /* Все проверки */ return true; } |
function check() { jimport( 'joomla.filter.output' ); $alias = JOutputFilter::stringURLSafe( $this->title ); if(empty( $this->alias ) || $this->alias === $alias ) { $this->alias = $alias; } /* Все проверки */ return true; }
15-seo-secret-07. Что такое ЧПУ и страница 404
Если алиас небезопасен или является пустым полем, то вместо него будет использован заголовок сайта.
Слаг (код для вставки в сайт)
Как продолжение – использование кода «1welcometojoomla». Первая часть кода – идентификатор записи, вторая часть – псевдоним. Разделяются эти составляющие дефисом.
1 2 | $query = 'SELECT a.* CASE WHEN CHAR_LENGTH (a.alias) THEN CONCAT_WS(\':\', a.id, a.alias) ELSE a.id END as slug,'. [...]; |
$query = 'SELECT a.* CASE WHEN CHAR_LENGTH (a.alias) THEN CONCAT_WS(\':\', a.id, a.alias) ELSE a.id END as slug,'. [...];
Дальше вместо идентификатора задействуется слаг-код.
Метод JRoute
Данный метод переводит существующие ссылки в ссылки произвольные. Метод имеет 3 параметра значения:
1 | JRoute::_( $url, $xhtml = true, $ssl=0 ); |
JRoute::_( $url, $xhtml = true, $ssl=0 );
$ssl — целое число, указывающее на шифровку адреса. 1 – безопасный адрес, 0 — обычный, -1 означает, что адрес небезопасен.
$url — содержти относительную или абсолютную внутреннюю ссылку.
$xhtml – необязательное значение, указывающее на преобразование результата в XHTML.
Работа метода происходит следующим образом:
1 | JRoute::_( 'index.php?view=article&id='.$row->slug ); |
JRoute::_( 'index.php?view=article&id='.$row->slug );
$row->slug — параметр, комбинирующий идентификатор и заголовок-псевдоним.
Еще одно преимущество JRoute – возможность обработки имени компонента и идентификатора меню — $option и $Itemid. Теперь ссылка не использует эти компоненты, в отличие от более ранних версий Joomla.
Построение JRouter производится в два этапа:
1. Создается маршрутизатор. В действующих приложениях это делает JRouter.
2. Создается обработчик маршрута. Для этого JRouter должен найти router.php в каталоге.
router.php
Функции в router.php выполняют следующие задачи – построение адреса и обработка ссылки. Существует три вида – вид рубрик view = categories, вид одной рубрики option = category и вид статьи view=article.
Работа маршрутизатора:
1 2 3 4 5 6 7 8 9 10 11 12 | function [Componentname]BuildRoute( &$query ) { $segments = array(); if(isset($query['view'])) { $segments[] = $query['view']; unset( $query['view'] ); } if(isset($query['id'])) { $segments[] = $query['id']; unset( $query['id'] ); }; return $segments; } JRoute::_( 'index.php?view=article&id='.$row->slug ); |
function [Componentname]BuildRoute( &$query ) { $segments = array(); if(isset($query['view'])) { $segments[] = $query['view']; unset( $query['view'] ); } if(isset($query['id'])) { $segments[] = $query['id']; unset( $query['id'] ); }; return $segments; } JRoute::_( 'index.php?view=article&id='.$row->slug );
Массив $query передается к [Componentname] BuildRoute. Этот метод добавляет в правильном порядке части в $segments. Значение $query должно быть отключено, в противном случае JRouter будет добавлять его в адрес ссылки.
Продолжение статьи читайте здесь .
Понравилась запись? Подпишитесь на обновления по почте: