Немного о системе разбора URL

В Е5 внедрена система автоматического разбора URL.

Система состоит из сладующих частей:

  • Зона (домен / домен+папка / любой домен + папка)
  • Части модулей, предназначенные для разбора URL
  • Таблицы, имеющие URL-столбцы, связанные с частями модуля

1. Разбор зоны

Вначале URL проходит проверку на привязку к зоне. Зоной может являться как отдельный домен, так и разные папки на одном и том же домене. Можно создавать зоны-ссылки, которые ссылаются на другие зоны.

Зона, в свою очередь, ссылается на определённый модуль и на определённый его экземпляр.
Например у зона "сайт1" может ссылаться на модуль "Содержание" экземпляр "Сайт 1" (типичная мультидоменная CMS). Можно создавать зоны без привязки к доменам, а только к папкам. Тогда на всех связных с системой доменах, при открытии адреса "/admin" (как пример) будет загружаться админка.

Зоны проходят проверку по IP-фильтру. Вы можете сделать так, чтобы один и тот же домен показывал разные сайты, если зайти на него из России и Украины (типичная CMS с поддержкой многоязычности). IP-фильтр системы может состоять из целого набора значений (тут и IP диапазоны, и указание городов или даже стран, согласно WHOIS написанию).

Итак, зона определена. Дальше система передаёт оставшуюся часть URL указанному в зоне экземпляру модуля.

2. Подбор части модуля

Получив контроль над оставшейся частью URL, модуль начинает перебирать все части, отвечающие за URL разбор и смотреть какая из них подходит.

Сама по себе часть может иметь какой-то установленный адрес (например archive или help), но в большенстве случаев часть связана с таблицей. Например у модуля "Содержание" часть "Вывод страницы" связана с таблицей "Страницы". У которой есть поле URL, по которому и будет происходить разбор. При этом разбор будет производиться с учётом подстраниц.

Далее, определённая страница называется переменной COW (аббривиатура к сожалению забыта мною), которая указана в коде части "Вывод страницы".

3. Усложнения

У нашей страницы может быть поле "Модуль", которое в свою очередь ведёт на некий экземпляр какого-либо модуля. Для его вывода часть "Вывод страницы" использует код [cow.module.auto], который передаст управление и оставшуюся часть URL следующему модулю (например, это могут быть новости или фотогалерея).

 Также, у страницы может быть подтаблица из другого модуля "Комментарии". Для отображение этой подтаблицы, мы можем вызвать этот самый модуль ([cow.comments.md.auto]), который в свою очередь также получит для разбора оставшуюся часть URL.

Надеюсь, моему дорогому читателю стало ясно, что вложенность модулей друг в друга может быть бесконечной. Также, как и вложенность строк.
Чисто теоретически, вы можете сделать такую систему, в которой содержание будет отсылать нас к новости, а новость к содержанию (только уже к своим страницам) и т.д.

В настройках "отлова" URL в части модуля, вы можете указывать такие замудрёные параметры, как:

1. Игнорировать строку-родителя при разборе. Разбор будет идти до самого последнего досягаемого элемента, и уже только тогда запустится часть. Например, имея адрес /Чайники/Россия/Самовар1Ф, часть сразу начнёт разбор с Самовара, пропуская и категории товара и страну производителя.

2. Включать в разбор строки из подчинённых таблиц. Я обычно для подтаблиц, использую отдельные части, которые наследуют разбор за текущими. А если подтаблица из другого модуля, то тем более - использую часть того модуля, откуда ко мне пришла эта таблица

3. Запускать в случае, если под URL не подошла ни одна часть. Банальный обработчик 404 ошибки. Теперь будет где написать "Страница не найдена" :) Кроме того, подобного эффекта можно добиться, если строке (чья таблица участвует в URL-разборе) присвоить адрес "-" (минус). Но возникают проблеммы, когда у таблицы одни строки влагаются в другие. Т.е. например адрес /абракадабра будет пойман, как не существующий, а вот адрес /news/абракадабра просто откроет перед нами страницу news.

Вот в принципе и всё, что я хотел рассказать о работе с URL. Рекомендую изучить примеры, которые показаны на рисунке в самом начале данного поста. Данные примеры представлены только для ознакомления. Автор ни в коем разе не думает, что такие решения (которые указаны в примерах) являлись бы оптимальными. Они придуманы только для демонстрации возможностей.

Автор: E5 Developer

Дата: 28 января 2013



Добавить комментарий

Имя

E-mail

Комментарий

Контрольный вопрос:
Сколько будет: 14+4-10


 
Наши работы
Массажные кровати LongLife

Благотворительная организация Преображение

Автомобили из Кореи СК-МОТОРС

Мобильные бани МОБИБА

Европейские ограждения Евростандарт

Портал недвижимости Аренда 911

Сеть саун Кантри

Строительная компания Сибирский Стиль

Автомобили из Кореи СК-МОТОРС

Арбитражный суд НСО

Сервис-кухня Ланч

Ремонт и обслуживание компьютеров ПК-Сервис

Интернет-каталог велосипедов и детской мебели Дами

 

Главная О студии Расценки Портфолио Статьи Контакты