Автоматическое преобразование URL

Так как на сайте могут работать как человекопонятные ссылки, так и параметрические, возникает вопрос: "В каком виде вставлять ссылки в окне редактирования?"

Если вы вставите ЧПУ-ссылку и через некоторое время смените алиас данной целевой страницы или ее предка, ссылка перестанет работать.

Если применять в тексте параметрические ссылки, то при включенном режиме ЧПУ будет происходить перенаправление на человекопонятную ссылку. Этот вариант лучше, но он также не идеален с точки зрения SEO.

Для решения этой проблемы для текстовых полей было введено автоматическое преобразование URL в нужный формат.

Преобразование URL в параметрические при сохранении и преобразование в ЧПУ при выводе.

$params['urlDoubleConversionFields'] = [1, 2];

Если поле varchar или text находится в перечне параметра urlDoubleConversionFields, то при вставке внутренней ссылки в любом виде (в параметрическом или человекопонятном, в абсолютном или относительно корня сайта) она будет сохранена в параметрическом виде относительно корня сайта.

В полях типа text URL должен встречаться только в качестве значения атрибута href. В поле типа varchar должен быть записан только сам URL.

Теперь, при каждом выводе шаблона будет происходить преобразование URL в ЧПУ при условии, что в настройках сайта включен этот режим (режим ЧПУ включается в разделе: Сайт > Настройки сайта)

Пример:

.tdd
<?php
    $types[1]='text';
    $types[2]='varchar(255)';
    $params['urlDoubleConversionFields'] = [1,2];
?>
.tpl
<?=$dat[1]?>
<a href="<?=$dat[2]?>">Подробнее</a>
// Применять здесь Router::convert() уже не нужно

Рекомендуется всегда применять параметр urlDoubleConversionFields для полей типа varchar при хранении URL.

Что касается полей типа text, то если в них хранить большой объем текста, то будет происходить некоторая задержка, так как каждый раз при выводе шаблона этот текст будет сканироваться на предмет наличия ссылок. Большие текстовые поля лучше не включать в массив $params['urlDoubleConversionFields'], а использовать описанные ниже способы.

Параметр $params['urlDoubleConversionFields'] имеет приоритет над описанными ниже параметрами $params['urlConversionFields'] и $params['urlUnconversionFields'].

Применение параметра urlUnconversionFields в полях типа text

При сохранении данных в окне редактирования, внутренние URL (атрибуты a[href] и img[src]), попадающиеся в полях типа tinytext, text, mediumtext, longtext, будут автоматически преобразованы в относительные. Кроме этого, если режим ЧПУ включен, ссылки будут сохраняться в человекопонятном виде, а если режим ЧПУ отключен, ссылки будут сохраняться в параметрическом виде.

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

Например, следующий код <a href="http://bloxcms.net/?page=3"><img src="http://bloxcms.net/xFiles/more.png" /></a>
после сохранения, окажется таким:
<a href="o-kompanii/"><img src="xFiles/more.png" /></a>

Если необходимо отменить эти преобразования, то нужно перечислить соответствующие поля в массиве urlUnconversionFields:

.tdd

$params['urlUnconversionFields'] = [3];

При этом преобразование будет отменено только в отношении атрибутов a[href], атрибуты img[src] будут преобразованы в относительный вид в любом случае.

Применение параметра urlConversionFields в полях типа varchar

В полях типа varchar URL преобразовываться автоматически не будут — нужно явно указать поля, которые должны подвергаться преобразованиям. Для этого служит параметр дескриптора urlConversionFields:

.tdd

$params['urlConversionFields'] = [1, 2];
# В массиве перечислены поля шаблона, к которым будет применяться преобразование.

Параметр urlConversionFields может применяться только к полям типов varchar. Причем, поле, упомянутое в параметре urlConversionFields, должно быть использовано целиком только для URL, а не для html-кода, как в случае с полями типа text.

Заключение

Для обычных случаев рекомендуем следовать следующим правилам:

  • Для полей varchar применять параметр $params['urlDoubleConversionFields'].
  • Для полей text не применять ни один из описанных выше параметров (будет производиться преобразование по умолчанию).