1. Главная
  2. Блоги
  3. Блог g78knl6cvxf0

Простой Field Formatter, с кем переспал Title, и супер-файл-модуль

Главные вкладки

О чем речь и скачать результат

Нельзя просто так взять и сделать Field Formatter
Наверное тащить реализацию форматтеров из сторонних модулей сейчас не лучшая идея. Пока делался друпал 8 все столько раз поменялось, что страшное дело. Так например, SimpleFieldFormatter и List Formatter капитулируют уже при заходе в Manage display (как знали, что проверять идут их)
The website encountered an unexpected error. Please try again later.
Модули Advanced Text Formatter и Examples держатся чуть дольше, но тоже все не слава богу. У одного в Plugin описании форматтера какой-то параметр module, у другого стрёмные значения field_types... Так что лучше зайти в core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/ и не дурить головы.

В результате получился такой MultilineFormatter.php, гордо лежащий на глубине 4 папок (/src/Plugin/Field/FieldFormatter/ относительно модуля)

<?php /**
* file
* Contains \Drupal\multiline_formatter\Plugin\Field\FieldFormatter\MultilineFormatter.
*/
namespace Drupal\multiline_formatter\Plugin\Field\FieldFormatter;

use

Drupal\Core\Field\FormatterBase;
use
Drupal\Core\Field\FieldItemListInterface; /**
* Plugin implementation of the 'multiline_formatter' formatter.
*
* FieldFormatter(
* id = "multiline_formatte",
* label = Translation("Multiline formatter"),
* field_types = {
* "string",
* "string_long",
* "text",
* "link",
* }
* )
*/
class MultilineFormatter extends FormatterBase
{
/**
* {inheritdoc}
*/
public function viewElements(FieldItemListInterface $items, $langcode) {
$elements = array();

foreach (

$items as $delta => $item) {
$elements[$delta] = array(
'#type' => 'markup',
'#markup' => MultilineFormatter::do_ubleSpaceToBr($item->value),
);
}

return

$elements;
}

public static function

do_ubleSpaceToBr($value){
return
str_replace(' ', '<br>',$value);
}
}
?>

Сложно удержаться, не упомянув и код самого модуля

<?php /**
* file
* Multiline Formatter
*/
?>

Вот уж действительно программирование через папки и комментарии)

И конечно, как и раньше, можно легким движением руки вызвать разделение программно
\Drupal\multiline_formatter\Plugin\Field\FieldFormatter\MultilineFormatter::do_ubleSpaceToBr($value)

Вот только штука эта не для title. Потому что это поле - отдельный блок, недоступный в Manage display. Есть модуль Title, который какбэ решает эту проблему, но только там, где не выводится блок.

PS. Внимательный читатель мог заметить нижнее подчеркивание в названии функции do_ubleSpaceToBr и задастся вопросом: "что хотел этим сказать автор?". Какой тонкий филологический юмор скрыт за этим названием? А дело в том, что скрипт на форуме считает последовательность o u b - "матерным или агрессивным словом", не пропуская статью. На вычисление этого ушло достаточно времени, чтобы не ставить смайл. Но ты можешь поржать.

ВложениеРазмер
Иконка пакета multiline_formatter.zip 1.48 КБ
Логотип drupal.ru

Содержимое сайта публикуется на условиях CreativeCommons Attribution-ShareAlike 3.0 или более поздней версии. Программные коды в тексте статей — на условиях GNU GPL v2 или более поздней версии.

Документация по совместной работе с репозиторием drupal.ru – https://docs.drupal.ru/code

Drupal – торговая марка Дриса Бёйтарта

12+

AltStyle によって変換されたページ (->オリジナル) /