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.