Как сделать динамически изменяемые вставки в meta поля — различия между версиями
Mad grant (обсуждение | вклад)  | 
				Mad grant (обсуждение | вклад)   | 
				||
| Строка 12: | Строка 12: | ||
Для применения примеров скопируйте код в файл /classes/modules/custom.php.  | Для применения примеров скопируйте код в файл /classes/modules/custom.php.  | ||
| − | ==   | + | == Примеры ==  | 
Сначала создадим тип данных, дочерний "страницы контента" и добавим в него новую группу полей и поля (все идентификаторы необходимо ввести на как на скриншоте):  | Сначала создадим тип данных, дочерний "страницы контента" и добавим в него новую группу полей и поля (все идентификаторы необходимо ввести на как на скриншоте):  | ||
Версия 15:42, 14 февраля 2014
Актуально для версии 2.9.5
Задача
Необходимо сделать, чтобы в title, description и keywords присутствовали некоторое слово, которое можно сразу везде поменять. Например, у Вас мультисайтовость и каждый сайт создан для отдельного города, и Вы хотите, чтобы в этих поля присутствовало его название.
Решение
В первую очередь, Вам нужно будет создать кастом, который будет возвращать значения полей, и создать системную страницу с нужными полями, где будет хранится эта информация. Созданный макрос можно будет вставить прямо в поле title и он отработает нормально, но для полей description и keywords такое решение не подойдет. Нужно будет написать кастомные макросы, которые находить какую-либо метку в этом поле, заменять её на содержимое поля системной страницы, а потом уже выводить.
Для применения примеров скопируйте код в файл /classes/modules/custom.php.
Примеры
Сначала создадим тип данных, дочерний "страницы контента" и добавим в него новую группу полей и поля (все идентификаторы необходимо ввести на как на скриншоте):
Потом создадим страницу этого типа данных с псевдостатическим адресом "meta_settings" и заполним поля страницы значениями:
А теперь скопируем следующий код в файл /classes/modules/custom.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';
			}
		}
Макрос вызывается как %custom getMeta()%, в нем 1 параметр, который принимает название мета тега, вставку для которого необходимо вывести.
Для title его можно применить прямо вот так:


