SEO Настройки
На любой странице вашего ресурса можно задать seo параметры - функциональные элементы кода страницы, которые несут в себе информацию для браузеров и поисковых систем и помогают оптимизировать поиск нужной информации на сайте.
Формирование SEO страниц
Формирование SEO страниц и их параметров осуществляется при помощи метода seoTemplates()
- выполняет задание настроек для общих шаблонов SEO страниц.
Этот метод должен располагаться в base
классе модуля дополнения и возвращать массив seo настроек шаблонов страниц.
Рассмотрим пример реализации метода для страницы статьи.
/**
* Описание seo шаблонов страниц
* @return array
*/
public function seoTemplates(): array
{
return [
'pages' => [
'article-view' => [
't' => _t('site', 'Страница статьи'), # название шаблона
'i' => true, # имплементирован
'inherit' => true, # наследуем
'macros' => [ # макросы
'textshort' => ['t' => _t('site', 'Краткое описание (до 150 символов)')],
],
],
...
]
];
}
Шаблоны страниц располагаются в массиве по ключу pages
и каждая имеет свой уникальный ключ, например article-view
,
который далее будет использован для формирования SEO таба в админ панели.
Можно выделить
- общий шаблон настроек SEO параметров для всех страниц статей, он располагается в админ панели в пункте меню SEO,
- частный шаблон для каждой статьи в отдельности, располагается как таб в админ панели в форме редактирования вашей страницы.
SEO шаблон в форме
Рассмотрим как создать таб настроек SEO параметров для каждой статьи в отдельности и какие поля в базе для этого необходимы.
В шаблоне формы редактирования статьи необходимо задать такой таб при помощи метода
конструктора форм tabSEO(tab_key)
, используя ранее заданный ключ SEO страницы в методе seoTemplates()
.
$form->tabSEO('article-view');
Для этого таба также необходимы поля в базе данных, в таблице страницы к которой вы задаете SEO параметры
CREATE TABLE `bff_articles` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT, -- ID статьи
`title` varchar(255) NOT NULL DEFAULT '', -- название
`content` longtext NOT NULL DEFAULT '', -- содержание
`enabled` tinyint(1) unsigned NOT NULL DEFAULT '1', -- опубликована
...
`mtemplate` tinyint(1) UNSIGNED NOT NULL DEFAULT '1',
`mtitle` varchar(200) NOT NULL DEFAULT '',
`mkeywords` mediumtext ,
`mdescription` mediumtext ,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
- mtemplate - признак применения общего шаблона к SEO параметрам;
- mtitle - заголовок страницы в теге
<title>Заголовок статьи</title>
; - mkeywords - ключевые слова в теге
meta
со значением атрибутаname
"keywords"<meta name="keywords" content="ключевые слова ...">
; - mdescription - ключевые слова в теге
meta
со значением атрибутаname
"description"<meta name="description" content=" мета описание ...">
.
Данные поля должны попадать в данные формы при ее отображении и валидироваться при ее сохранении. Также они могут быть мультиязычными и располагаться в текущей таблице или отдельной языковой для возможности выполнять перевод.
Общий SEO шаблон
Общий SEO шаблон для всех статей задается путем добавления подпункта меню в модуль SEO в админ панели.
Для этого в файле формирования меню в админ панели вашего дополнения menu.php
добавляем необходимый пункт меню.
<?php
use bff;
bff::adminMenu()
->group('Статьи')
->add(_t('articles', 'Список'), 'articles', 'listing')
# SEO
->group('SEO')
->add(_t('articles', 'Статьи'), 'articles', 'seo_templates_edit')
->access(['articles', 'seo'])
;
Применение SEO настроек для страницы
Перед отрисовкой статьи необходимо установить ее SEO параметры, задать макросы.
Устанавливаем meta-теги для страницы статьи при помощи метода setMeta()
, доступного во frontend
контроллере модуля вашего дополнения.
Рассмотрим пример его применения.
/**
* Страница статьи
* @return string HTML
*/
public function articleView()
{
$articleID = $this->input->getpost('id', TYPE_UINT);
if (empty($articleID)) {
$this->errors->error404();
}
$data = $this->getArticleData($articleID); // данные статьи, должны включать все SEO параметры
# SEO: Страница статьи
$this->setMeta(
'article-view', // ключ страницы, заданный в seo шаблоне
['textshort' => \tpl::truncate(strip_tags($data['descr']), 150, '...')], // данные для макросов
$data // мета-данные страницы, передаются по ссылке @ref
);
return $this->viewPHP($data, 'article');
}
Отметим, что данные макросов задаюся в отдельном массиве, а мета-данные страницы передаются по ссылке,
$data
должен содержать mtemplate
, mtitle
, mkeywords
, mdescription
с учетом текущего языка.