Удобные для восприятия человеком ссылки формируются в файле route.php на стороне сайта.
Для формирования ЧПУ ссылок используются две функции.
- function ComponentnameBuildRoute(&$query)
- function ComponentnameParseRoute($segments)
BuildRoute формирует ЧПУ ссылку для определенных параметров, остальные параметры остаются в исходном виде.
ParseRoute переводит параметры в переменные, которые будут доступны дальше в компоненте.
Для формирования ссылки в BuildRoute будем использовать два параметра view и id. Их значения будет присваиваться массиву segments
function ComponentnameBuildRoute(&$query)
{
$segments = array();
if (isset($query['view'])) {
if ($query['view'] != 'file'){
$segments[] = $query['view'] . ':';
}
unset($query['view']);
}
if (isset($query['id'])) {
$segments[] = $query['id'];
unset($query['id']);
}
return $segments;
}
file это представление для отображения элемента списка.
То есть если значение $query['view'] это представление элемента списка, то BuildRoute вернет массив состоящий из обного элемента - id элемента списка.
id элемента списка формируем в представлении списка и оно имеет вид:
id . ':' . alias
Теперь в функции ParseRoute мы получаем сформированный массив $segments и формируем на его основе другой массив $vars, который передает переменные в компонент.
function GalleryfilesParseRoute($segments)
{
$vars = array();
$count = count($segments);
if ($count == 2){
$segment = array_shift($segments);
$vars['view'] = $segment;
}else{
$vars['view'] = 'file';
}
$segment = array_shift($segments);
$s = explode(':', $segment);
$vars['id'] = $s[0];
return $vars;
}
Если массив $segments состоит из одного элемента, то переменной view присваивается основное представление.
$vars['view'] = 'file';
Если массив $segments состоит из двух элементов, то переменной view присваивается переданное в $segments значение.
Получился простой файл для формирования ЧПУ - route.php:
<?php
/**
* @version 1.0.0
* @package com_componentname
* @copyright Copyright (C) 2013 jdevelop. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
defined('_JEXEC') or die;
/**
* ComponentnameBuildRoute
*
* @param array A named array
* @return array
*/
function ComponentnameBuildRoute(&$query)
{
$segments = array();
if (isset($query['view'])) {
if ($query['view'] != 'file'){
$segments[] = $query['view'] . ':';
}
unset($query['view']);
}
if (isset($query['id'])) {
$segments[] = $query['id'];
unset($query['id']);
}
return $segments;
}
/**
* ComponentnameParseRoute
*
* @param array A named array
* @param array
*/
function ComponentnameParseRoute($segments)
{
$vars = array();
// view is always the first element of the array
$count = count($segments);
if ($count == 2){
$segment = array_shift($segments);
$vars['view'] = $segment;
}else{
$vars['view'] = 'file';
}
$segment = array_shift($segments);
$s = explode(':', $segment);
$vars['id'] = $s[0];
return $vars;
}