Рейтинг:1

Тематическое оформление таблицы EntityListBuilder.php с использованием drupal/examples/content_entity_example в качестве основы

флаг nr

Любая идея, как я мог бы использовать свой собственный файл ветки пользовательского модуля для темы моей таблицы?

Я использую drupal/examples -> content_entity_example в качестве отправной точки:

в content_entity_example.module, реализующем hook_theme, я хотел бы вернуть все поля, такие как:


/**
 * @файл
 * Содержит Drupal\content_entity_example\content_entity_example.module.
 */

/**
 * @defgroup content_entity_example Пример: Объект содержимого
 * @ingroup примеры
 * @{
 * Реализовать объект контента.
 *
 * Этот модуль демонстрирует реализацию объекта контента.
 *
 * Entity API — это API, в котором хранятся фрагменты контента и конфигурации для
 * Ядро друпала. Например, если вы столкнулись с типами содержимого узла, вы
 * обнаружены объекты типа «узел».
 *
 * В этом примере реализован Entity API, поэтому у нас есть пригодный для использования тип сущности.
 * пользователем, которые вы могли бы считать специализированными узлами, но которые
 * отличается от узлов. Эти сущности называются Контактами и известны
 * внутренне по имени машины content_entity_example_contact.
 *
 * Контакт — это полевой объект контента, используемый для хранения структурированной информации.
 * без накладных расходов на использование типа содержимого узла. «Полевой» означает, что вы можете
 * прикрепить к нему поля, как вы можете с узлами. Это определяется программно
 * (полностью в коде). Мы покажем основные приемы обработки и разоблачения
 * содержимое этого типа сущности.
 *
 * Сущность Контакт продемонстрирует основные задачи для сущности:
 * - определять
 * - спасти
 * - нагрузка
 * - Посмотреть
 * - редактировать
 * - удалять
 * - контроль доступа
 *
 * Там, где это возможно, мы используем потрясающие инструменты, изначально встроенные в D8.
 *
 * @см. Drupal\content_entity_example\Entity\Contact
 * @см. config_entity_example
 * }
 */

/**
 * Реализует hook_theme(). Зарегистрируйте реализацию темы модуля или темы.
 */

функция content_entity_example_theme() {
  возвращаться [
    'content_entity_example_table' => [
      'переменные' => [
        'заголовок' => NULL,
        'строки' => NULL,
        'нижний колонтитул' => NULL,
        'атрибуты' => [],
        'заголовок' => NULL,
        'колгруппы' => [],
        'липкий' => ЛОЖЬ,
        'отзывчивый' => ИСТИНА,
        'пусто' => ''
      ],
    ],
  ];
}

И в src/Entity/Controller/ContactListBuilder.php я хотел бы забрать свой шаблон ('#template'...)

Итак, я хотел бы сообщить пользователю render() мой шаблон

  /**
   * {@inheritdoc}
   *
   * Мы переопределяем ::render(), чтобы можно было добавить собственное содержимое над таблицей.
   * parent::render() — это место, где EntityListBuilder создает таблицу, используя наш
   * Реализации buildHeader() и buildRow().
   */
  публичная функция рендеринга () {
    $сборка['описание'] = [
      '#markup' => $this->t('Пример объекта контента реализует модель контактов. Эти контакты являются полевыми объектами. Вы можете управлять полями на <a href="@adminlink">странице администрирования контактов</a> .', [
        '@adminlink' => $this->urlGenerator->generateFromRoute('content_entity_example.contact_settings'),
      ]),
    ];
    $build['table'] = parent::render();

// TODO добавить ссылку на шаблон

    вернуть $сборку;
  }

и поэтому используйте мой файл шаблона в /templates/content-entity-example.html.twig который будет изменен на более позднем этапе. (просто нужно его загрузить)

{#
/**
 * @файл
 * Переопределение темы для отображения таблицы.
 *
 * Доступные переменные:
 * - атрибуты: атрибуты HTML для применения к тегу <table>.
 * - заголовок: Локализованная строка для тега <caption>.
 * - colgroups: группы столбцов. Каждая группа содержит следующие свойства:
 * - атрибуты: атрибуты HTML для применения к тегу <col>.
 * Примечание. В настоящее время Drupal поддерживает только одну строку заголовка таблицы, см.
 * https://www.drupal.org/node/893530 и
 * http://api.drupal.org/api/drupal/includes!theme.inc/function/theme_table/7#comment-5109.
 * - заголовок: Ячейки заголовка таблицы. Каждая ячейка содержит следующие свойства:
 * - тег: имя HTML-тега для использования; либо «th», либо «td».
 * - атрибуты: атрибуты HTML для применения к тегу.
 * - содержимое: локализованная строка для заголовка столбца.
 * - поле: Имя поля (обязательно для сортировки столбцов).
 * - sort: порядок сортировки по умолчанию для этого столбца ("по возрастанию" или "по убыванию").
 * - sticky: Флаг, указывающий, следует ли использовать "липкий" заголовок таблицы.
 * - rows: Строки таблицы. Каждая строка содержит следующие свойства:
 * - атрибуты: атрибуты HTML для применения к тегу <tr>.
 * - данные: ячейки таблицы.
 * - no_striping: Флаг, указывающий, что строка не должна получать
 * 'четный/нечетный' стиль. По умолчанию ЛОЖЬ.
 * - ячейки: ячейки таблицы строки. Каждая ячейка содержит следующие ключи:
 * - тег: имя HTML-тега для использования; либо «th», либо «td».
 * - атрибуты: любые атрибуты HTML, такие как "colspan", для применения к
 * ячейка таблицы.
 * - содержимое: строка для отображения в ячейке таблицы.
 * - active_table_sort: логическое значение, указывающее, является ли ячейка активной
         сортировка таблицы.
 * - нижний колонтитул: строки нижнего колонтитула таблицы в том же формате, что и переменная rows.
 * - пусто: сообщение для отображения в дополнительной строке, если в таблице нет
 * любые ряды.
 * - no_striping: логическое значение, указывающее, что строка не должна подвергаться чередованию.
 * - header_columns: количество столбцов в заголовке.
 *
 * @см. template_preprocess_table()
 */
#}
<таблица{{ атрибуты }}>
  {% если заголовок %}
    <caption>{{ заголовок }}</caption>
  {% конец%}

  {% для colgroup в colgroups %}
    {% если colgroup.cols %}
      <colgroup{{ colgroup.attributes }}>
        {% для столбца в colgroup.cols %}
          <col{{ col.attributes }} />
        {% конец для %}
      </colgroup>
    {% еще %}
      <colgroup{{ colgroup.attributes }} />
    {% конец%}
  {% конец для %}

  {% если заголовок %}
    <thead>
    <tr>
      {% для ячейки в заголовке %}
      {%
        установить cell_classes = [
        cell.active_table_sort ? 'активен',
      ]
      %}
      <{{ cell.tag }}{{ cell.attributes.addClass(cell_classes) }}>
      {{- cell.content -}}
    </{{cell.tag }}>
    {% конец для %}
    </tr>
    </thead>
  {% конец%}

  {% если строки %}
    <тело>
    {% для строки в строках %}
      {%
        установить row_classes = [
        не no_striping ? цикл(['нечетный', 'четный'], loop.index0),
      ]
      %}
    <tr{{ row.attributes.addClass(row_classes) }}>
      {% для ячейки в row.cells %}
        <{{cell.tag}}{{cell.attributes}}>
        {{- cell.content -}}
        </{{cell.tag }}>
      {% конец для %}
      </tr>
    {% конец для %}
    </tbody>
  {% иначе, если пусто %}
    <тело>
    <tr class="нечетный">
      <td colspan="{{ header_columns }}" class="пустое сообщение">{{ пустое }}</td>
    </tr>
    </tbody>
  {% конец%}
  {% если нижний колонтитул %}
    <tfoot>
    {% для строки в нижнем колонтитуле %}
    <tr{{ row.attributes }}>
      {% для ячейки в row.cells %}
        <{{cell.tag}}{{cell.attributes}}>
        {{- cell.content -}}
        </{{cell.tag }}>
      {% конец для %}
      </tr>
    {% конец для %}
    </tfoot>
  {% конец%}
</таблица>

content_entity_example отлично работает, но я не могу загрузить свой собственный шаблон.

apaderno avatar
флаг us
Из кода не ясно, какой метод вызывается `parent::render()`, так как мы не знаем, какой из них является родительским классом.
Рейтинг:0
флаг cn

Это должно быть так же просто, как установить #тема на столе что родитель::рендеринг() возвращает:

$build = parent::render();
$build['table']['#theme'] = 'content_entity_example_table';
user14409370 avatar
флаг nr
спасибо, мой файл ветки вызывается, но если я сделаю {{ kint(header) }} в своей пользовательской ветке, он будет пуст. Если я отключу функцию theme(), будет вызвана тема drupal по умолчанию с заголовком. поэтому я полагаю, что моя пользовательская функция theme() настроена неправильно. Я не могу найти документы для правильных настроек.
4uk4 avatar
флаг cn
`$build['table']['#theme'] = 'table__content_entity_example';`, который определен в theme() как `'base hook' => 'table'`.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.