Техника работы с META-тэгами Description и Keywords в MODx

Понедельник, 19 июля 2010 г.

В этой статье хотелось бы рассказать об одном из вариантов реализации работы с META-тэгами Description и Keywords в MODx.

Если на сайте используются уникальные описания и ключевые слова, которые нельзя генерировать автоматически, то достаточно создать два TV-параметра meta-description и meta-keywords с типом ввода Text. А затем подключить их в шаблоне:

...
<head>
	...
	<meta name="keywords" content="[*meta-keywords*]" />
	<meta name="description" content="[*meta-description*]" />
	...
</head>
...

Если же на сайте есть страницы, для которых эти META-тэги можно генерировать автоматически, то можно использовать следующий способ: так же создаем два TV-параметра meta-description и meta-keywords, но в шаблоне выводим META-тэги с помощью сниппета.

Назовем сниппет html_getMeta. У сниппета будет всего один параметр type, который может принимать значения description или keywords. В зависимости от этого параметра будет возвращаться соответственно либо описание страницы, либо ключевые слова.

Получить значения TV-параметров в сниппете можно следующим образом:

$keywords = $modx->getTemplateVar('meta-keywords', '*', $modx->documentIdentifier);
$keywords = $keywords['value'];

$description = $modx->getTemplateVar('meta-description', '*', $modx->documentIdentifier);
$description = $description['value'];

Логика такая. Если у документа заполнен соответствующий параметр, то выводим его, даже если значения для данного типа документов генерируются автоматически. Если же параметр не заполнен и значения для документа генерируются автоматически, то генерируем их и возвращаем.

В шаблоне вызов сниппета выглядит так:

...
<head>
	...
	<meta name="keywords" content="[[html_getMeta? &type=`keywords`]]" />
	<meta name="description" content="[[html_getMeta? &type=`description`]]" />
	...
</head>
...

Генерировать автоматически значения META-тэгов можно, например, для документов с определенным типом шаблона. Пример подобного сниппета:

<?php
$out = '';


// Возвращаем ключевые слова
if ($type=='keywords') {
	$keywords = $modx->getTemplateVar('meta-keywords', '*', $modx->documentIdentifier);	
	$keywords = $keywords['value'];
	
	// Если ключевые слова не прописаны вручную - можем их сгенерировать
	if ($keywords=='') {
		
		// Для примера генерируем для документов, у которых установлен шаблон с ID = 5
		if ($modx->documentObject['template']==5) {
			$keywords = 'документ ID шаблон '.$modx->documentObject['pagetitle'];
		}
		
		// 
		// Здесь могут идти генерации ключевых слов ещё для каких-либо документов
		//
		
	}
	
	$out.= $keywords;
}


// Возвращаем описание
if ($type=='description') {
	$description = $modx->getTemplateVar('meta-description', '*', $modx->documentIdentifier);
	$description = $description['value'];
	
	// Если описание не прописано вручную - можем их сгенерировать
	if ($description=='') {
		
		// Для примера генерируем для документов, у которых установлен шаблон с ID = 5
		if ($modx->documentObject['template']==5) {
			$description = 'Описание документа с ID равным 5 и заголовком '.$modx->documentObject['pagetitle'];
		}
		
		// 
		// Здесь могут идти генерации описаний ещё для каких-либо документов
		//
		
	}
	
	$out.= $description;
}


echo $out;
?>

В принципе подобную технику работы с META-тэгами можно применить и для произвольных TV-параметров, которые можно генерировать автоматически.

Рубрика: MODx | Тэги: , ,

Комментарии

  • Роман
    21.07.2010, 12:39:59

    Большое спасибо, весма полезно. Хочется чтобы имя ТВ задавать при вызове сниппета. Как это сделать? $modx->getTemplateVar('$tv_parametr', '*', $modx->documentIdentifier); или $modx->getTemplateVar(tv_paramrtr, '*', $modx->documentIdentifier); или ни каким из вышеперечисленных способов?

    И ещё вопрос: А что делает эта строчка "$keywords = $keywords['value'];" ?

  • 21.07.2010, 13:13:55

    Вот так получаем информацию о TV-параметре (возвращается массив):

    $modx->getTemplateVar($tv_paramrtr, '*', $modx->documentIdentifier);

    "$keywords = $keywords['value'];" - так мы получаем конкретное значение параметра.

  • Alex
    24.08.2010, 01:10:09

    Я так понял оно работает на стороне фронт-энд, в принципе нормально.

    НО.

    ОЧЕНЬ хотелось, чтобы манипуляции по генерации keyword и description производились в бэк-энде!

    Есть аналог у других CMS, например DLE. Работает по принципу разовой генерации, при создании документа. То есть при нажатии "сохранить" автоматом происходит "чудо", при условии, что они не были введены вручную.

  • 24.08.2010, 01:16:02

    Alex, этот способ легко можно сделать и по принципу разовой генерации. Только необходимо использовать не сниппет, а плагин, который будет активироваться при сохранении страницы.

Оставить комментарий
Не регистрировать/аноним
Используйте нормальные имена. Ваш комментарий будет опубликован после проверки.
Если вы уже зарегистрированы как комментатор или хотите зарегистрироваться, укажите пароль и свой действующий email.
При регистрации на указанный адрес придет письмо с кодом активации и ссылкой на ваш персональный аккаунт, где вы сможете изменить свои данные, включая адрес сайта, ник, описание, контакты и т.д.
(обязательно)