SEO паттерны
Начиная с версии 2.8.0 InstantCMS поддерживает гибкие шаблоны генерации SEO параметров. Это означает, что CMS, согласно заданных шаблонов, сформирует самостоятельно в автоматическом режиме теги:
- title
- meta description
- meta keywords
- h1
На текущий момент поддерживается генерация шаблонов для:
- страниц профилей пользователей
- страниц групп
- записей типов контента (кроме тега h1)
- разделов типов контента, включая наборы и фильтры
- главных страниц большинства компонентов: в их общих настройках ищите вкладку «SEO для главной страницы»
Для записей типов контента поддерживается также шаблон генерации 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}{ и это отлично| что не может не радовать|. Отличная новость.}
Может вывести
Бизнес ожидает снижения налогов что не может не радовать.
А в следующий раз может вывести
Бизнес ожидает снижения налогов. Отличная новость.
Начиная с InstantCMS 2.17.0, в паттернах доступно специальное выражение {page}, которое выведет «страница № 2». Оно добавлено для больше гибкости взамен удалённой опции сайта «Добавлять номера страниц в тег title при пагинации».Используйте так (чтобы на первых страницах не было ничего выведено):
{page:, %s}
Специальные символы, которые не нужно использовать в текстах выражений:
- | символ черты;
- ? знак вопроса;
- = знак равно;
- : двоеточие.
Это специальные символы логических конструкций. Если вы хотите использовать эти символы в тексте, то их необходимо предварять обратным слэшем. Например \?
или \:
.
В версиях InstantCMS выше 2.17.1, в паттернах доступны простые условия. Например:
{has_desc?Есть описание|Без описания} {delivery_type=2?Доставка Яндексом|Доставка почтой} {is_admin?Администратор}
Таким образом, если в выражении есть символ вопроса, то это условие. Сравнивать можно со значением, указав знак равно, как показано в примере. После символа вопроса первым идёт значение, если условие верное, вторым (через разделитель | ), если неверное. Если второе значение через разделитель не указано, то выражение не будет выведено. В условиях можно использовать выражение %s
, вместо него подставится значение поля.
Вот такими несложными способами вы можете достаточно гибко формировать все параметры, прямо влияющие на мета составляющую страниц сайта, при чём достаточно один раз настроить и забыть.
Назад в Настройки сайта