DARTHARTH

Замена мета-тайтла таксономии кастомным полем на Drupal 8

Задача — в терминах таксономии заменять мета-тайтл значением кастомного поля таксономии, если оно заполнено. Если поле пустое выводим в тайтл имя таксономии.

Подобные вещи будем делать с помощью токенов. Для добавления кастомных токенов в восьмой версии коллегой был сделан кастомный модуль для создания кастомных токенов. Сначала в кратце пробежимся по модую.

В modules/custom/ создаем папку с названием модуля grabovski_token. Внутри делаем два файла — grabovski_token.info.yml и grabovski_token.tokens.inc.

Содержимое инфо-файла

name: Custom tokens
description: 'Custom Drupal Token Module'
type: module
core: 8.x
version: 1.0
package: Grabovski
dependencies: 

Содержимое второго файла, уже с кодом нашего токена.

<?php

use Drupal\Core\Render\BubbleableMetadata;
use Drupal\taxonomy\Entity\Term;

/**
 * Implements hook_token_info().
 */
function grabovski_token_token_info() {
	$type = [
		'name' => t('Custom Token'),
		'description' => t('Tokens for custom things.'),
	];
	
	$term['custom-meta-title'] = [
        'name' => t('custom-meta-title'),
        'description' => t('custom-meta-title'),
    ];
	// Return them.
	return [
		'types' => ['custom' => $type],
		'tokens' => ['term' => $term],
	];
}

/**
 * Implements hook_tokens(). 
 */
function grabovski_token_tokens($type, $tokens, array $data, array $options, BubbleableMetadata $bubbleable_metadata) {
	$replacements = [];
	
	if ($type == 'term') {
        $current_path = \Drupal::service('path.current')->getPath();
        $path_args = explode('/', $current_path);
		$term = \Drupal::entityTypeManager()->getStorage('taxonomy_term')->load($path_args[3]);
		foreach ($tokens as $name => $original) {
			switch ($name) {
				case 'custom-meta-title':
					if (!empty($term->field_meta_title->value)) {
						$replacements[$original] = $term->field_meta_title->getString();
					} else {
						$replacements[$original] = $term->name->value;
					}
				break;
			}
		}
	}	

	// Return the replacements.
	return $replacements;
}

В списке модулей включаем модуль grabovski_token, после чего в модуле Мета-тег выставляем наш кастомный токен

[term:custom-meta-title]

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

field_meta_title

Из нашей таксономии. В случае, если оно пустое — будет выводиться название нашей таксономии.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Scroll Up