В данной статье даются советы по написанию ссылок в шаблонах Blox CMS. Советуем прежде прочитать обзорную статью об абсолютных и относительных ссылках. Обратите в этой статье особое внимание на действие, которое оказывает тег <base> на относительные ссылки и якоря, так как этот тег применяется на всех страничках сайта, построенного на Blox CMS.
Строка URL начинается с протокола передачи данных (http или https), обозначения (://) и хоста (доменного имени).
Если вы поместите файлы сайта в корневую папку домена, то URL сайта будет выглядеть так: http://bloxcms.net
Если вы поместите файлы сайта в какую-либо подпапку, то URL сайта будет выглядеть так:
http://bloxcms.net/subsite
.
Можно разместить сайта в более глубоких папках, тогда нужно привести весь путь.
http://bloxcms.net/aa/bb/subsite
Таким образом в Blox CMS можно получать подсайты основного сайта. Ничего специально делать не нужно — установка подсайта производится как обычно.
Чтобы получить 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>
Все страницы сайта, построенного на 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
.
В ЧПУ создается видимость пути к файлу. На самом деле страница по прежнему генерируется.
На всех страницах сайтов, созданных на Blox CMS, применяется HTML элемент <base> с главной страницей сайта в качестве базового 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 текущей страницы.
href="#toTop"
href="?item=1"
href="katalog/dreli/#toTop" href="katalog/dreli/?item=1"
href="<?=Blox::getPageUrl()?>#toTop" href="<?=Blox::getPageUrl()?>?item=1"
По умолчанию базовый 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::info('templates','url').
Этим вы превратите URL изображений и других файлов в абсолютные, указывающими на тот сайт, шаблоны которого вы хотите использовать.
Все внутренние абсолютные URL, вставляемые в окне редактирования в поле типа text, при сохранении будут преобразованы в относительные.