SEO паттерны
Начиная с InstantCMS 2.8 в движке поддерживаются гибкие шаблоны генерации SEO параметров. Это означает, что CMS согласно заданных шаблонов сформирует самостоятельно в автоматическом режиме теги:
- title
- meta description
- meta keywords
- h1
На текущий момент поддерживается генерация шаблонов для:
- страниц профилей пользователей
- страниц групп
- записей типов контента (кроме тега h1)
Для записей типов контента поддерживается также шаблон генерации URL.
Шаблон — SEO паттерн — это обычный текстовый блок с возможностью вставлять в фигурных скобках поля и выражения. Например, шаблон тега h1 для профиля может быть в самом простом случае таким:
Привет, это {nickname}
{nickname} - это название поля (или ячейки в базе данных) в котором хранится значение. В данном случае этот шаблон выведет на странице:
Привет, это Вася.
Полей в фигурных скобках можно использовать сколько угодно, таким образом строя фразы и предложения.
Выше был приведён самый простой шаблон, но CMS поддерживает и сложные шаблоны с подвыражениями, например:
{nickname}, {birth_date|string_date_age:0=y}, город {city_cache}
Выведет
Петя, 35 лет, Москва
Рассмотрим данный пример.
{nickname} — тут всё просто, это просто чистое значение поля nickname.
{birth_date|string_date_age:0=y} — выражение можно условно разбить на две части: название поля и через прямую черту название функции, через которую нужно «прогнать» значение поля. После названия функции через двоеточие могут идти (но не обязательно) дополнительные параметры, которые нужно передать в функцию вторым, третьим и т.п. аргументами. При этом первым аргументом в функцию всегда передаётся само значение поля. Если параметр функции должен быть массив, то сформируйте его по принципу формата строки запроса URL, например:
first=value&arr[]=foo+bar&arr[]=baz
в таком случае в параметр передастся массив
array('first' => 'value', 'arr' => array('foo bar', 'baz'))
Как раз в случае примера выше {birth_date|string_date_age:0=y}
в функцию string_date_age передаётся первым параметром значение поля birth_date, а вторым параметром массив array('y')
.
Список строковых функций вы найдёте в файле /system/libs/strings.helper.php
или /system/libs/html.helper.php
, но и в том числе вы можете пользоваться любыми строковыми функциями PHP.
Пример с еще одной полезной функцией:
{title}, {comments|html_spellcount:комментарий:комментария:комментариев}, рейтинг {rating|html_spellcount:пункт:пункта:пунктов}
Выведет
Бизнес ожидает снижения налогов, 21 комментарий, рейтинг 34 пункта
Также обратите внимание, что в примере выше используется выражение {city_cache}. Поля с таким названием нет в списке полей в админке, однако есть поле {city}. Некоторые поля имеют в базе данных дополнительную ячейку с кэшированным значением для упрощения выборки. Соответственно в данном случае в поле {city} будет число с id города, а в поле {city_cache} название города, которое нам и нужно.
Теперь рассмотрим выражение, когда нам нужно сформировать текст с нестандартным порядком слов, например, в шаблоне компонента Группы мы можем использовать такое выражение для тега h1:
{title} {sub_title: / %s}
Ячейка sub_title в данном случае вспомогательная и несёт в себе название вкладки. При этом на главной странице группы ячейка sub_title пустая и мы хотим, чтобы пустое значение отсутствовало, а когда бы мы находились в любой из вкладок название группы дополнялось названием вкладки через косую черту. Например, логично было предположить, что такую задачу можно было решить выражением:
{title} / {sub_title}
Но тогда, если sub_title пустая, на странице будет выведено:
Робототехника /
Поэтому в таких случаях, лучше использовать первое выражение. Принцип его построения прост:
Название_ячейки: любой текст, а там, где мы хотим вставить значение ячейки поставить символы ''%s'', т.е. {sub_title: / %s}
Технически, всё, что будет стоять после двоеточия в конце имени поля воспринимается как формат для функции sprintf. При этом аргумент передаётся один - значение поля.
Еще один пример использования подобных конструкций:
{nickname:профиль пользователя %s самый лучший}
Выведет:
профиль пользователя Василий самый лучший
При этом, если поле nickname пустое, то не будет выведено ничего.
Вот такими несложными способами вы можете достаточно гибко формировать все параметры, прямо влияющие на мета составляющую страниц сайта, при чём достаточно один раз настроить и забыть.
Поддерживаются также списки рандомных значений (InstantCMS > 2.10.1), например:
{title}, {comments|html_spellcount:комментарий:комментария:комментариев}, рейтинг {rating|html_spellcount:пункт:пункта:пунктов}{ и это отлично| что не может не радовать|. Отличная новость.}
Может вывести
Бизнес ожидает снижения налогов, 21 комментарий, рейтинг 34 пункта что не может не радовать.
А в следующий раз может вывести
Бизнес ожидает снижения налогов, 21 комментарий, рейтинг 34 пункта. Отличная новость.
Начиная с InstantCMS 2.17.0, в паттернах доступно специальное выражение {page}, которое выведет «страница № 2». Оно добавлено для больше гибкости взамен удалённой опции сайта «Добавлять номера страниц в тег title при пагинации».Используйте так (чтобы на первых страницах не было ничего выведено):
{page:, %s}
Назад в Настройки сайта