Как сделать динамически изменяемые вставки в meta поля — различия между версиями
Mad grant (обсуждение | вклад) |
Mad grant (обсуждение | вклад) |
||
Строка 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" и заполним поля страницы значениями:
А теперь скопируем следующий код в файл /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>