О чем речь и скачать результат
Наверное тащить реализацию форматтеров из сторонних модулей сейчас не лучшая идея. Пока делался друпал 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 - "матерным или агрессивным словом", не пропуская статью. На вычисление этого ушло достаточно времени, чтобы не ставить смайл. Но ты можешь поржать.
Вложение | Размер |
---|---|
![]() | 1.48 КБ |