Пятая статья из цикла "Создание MVC компонента для Joomla 1.6-2.5"

Сегодня мы поговорим о создании пользовательской части!

Вообще о создани пользовательской части много говорить не придется :)
Пользовательская часть строится абсолютно по тому же принципу что и админа!
Модели и виды именуются так же и работают точно также! Притом будет поддержка ACL

Но есть небольшие отличия!

Во первых пользовательская часть использует оюъекты таблиц из административной части!
Тоесть нам не нужно создавать папку tables в components/com_test/!
Таблички нужно создавать в папке administrator/components/com_test/tables/

Что бы получить экземпляр класса таблички получить в модели пользовательской части нужно написать следующий код:

$table = $this->getTable('имя_таблицы_в_папке_tables');

Также мы может получить настройки компонента:

$params = JComponentHelper::getParams( 'com_test' );
$paramName = $params->get('param_name', 'значение по умолчанию');

Ещё важный момент при создании пользовательской части - это создание рутера, который булет обеспечивать нам создание ЧПУ ссылок!

Для этого в корне компонента пользовательской части нужно создать файл router.php со следующим содержимым:

Файл router.php
<?php
// запрет доступа
defined( '_JEXEC' ) or die;

//Построение ЧПУ ссылки
function testBuildRoute( &$query )
{
	$segments = array();
	if ( isset( $query['view'] ) ) {
		$segments[] = $query['view'];
		unset( $query['view'] );
	}
	if ( isset( $query['task'] ) ) {
		$segments[] = $query['task'];
		unset( $query['task'] );
	}
	if ( isset( $query['id'] ) ) {
		$segments[] = $query['id'];
		unset( $query['id'] );
	}
	return $segments;
}

//Получение данных из чпу ссылки
function testParseRoute( $segments )
{
	$vars = array();
	$count = count( $segments );
	if ( $count ) {
		$count--;
		$segment = array_shift( $segments );
		if ( strpos( $segment, ':' ) !== false || is_numeric( $segment ) ) {
			$variable = explode( ':', $segment );
			$vars['id'] = intval( $variable[0] );
		}
		$vars['view'] = $segment;
	}
	if ( $count ) {
		$count--;
		$segment = array_shift( $segments );
		if ( strpos( $segment, ':' ) !== false || is_numeric( $segment ) ) {
			$variable = explode( ':', $segment );
			$vars['id'] = intval( $variable[0] );
		} else {
			$vars['task'] = $segment;
		}
	}
	if ( $count ) {
		$segment = array_shift( $segments );
		if ( strpos( $segment, ':' ) !== false || is_numeric( $segment ) ) {
			$variable = explode( ':', $segment );
			$vars['id'] = intval( $variable[0] );
		}
	}
	return $vars;
}

в файле router.php должно быть две функции:
имя_компонентаBuildRoute( &$query ) - которая служит для построения ЧПУ ссылки имя_компонентаParseRoute( $segments ) - которая служит для получения переменных из ЧПУ ссылки для того что бы их использовать в нашем компоненте!

Для того что бы наша ссылка была ЧПУ нужно использовать класс JRoute!
Пример создания ЧПУ ссылки:

echo JRoute::_( 'index.php?view=item&id=10' );

Если мы хотим из другого компонента или модуля создать ссылку на наш компонент то нам нужно передать в ссылке дополнительный параметр Itemid= со значением идентификатора пункта меню созданного для вида этого компонента

Скачать пример компонента com_test можно тут!