Абсолютные и относительные ссылки в шаблонах

В данной статье даются советы по написанию ссылок в шаблонах Blox CMS. Советуем прежде прочитать обзорную статью об абсолютных и относительных ссылках. Обратите в этой статье особое внимание на действие, которое оказывает тег <base> на относительные ссылки и якоря, так как этот тег применяется на всех страничках сайта, построенного на Blox CMS.

URL сайта

Строка URL начинается с протокола передачи данных (http или https), обозначения (://) и хоста (доменного имени).
Если вы поместите файлы сайта в корневую папку домена, то URL сайта будет выглядеть так: http://bloxcms.net

Если вы поместите файлы сайта в какую-либо подпапку, то URL сайта будет выглядеть так:
http://bloxcms.net/subsite.
Можно разместить сайта в более глубоких папках, тогда нужно привести весь путь.
http://bloxcms.net/aa/bb/subsite
Таким образом в Blox CMS можно получать подсайты основного сайта. Ничего специально делать не нужно — установка подсайта производится как обычно.

URL главной страницы сайта

Чтобы получить URL главной страницы, нужно к URL сайта добавить слеш: http://bloxcms.net/ Слеш на конце означает, что по умолчанию будет вызван файл index.php, находящийся в корневой папке сайта. Фактически URL главной страницы выглядит следующим образом: http://bloxcms.net/index.php, однако, в Blox CMS сделано так, чтобы имя файла index.php можно было опустить.

Для ссылки на главную страницу сайта запись href="/" подойдет не всегда, а только для случая, когда сайт находится в корневой папке хоста. Для создания ссылки на главную страницу в любом шаблоне лучше писать href="". Почему, читайте ниже в параграфе, рассказывающем об элементе base.

<a href="" title="На главную"><img src="xFiles/logo.png"/></a>

URL страниц сайта

Все страницы сайта, построенного на Blox CMS, являются виртуальными, то есть, файлов страниц, как таковых, физически не существует. Страницы сайта генерируются с помощью запросов к файлу index.php. Как говорилось выше, имя этого файла можно опустить, и URL страницы можно записать так: http://bloxcms.net/?page=4&block=9&p[1]=99&part=3#anchor

URL страницы состоит из URL главной страницы (http://bloxcms.net/), вопросительного знака (?), и далее следуют различные параметры запроса, обязательным из которых является запрос номера страницы (page=4). URL может заканчиваться якорем (#anchor).

Существует альтернативный вариант URL страниц — это человекопонятный URL, или ЧПУ: http://bloxcms.net/katalog/instrument/dreli/3/#anchor. В ЧПУ создается видимость пути к файлу. На самом деле страница по прежнему генерируется.

Относительные URL и элемент base

На всех страницах сайтов, созданных на Blox CMS, применяется HTML элемент <base> с главной страницей сайта в качестве базового URL. В результате, URL главной страницы подставляется перед всеми относительными URL на странице. То есть, записывая относительный URL, нужно всегда помнить, что он будет относительным не относительно текущей страницы, а относительно главной страницы.

Все относительные URL,
выводимые на странице, должны быть записаны
относительно главной страницы сайта

Если вы используете параметрические ссылки, никаких проблем не возникает, так как параметрические URL — это фактически ссылки на главную страницу с дополнительными параметрами.

При используете же ЧПУ, нужно учитывать действие элемента base. Допустим, на странице
http://bloxcms.net/katalog/instrument/ вы создаете ссылку на другую страницу:
http://bloxcms.net/katalog/instrument/dreli/.

Если бы тег base на странице не действовал, относительная ссылка должна была бы выглядеть так:
href="dreli/". На самом деле нужно писать так:
href="katalog/instrument/dreli/"

Якоря

Как частный случай, при применении внутристраничных якорей и запросов к текущей странице нужно явно указывать URL текущей страницы.

Если бы не было <base>
href="#toTop"
href="?item=1"
С относительным URL
href="katalog/dreli/#toTop"
href="katalog/dreli/?item=1"
С абсолютным URL текущ.страницы
href="<?=Blox::getPageUrl()?>#toTop"
href="<?=Blox::getPageUrl()?>?item=1"

Указывайте явно URL текущей страницы,
абсолютный или относительно главной страницы.

Как отменить <base>

По умолчанию базовый URL всегда включен и равен URL главной страницы. Если вы хотите отменить базовый URL или изменить его, используйте переменную $baseUrl в индексном файле сайта index.php.

index.php

Если вы хотите отменить действие базового URL
$baseUrl = false;

Если вы хотите сделать базовый URL от корня домена
$baseUrl = 'http://site.ru/';
//или
$baseUrl = '/';

Если вы хотите сделать его от подпапки домена
$baseUrl = 'http://site.ru/subsite/';
//или
$baseUrl = '/subsite/';

Отключение base повлияет только на относительные ссылки и якоря. Если вы уже использовали абсолютные ссылки, то отключение base на них не повлияет. Чтобы переделать ссылки на абсолютные, нужно добавить слеш впереди адресов (если сайт лежит в корне домена):

<a href="/<?=Router::convert('?page=22')?>">Абсолютная ссылка</a>

Отключение base обычно делают, чтобы использовать относительные хеш-теги, например: href="#comments", вместо href="<?=Blox::getPageUrl()?>#comments" (при включенном по умолчанию base).

 

 


Примечания

  • Чтобы несколько сайтов могли работать на одном комплекте шаблонов, во всех относительных URL вида templates/..., нужно заменить слово templates на Blox::getInfo('templates','url'). Этим вы превратите URL изображений и других файлов в абсолютные, указывающими на тот сайт, шаблоны которого вы хотите использовать.

  • Все внутренние абсолютные URL, вставляемые в окне редактирования в поле типа text, при сохранении будут преобразованы в относительные.


См. также

 

   



URL (англ. Uniform Resource Locator) — Унифицированный Указатель Ресурса.
URL — это адрес, по которому можно найти любую веб-страницу или файл сети Интернет. То, что вы видите в адресной строке браузера и есть URL веб-страницы.