Как сделать динамически изменяемые вставки в meta поля — различия между версиями

Материал из Umicms
Перейти к:навигация, поиск
Строка 14: Строка 14:
 
== Пример макроса, выводящего ту или иную информацию, в зависимости от домена ==
 
== Пример макроса, выводящего ту или иную информацию, в зависимости от домена ==
  
Сначала создадим тип данных, дочерний "страницы контента" и добавим в него новую группу полей и поля:
+
Сначала создадим тип данных, дочерний "страницы контента" и добавим в него новую группу полей и поля (все идентификаторы необходимо ввести на как на скриншоте):
  
 
[[Файл:Meta_settings.png]]
 
[[Файл:Meta_settings.png]]
Строка 24: Строка 24:
 
А теперь скопируем следующий код в файл /classes/modules/custom.php:
 
А теперь скопируем следующий код в файл /classes/modules/custom.php:
  
 +
<source lang="php">
 +
public function getMeta($field){
 +
 +
$hierarchy = umiHierarchy::getInstance();
 +
$page_id = $hierarchy->getIdByPath('/meta_settings/',true);
 +
$page = $hierarchy->getElement($page_id,true, true);
 +
 +
switch ($field) {
 +
case 'title':
 +
return $page->getValue('title_settings');
 +
case 'description':
 +
return $page->getValue('keywords_settings');
 +
case 'keywords':
 +
return $page->getValue('description_settings');
 +
default:
 +
return 'bad field name';
 +
}
 +
}
 +
<source>
  
 
  [[category:Вопросы установки настройки и переноса]]
 
  [[category:Вопросы установки настройки и переноса]]

Версия 15:39, 14 февраля 2014

Актуально для версии 2.9.5

Задача

Необходимо сделать, чтобы в title, description и keywords присутствовали некоторое слово, которое можно сразу везде поменять. Например, у Вас мультисайтовость и каждый сайт создан для отдельного города, и Вы хотите, чтобы в этих поля присутствовало его название.

Решение

В первую очередь, Вам нужно будет создать кастом, который будет возвращать значения полей, и создать системную страницу с нужными полями, где будет хранится эта информация. Созданный макрос можно будет вставить прямо в поле title и он отработает нормально, но для полей description и keywords такое решение не подойдет. Нужно будет написать кастомные макросы, которые находить какую-либо метку в этом поле, заменять её на содержимое поля системной страницы, а потом уже выводить.

Для применения примеров скопируйте код в файл /classes/modules/custom.php.

Пример макроса, выводящего ту или иную информацию, в зависимости от домена

Сначала создадим тип данных, дочерний "страницы контента" и добавим в него новую группу полей и поля (все идентификаторы необходимо ввести на как на скриншоте):

Meta settings.png

Потом создадим страницу этого типа данных с псевдостатическим адресом "meta_settings" и заполним поля страницы значениями:

Meta page.png

А теперь скопируем следующий код в файл /classes/modules/custom.php:

<source lang="php"> public function getMeta($field){

$hierarchy = umiHierarchy::getInstance(); $page_id = $hierarchy->getIdByPath('/meta_settings/',true); $page = $hierarchy->getElement($page_id,true, true);

switch ($field) { case 'title': return $page->getValue('title_settings'); case 'description': return $page->getValue('keywords_settings'); case 'keywords': return $page->getValue('description_settings'); default: return 'bad field name'; } } <source>