Удобные для восприятия человеком ссылки формируются в файле 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;
}