Puncte:0

Cum pot face ca un bloc personalizat să arate conținut diferit pe prima pagină?

drapel za

Am un modul personalizat, în Drupal 9, (care afișează un bloc într-o regiune) care are un formular de administrare cu o casetă de selectare pentru afișare doar pe „prima pagină” sau dacă este debifat pe „toate” paginile.

Pentru ca blocul să apară pe pagina de pornire sau pe toate paginile, am nevoie de un fel de funcție de preprocesare care să ruleze înainte ca blocul să se încarce? Build() are loc o singură dată și apoi este stocat în cache? Dacă da, cum anunțăm blocul să știe ce pagină îi aparține în mod programatic?

Am o funcție simplă de compilare pentru a testa aceasta (build() este în interiorul src/plugin/block), care nu funcționează:

 funcția publică build(){
        $alert_front = \Drupal::config('alert_front.settings')->get('front');
        $current_is_front = \Drupal::service('path.matcher')->isFrontPage();
    
      dacă ($current_is_front) {
        întoarcere [
          '#markup' => $this->t(„Da, numai prima pagină”),
        ];
      }altfel{
       întoarcere [
        '#markup' => $this->t('@alert și @fp',[
          '@alert' => alertType($alert_type),
          '@fp' => $alert_front,
        ]),
       ];
     }
}

API-ul blocului Drupal nu îmi oferă prea multe aici, dar voi continua să sap. Multumesc pentru orice idee.

sonfd avatar
drapel in
Consultați [cacheability of render arrays](https://www.drupal.org/docs/8/api/render-api/cacheability-of-render-arrays) pe drupal.org.
Puncte:1
drapel vg

De obicei, restricționați un bloc la un tip de conținut, pagini sau roluri (sau un amestec al acestora) atunci când plasați blocul în dialogul de editare a blocului - consultați https://www.drupal.org/docs/core-modules-and-themes/core-modules/block-module/managing-blocks

Totuși, acest lucru nu va gestiona stocarea în cache pentru conținutul blocului dinamic.

Dacă doriți să faceți acest „comutator” în metoda dvs. de construire, trebuie neapărat să vă gândiți la memorarea în cache, vedeți fe. acest răspuns de la @Berdir https://drupal.stackexchange.com/a/199601/3218

Ai putea folosi url.path.is_front context – vezi https://www.drupal.org/docs/drupal-apis/cache-api/cache-contexts pentru mai multe informatii

Poate că împărțirea blocului în două blocuri diferite va face mai ușor și mai clar.

drapel za
Mulțumesc @remy, am ajuns să folosesc memorarea în cache pe baza acelei alte postări. Acesta a fost biletul.

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.