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

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

Аватар пользователя g78knl6cvxf0 g78knl6cvxf0 18 января 2016 в 15:40

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

Нельзя просто так взять и сделать 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.zip1.48 КБ