Вы здесь

Как в форматтере со списком файлов вывести их описание?

0

У ноды есть поле body и поле типа file. Допустимое количество значений поля file = неограниченное, формат отображения ="Таблица файлов". При просмотре прекрасная таблица с прикреплёнными файлами. Но там только два столбца: "Вложение","Размер".

Вопрос: как добавить колонку с описанием файла?

Или может есть готовые модули для отображения в теле ноды прикреплённых файлов с описанием и другими характеристиками.

Версия Drupal: 
8.x
Вопрос задан 20.01.2018 - 00:04

Пишите в заголовке суть вопроса. Впредь вопросы без нормальных заголовков будут удаляться.

Комментарий оставлен 20.01.2018 - 01:45

Ответы

0

У меня ответ в общих словах, не конкретное решение.

Врубаете Twig в режим разработки и отключаете его кэш: https://www.drupal.org/node/2598914

После этого в коде сайта можно смотреть какой шаблон отвечает за отображение файлов. Копируете этот шаблон к себе в тему и переопределяете его как нужно.

Ответ дан 20.01.2018 - 19:10
Аватар пользователя shu
shu
159
0

добавил переделанный файл /core/modules/file/src/Plugin/Field/FieldFormatter/MyTableFormatter.php

namespace Drupal\file\Plugin\Field\FieldFormatter;

use Drupal\Core\Field\FieldItemListInterface;
USE Drupal\core\modules\file\src\Plugin\Field\FieldFormatter\TableFormatte;

/**
 * Plugin implementation of the 'file_table' formatter.
 *
 * @FieldFormatter(
 *   id = "My_TableFormatter",
 *   label = @Translation("Table of files and description"),
 *   field_types = {
 *     "file"
 *   }
 * )
 */
class MyTableFormatter extends FileFormatterBase {

  /**
   * {@inheritdoc}
   */
  public function viewElements(FieldItemListInterface $items, $langcode) {
    $elements = [];

    if ($files = $this->getEntitiesToView($items, $langcode)) {
      $header = [t('Прикреплённый файл'), t('Size')];
      $rows = [];
      foreach ($files as $delta => $file) {
        $item = $file->_referringItem;  
        $rows[] = [
          [
            'data' => [
              '#theme' => 'file_link',
              '#file' => $file,
              '#description' => $item->description,
              '#cache' => [
                'tags' => $file->getCacheTags(),
              ],
            ],
          ],
          ['data' => format_size($file->getSize())],
        ];
      }

      $elements[0] = [];
      if (!empty($rows)) {
        $elements[0] = [
          '#theme' => 'table__file_formatter_table',
          '#header' => $header,
          '#rows' => $rows,
        ];
      }
    }

    return $elements;
  }

}

Всё как надо работает. Но хотелось бы перенести этот файл в свои модули, чтобы при обновлении не потерялся. Можно, конечно, его копировать в это место после обновления ядра, но это не красиво.
Вопрос: Как правильно его перенести в папку с кастомными модулями , т.е. /modules ??

Ответ дан 30.01.2018 - 16:24