Наверх

Маршрутизатор

Route – класс для работы с ЧПУ. Описан он файле includes/route.php. Объект класса создается в административной и пользовательской частях и в модулях доступен для обращения через переменную $this->diafan->_route. Класс используется в моделях модулей и обработчиках POST-запросов.

Свойства

Свойства класса Route – переменнные передаваемые в URL. Список всех доступных переменных задан в файле adm/includes/init.php (для административной части) и includes/init.php (для пользовательской части) и доступен через массив $this->diafan->rewrite_variable_names_all.

Переменные, передавамые в URL в пользовательской части:

integer page – номер страницы для пагинации.

Пример:

// http://site.ru/news/page2/
// вторая страница списка новостей, если отключены категории
$this->diafan->_route->page = 2;

integer show – идентификатор элемента модуля, если отключено автоматическое формирование ЧПУ.

Пример:

// http://site.ru/news/show2/
// страница новости ID=2
$this->diafan->_route->show = 2;

integer add – добавление нового элемента.

Пример:

// http://site.ru/ads/add1/
// страница добавления объявления
$this->diafan->_route->add = 1;

integer edit – редактирование элемента.

Пример:

// http://site.ru/ads/edit15/
// страница редактирования объявления ID=15
$this->diafan->_route->edit = 15;

integer param – идентификатор значения дополнительной характеристики.

Пример:

// http://site.ru/shop/param3/
// страница товаров красного (ID=3) цвета
$this->diafan->_route->param = 3;

integer dpage – номер страницы для дополнительной пагинации.

Пример:

// http://site.ru/shop/palatki/52d/dpage3/
// третья страница списка комментариев на странице товара
$this->diafan->_route->dpage = 3;

integer cat – идентификатор категории.

Пример:

// http://site.ru/shop/cat5/
// страница категории товаров ID=5
$this->diafan->_route->cat = 5;

integer brand – идентификатор производителя.

Пример:

// http://site.ru/shop/brand1/
// страница производителя товаров ID=1
$this->diafan->_route->brand = 1;

integer year – год.

Пример:

// http://site.ru/news/year2013/
// список новостей за 2013 год
$this->diafan->_route->year = 2013;

integer month – месяц.

Пример:

// http://site.ru/ads/year2013/month11/
// список объявлений за ноябрь 2013 года
$this->diafan->_route->month = 11;

integer step – шаг.

Пример:

// http://site.ru/shop/cart/step2/
// шаг 2 при оформлении заказа в магазине
$this->diafan->_route->step = 2;

integer sort – направление сортировки.

Пример:

// http://site.ru/shop/palatki/sort2/
// список товаров в категории с сортировкой по убыванию цены
$this->diafan->_route->sort = 2;

Переменные, передавамые в URL в административной части:

integer page – номер страницы для пагинации.

Пример:

// http://site.ru/admin/news/page2/
// вторая страница списка новостей
$this->diafan->_route->page = 2;

integer addnew – добавление нового элемента.

Пример:

// http://site.ru/admin/ab/category/addnew1/
// страница добавления категории объявлений
$this->diafan->_route->addnew = 1;

integer edit – редактирование элемента.

Пример:

// http://site.ru/admin/news/edit15/
// страница редактирования новости ID=15
$this->diafan->_route->edit = 15;

integer site – идентификатор раздела сайта.

Пример:

// http://site.ru/admin/shop/site3/
// список товаров, прикрепленных к странице сайта ID=3
$this->diafan->_route->site = 3;

integer cat – идентификатор категории.

Пример:

// http://site.ru/admin/shop/cat5/
// список товаров, прикрепленных к категории ID=5
$this->diafan->_route->cat = 5;

integer parent – идентификатор родителя.

Пример:

// http://site.ru/admin/site/parent4/
// список страниц сайта, раскрыты вложенные страницы для пункта ID=4
$this->diafan->_route->parent = 4;

integer error – номер ошибки.

Пример:

// http://site.ru/admin/shop/error7/
// страница, на которой будет выведена ошибка:
// Внимание! Не установлена библиотека GD. Работа модуля невозможна. Обратитесь в техподдержку вашего хостинга!
$this->diafan->_route->error = 7;

integer success – сообщения об успешном выполнении.

Пример:

// http://site.ru/admin/shop/success1/
// страница, на которой будет выведено сообщение:
// Изменения сохранены!
$this->diafan->_route->success = 1;

Свойства

var variable_names_site = array('cat', 'param', 'show', 'dpage', 'rpage', 'brand', 'year', 'month', 'day', 'step', 'sort', 'add', 'edit', 'page') – переменные, передаваемые в URL в пользовательской части.

var variable_names_admin = array ('edit', 'savenew', 'save', 'addnew', 'site', 'cat', 'parent', 'page', 'error', 'success') – переменные, передаваемые в URL в административной части.

Методы

void save (string $rewrite, string $text, integer $element_id, string $module_name, string $element_type, integer $site_id, [integer $cat_id = 0], [integer $parent_id = 0], [boolean $add_parents = false], [boolean $change_children = false]) – Сохраняет ЧПУ.

  • string $rewrite: псевдоссылка
  • string $text: значение, из которого автоматически генерируется ЧПУ
  • integer $element_id: номер элемента модуля
  • string $module_name: модуль
  • string $element_type: тип данных (element – элемент (по умолчанию), cat – категория, param – значение списка доп.характеристики, brand – производитель)
  • integer $site_id: номер страницы сайта
  • integer $cat_id: номер категории
  • integer $parent_id: номер родителя
  • boolean $add_parents: добавлять ЧПУ родительских элементов
  • boolean $change_children: изменить ЧПУ у детей

Пример:

// генерируем и сохраняем ЧПУ для товара ID=54 из имени, согласно настройкам
// в начале ЧПУ будет добавлено ЧПУ категории ID=2
// или страницы сайта ID=3
$this->diafan->_route->save('', 'Рюкзак «Контур 50»', 54, 'shop', 'element', 3, 2, 0, true);

// сохраняем ЧПУ для страницы сайта ID=5, заменяем первую часть ЧПУ
// у вложенных страниц
$this->diafan->_route->save('about', 'О компании', 5, 'site', 'element', 5, 0, 0, true, true);
/* к примеру была следующая структура страниц:
О компании /company/
    История /company/history/
    Философия /company/philosophy/
    Обратная связь /feedback/

результат работы функции:
О компании /about/
    История /about/history/
    Философия /about/philosophy/
    Обратная связь /feedback/
*/

void delete (integer|array $element_ids, string $module_name, [string $element_type = 'element']) – Удаляет ЧПУ одного или нескольких элементов.

  • integer|array $element_ids: номер одного или нескольких элементов
  • string $module_name: название модуля
  • string $element_type: тип данных

string generate_rewrite (string $text) – Генерирует псевдоссылку.

  • string $text: исходный текст

Пример:

$rewrite = $this->diafan->_route->generate_rewrite('Рюкзак «Контур 50»');
// вернет: ryukzak-kontur-50, если метод преобразования в «Параметрах сайта» задан как «транслит»

string link (integer $site_id, [integer $element_id = 0], [string $module_name = ''], [string $element_type = 'element'], [boolean $insert_route_end = true]) – Генерирует ссылку.

  • integer $site_id: номер страницы сайта
  • integer $element_id: номер элемента
  • string $module_name: модуль
  • string $element_type: тип данных (element – элемент (по умолчанию), cat – категория, param – значение списка доп.характеристики, brand – производитель)
  • boolean $insert_route_end: добавлять окончание ЧПУ в конце ссылки

Пример:

// получим ссылку на страницу производителя ID=1,
// прикрепленного к странице сайта ID=3
$link = $this->diafan->_route->link(3, 1, "shop", "brand");

// получим ссылку на страницу сайта ID=5
$link = $this->diafan->_route->link(5);

void prepare (integer $site_id, integer $element_id, string $module_name, [string $element_type = 'element']) – Подготавливает ЧПУ.

  • integer $site_id: номер страницы сайта
  • integer $element_id: номер элемента
  • string $module_name: модуль
  • string $element_type: тип данных (element – элемент (по умолчанию), cat – категория, param – значение списка доп.характеристики, brand – производитель)

Пример:

// в этом примере будет выполенено три SQL-запроса к базе данных
// для получения ЧПУ всех заданных товаров
$ids = array(3, 5, 7);
foreach(
$ids as $id)
{
    
$link[$id] = $this->diafan->_route->link(3, $id, "shop");
}

Пример:

// в этом примере будет выполен один SQL-запрос к базе данных
// для получения ЧПУ всех заданных товаров
$ids = array(3, 5, 7);
foreach(
$ids as $id)
{
    
$this->diafan->_route->prepare(3, $id, 'shop');
}
foreach(
$ids as $id)
{
    
$link[$id] = $this->diafan->_route->link(3, $id, "shop");
}

string|boolean false module (string $module_name, [boolean $route_end = true]) – Получает ЧПУ страницы сайта по названию модуля.

  • string $module_name: название модуля
  • boolean $route_end: выводить окончание

Пример:

// получаем ссылку на страниц корзины
$link = BASE_PATH_HREF.$this->diafan->_route->module("cart");

mixed id_module (string $module_name, [mixed $site_id = 0], [boolean $return_array = true]) – Определяет номер страницы, к которой прикреплен модуль, доступной текущему пользователю.

  • string $module_name: название модуля
  • mixed $site_id: номер страницы (если задан, определяет прикреплен ли модуль, есть ли доступ)
  • boolean $return_array: вернуть массив (или один номер)

Пример:

// определяем ID страницы сайта, к которой подключен модуль «Личные сообщения»
$site_id = $this->diafan->_route->id_module("messages", 0, false);

// из переменных ID выбираем те, к которым подключен модуль «Магазин»
$site_ids = $this->diafan->_route->id_module("shop", array(3, 5, 6));

string current_link ([string|array $exclude = ''], [array $include = array()]) – Выдает URL текущей страницы с включенными или исключенными переменными.

  • string|array $exclude: исключенные переменные
  • array $include: включенные переменные

Пример:

// убираем из адреса текущей страницы переменные page и dpage и добавляем add1/
$link = $this->diafan->_route->current_link(array("page", "dpage"), array("add" => 1));
// например, для страницы http://site.ru/shop/palatki/page3/dpage2/sort2/
// результат будет http://site.ru/shop/palatki/sort2/add1/

string current_admin_link ([string|array $exclude = '']) – Выдает URL текущей страницы административной части с включенными переменными.

  • string|array $exclude: исключенные переменные

Пример:

// убираем из адреса текущей страницы переменные page и parent
$link = $this->diafan->_route->current_admin_link(array("page", "parent"));
// например, для страницы http://site.ru/admin/site/parent15/page2/
// результат будет http://site.ru/admin/site/

array|boolean false search (string $rewrite, [boolean $arguments_in_url = false]) – Ищет псевдоссылку в базе данных.

  • string $rewrite: текущая псевдоссылка
  • boolean $arguments_in_url: в URL переданы аргументы

Пример:

print_r( $this->diafan->_route->search('shop'));
/* выведет:
Array
(
    [module_name] => site
    [element_id] => 3
    [element_type] => element
    [rewrite] => shop
) */

string replace_link_to_id (string $text) – Заменяет ссылки на идентификаторы.

  • string $text: исходный текст

Пример:

// обрабатываем текст, добавленный через визуальный редактор
// перед сохранением в базу данных
$text = $this->diafan->_route->replace_link_to_id($_POST["text"]);

string replace_id_to_link (string $text) – Заменяет идентификаторы ссылки на ЧПУ.

  • string $text: исходный текст

Пример:

// преобразуем текст, полученных из базы данных перед выводом на экран
echo $this->diafan->_route->replace_id_to_link($text);

Ваши комментарии и дополнения

А где описание всех вариантов для sort?
Первые 4 зарезервированы под цену и имя:
1 - цена по возрастанию
2 - ценап по убыванию
3 - наименование от а до я
4 - наименование от я до а
Это можно посмотреть в демо-версии. Остальные задаются опцией "Отображать параметры в блоке для сортировки товаров" для дополнительных характеристик.
Метод Route::link() возвращает относительный URL вида «shop/foo/bar»!
Зарегистрируйтесь или авторизируйтесь для того, чтобы оставить комментарий.