Puncte:1

Tematica unui tabel EntityListBuilder.php folosind drupal/examples/content_entity_example ca bază

drapel nr

Aveți idee cum aș putea să-mi folosesc propriul fișier modul personalizat twig pentru a-mi tema masa?

Folosesc drupal/examples -> content_entity_example ca punct de plecare:

în content_entity_example.module implementând hook_theme, aș dori să returnez toate câmpurile precum:


/**
 * @fișier
 * Conține Drupal\content_entity_example\content_entity_example.module.
 */

/**
 * @defgroup content_entity_example Exemplu: Entitate de conținut
 * Exemple @ingroup
 * @{
 * Implementați o entitate de conținut.
 *
 * Acest modul demonstrează implementarea unei entități de conținut.
 *
 * Entity API este API-ul care stochează bucăți de conținut și configurație pentru
 * Miez Drupal. De exemplu, dacă ați întâlnit tipuri de conținut de noduri, ați făcut
 * au întâlnit entități de tip „nod”.
 *
 * Acest exemplu implementează API-ul Entity, astfel încât să avem un tip de entitate utilizabil
 * de către utilizator pe care l-ați putea considera noduri specializate, dar care sunt
 * diferit de noduri. Aceste entități se numesc Contact și sunt cunoscute
 * intern prin numele mașinii content_entity_example_contact.
 *
 * Contactul este o entitate de conținut care poate fi folosită pentru a deține informații structurate
 * fără costul general de utilizare a unui tip de conținut de nod. „Fieldable” înseamnă că poți
 * atașați câmpuri la el, așa cum puteți cu nodurile. Este definită programatic
 * (complet în cod). Vom arăta principalele tehnici de manipulat și expus
 * conținutul acestui tip de entitate.
 *
 * Entitatea de contact va demonstra principalele sarcini pentru o entitate:
 * - defini
 * - salva
 * - sarcină
 * - vedere
 * - Editați | ×
 * - șterge
 * - controlează accesul
 *
 * Ori de câte ori este posibil, folosim instrumentele uimitoare încorporate în D8 în mod nativ.
 *
 * @vedeți Drupal\content_entity_example\Entity\Contact
 * @see config_entity_example
 *}
 */

/**
 * Implementează hook_theme(). Înregistrați un modul sau implementările temei unei teme.
 */

funcția content_entity_example_theme() {
  întoarcere [
    'content_entity_example_table' => [
      'variabile' => [
        'header' => NULL,
        'rows' => NULL,
        'footer' => NULL,
        'atribute' => [],
        'caption' => NULL,
        'colgroups' => [],
        „lipicios” => FALSE,
        'responsive' => TRUE,
        'empty' => ''
      ],
    ],
  ];
}

Și în src/Entity/Controller/ContactListBuilder.php aș dori să-mi iau șablonul ('#template'...)

Așa că aș dori să-i spun lui render() utilizatorului șablonul meu

  /**
   * {@inheritdoc}
   *
   * Overscriem ::render() astfel încât să putem adăuga propriul nostru conținut deasupra tabelului.
   * parent::render() este locul unde EntityListBuilder creează tabelul folosind nostru
   * Implementări buildHeader() și buildRow().
   */
  funcția publică render() {
    $build['descriere'] = [
      '#markup' => $this->t('Exemplu de entitate de conținut implementează un model de persoane de contact. Aceste persoane de contact sunt entități care pot fi câmpate. Puteți gestiona câmpurile de pe <a href="@adminlink">pagina de administrare Contacte</a> .', [
        '@adminlink' => $this->urlGenerator->generateFromRoute('content_entity_example.contact_settings'),
      ]),
    ];
    $build['table'] = parent::render();

// TODO adăugați referință la șablon

    returnează $build;
  }

și, ca atare, utilizați fișierul meu șablon în /templates/content-entity-example.html.twig care urmează să fie schimbat într-o fază ulterioară. (trebuie doar să-l încarc)

{#
/**
 * @fișier
 * Suprascrierea temei pentru a afișa un tabel.
 *
 * Variabile disponibile:
 * - atribute: atribute HTML de aplicat etichetei <table>.
 * - legenda: un șir localizat pentru eticheta <caption>.
 * - colgroups: Grupuri de coloane. Fiecare grup conține următoarele proprietăți:
 * - atribute: atribute HTML de aplicat etichetei <col>.
 * Notă: Drupal acceptă în prezent doar un singur rând de antet de tabel, vezi
 * https://www.drupal.org/node/893530 și
 * http://api.drupal.org/api/drupal/includes!theme.inc/function/theme_table/7#comment-5109.
 * - antet: celule antet tabel. Fiecare celulă conține următoarele proprietăți:
 * - tag: Numele etichetei HTML de utilizat; fie „th”, fie „td”.
 * - atribute: atribute HTML de aplicat etichetei.
 * - conținut: un șir localizat pentru titlul coloanei.
 * - câmp: Nume câmp (obligatoriu pentru sortarea coloanelor).
 * - sort: Ordine de sortare implicită pentru această coloană ("asc" sau "desc").
 * - sticky: un steag care indică dacă trebuie utilizat un antet de tabel „lipicios”.
 * - rânduri: rânduri de tabel. Fiecare rând conține următoarele proprietăți:
 * - atribute: atribute HTML de aplicat etichetei <tr>.
 * - date: celule de tabel.
 * - no_striping: Un steag care indică faptul că rândul ar trebui să primească nr
 * stil „par / impar”. Setarea implicită este FALSE.
 * - celule: celule de tabel ale rândului. Fiecare celulă conține următoarele chei:
 * - tag: Numele etichetei HTML de utilizat; fie „th”, fie „td”.
 * - atribute: orice atribute HTML, cum ar fi „colspan”, care se aplică
 * celula tabelului.
 * - conținut: șirul de afișat în celula tabelului.
 * - active_table_sort: Un boolean care indică dacă celula este activă
         sortare de masă.
 * - footer: rânduri de subsol de tabel, în același format ca variabila rânduri.
 * - gol: mesajul de afișat pe un rând suplimentar dacă tabelul nu are
 * orice rând.
 * - no_striping: Un boolean care indică faptul că rândul nu trebuie să primească striping.
 * - header_columns: numărul de coloane din antet.
 *
 * @vedeți template_preprocess_table()
 */
#}
<tabel{{ atribute }}>
  {% if legenda %}
    <caption>{{ caption }}</caption>
  {% endif %}

  {% pentru colgroup în colgroups %}
    {% if colgroup.cols %}
      <colgroup{{ colgroup.attributes }}>
        {% pentru col în colgroup.cols %}
          <col{{ col.atribute }} />
        {% endfor %}
      </colgroup>
    {% altfel %}
      <colgroup{{ colgroup.attributes }} />
    {% endif %}
  {% endfor %}

  {% if header %}
    <cap>
    <tr>
      {% pentru celula din antetul %}
      {%
        setați clase_celule = [
        cell.active_table_sort ? 'este activ',
      ]
      %}
      <{{ cell.tag }}{{ cell.attributes.addClass(cell_classes) }}>
      {{- cell.content -}}
    </{{ cell.tag }}>
    {% endfor %}
    </tr>
    </thead>
  {% endif %}

  {% dacă rândurile %}
    <tbody>
    {% pentru rând în rânduri %}
      {%
        setați row_classes = [
        nu no_striping? cycle(['impar', 'par'], buclă.index0),
      ]
      %}
    <tr{{ row.attributes.addClass(row_classes) }}>
      {% pentru celula din row.cells %}
        <{{ cell.tag }}{{ cell.attributes }}>
        {{- cell.content -}}
        </{{ cell.tag }}>
      {% endfor %}
      </tr>
    {% endfor %}
    </tbody>
  {% elseif gol %}
    <tbody>
    <tr class="odd">
      <td colspan="{{ header_columns }}" class="empty message">{{ empty }}</td>
    </tr>
    </tbody>
  {% endif %}
  {% if footer %}
    <tfoot>
    {% pentru rândul din subsol %}
    <tr{{ row.attributes }}>
      {% pentru celula din row.cells %}
        <{{ cell.tag }}{{ cell.attributes }}>
        {{- cell.content -}}
        </{{ cell.tag }}>
      {% endfor %}
      </tr>
    {% endfor %}
    </tfoot>
  {% endif %}
</tabel>

content_entity_example funcționează grozav, dar nu îmi pot încărca propriul șablon.

apaderno avatar
drapel us
Din cod nu este clar care metodă este apelarea `parent::render()`, deoarece nu știm care este clasa părinte.
Puncte:0
drapel cn

Ar trebui să fie la fel de simplu ca setarea #temă pe masă că parent::render() se intoarce:

$build = parent::render();
$build['table']['#theme'] = 'content_entity_example_table';
user14409370 avatar
drapel nr
mulțumesc, fișierul meu twig este apelat, dar dacă fac {{ kint(header) }} în twig-ul meu personalizat, este gol. Dacă îmi dezactivez funcția theme(), tema implicită drupal este apelată care are un antet. deci presupun că funcția mea personalizată theme() nu este configurată corect. Se pare că nu găsesc documentele pentru setările corecte.
4uk4 avatar
drapel cn
`$build['table']['#theme'] = 'table__content_entity_example';` care este definit în theme() ca `'base hook' => 'tabel'`.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.