Puncte:0

Pot folosi cârligul de temă pentru a afișa câteva câmpuri suplimentare în bloc?

drapel id

Să presupunem că am cârligul „opigno_documents_last_group_block”:

<!-- DEBUG TEMA --> 
<!-- THEME HOOK: 'opigno_documents_last_group_block' -->
<!-- ÎNCEPEȚI IEȘIREA din „modules/contrib/opigno_learning_path/templates/opigno-documents-latest-group-block.html.twig” -->
<div class="content-box">
...

Cum îl pot introduce pentru a trece mai multe variabile șablonului?

Am incercat:

THEME_NAME_opigno_documents_last_group_block
THEME_NAME_opigno_documents_last_group_block_preprocess 
sau
THEME_NAME_preprocess_block 

cârlige și altele, dar nimic nu pare să declanșeze acest bloc, dar pare să dispară (cu multe alte blocuri) când dezactivez npx_main_content_block.

Blocul opigno_documents_last_group_block se află în opigno_learning_path/src/Plugin/Block/DocumentsLastGroupBlock.php, care arată astfel:

<?php

spațiu de nume Drupal\opigno_learning_path\Plugin\Block;

utilizați Drupal\Core\Block\BlockBase;
utilizați Drupal\Core\Url;

/**
 * Oferă un bloc documentlastgroupblock.
 *
 * @Bloc(
 * id = "opigno_documents_last_group_block",
 * admin_label = @Translation ("DocumentsLastGroupBlock"),
 * categorie = @Translation(„Personalizat”)
 * )
 */
clasa DocumentsLastGroupBlock extinde BlockBase {

  /**
   * @var \Drupal\Component\Plugin\Context\ContextInterface[]|mixt
   */
  protejat $groupId;

  /**
   * {@inheritdoc}
   */
  public function build() {
    $this->groupId = $gid = $this->configuration["grup"];
    $tid = _tft_get_group_tid($gid);
    $conținut = _tft_folder_content($tid, FALSE, $gid);
    $conținut = array_slice($conținut ?: [], 0, 4);
    foreach ($conținut ca $index => $articol) {
      $conținut[$index] = [
        '#theme' => 'opigno_documents_last_group_item',
        '#type' => $item["type"] == 'fișier' ? 'dosar fișier',
        '#item' => $item,
        '#label' => $item["nume"],
        '#link' => $this->itemLink($item),
      ];
    }
    $build['conținut'] = [
      '#theme' => 'opigno_documents_last_group_block',
      'conținut' => $conținut,
    ];
    returnează $build;
  }
(...)

și este atașat în LearningPathController în acest modul:

 /**
  * Bloc document de instruire.
  */
  instruire pentru funcții publiceContentDocuments(&$conținut, $grup) {

    // $TFTController = nou TFTController();
    // $listGroup = $TFTController->listGroup($group->id()); 
    $tft_url = Url::fromRoute('tft.group', ['group' => $group->id()])->toString();

    $content['tabs'][] = $tft_url = [
     '#markup' => '<div class="see-all see-all-files"><a href="' . $tft_url . '">' . $this->t('Vedeți tot') . „</a></div>”,
    ];

    $block_render = $this->attachBlock('opigno_documents_last_group_block', ['group' => $group->id()]);
   $block_render["conținut"]['link'] = $tft_url;
    $content['tab_content']['documents'] = (isset($block_render["conținut"]["conținut"]) && !empty($block_render["conținut"]["conținut"])) ? [
      '#type' => 'container',
      '#attributes' => [
        'id' => 'documente',
      ],
      'bloc' => [
        „conținut” => $block_render[„conținut”],
      ],
    ] : [];

  }
zanvidmar avatar
drapel sa
Cel puțin THEME_NAME_preprocess_block ar trebui să funcționeze - ați șters memoria cache și modulul/tema este activat?
rukya avatar
drapel id
@zanvidmar, desigur, cache-ul șters, tema activată și funcționează
zanvidmar avatar
drapel sa
Grozav și cred că ați încercat să utilizați un depanator și ați creat un punct de întrerupere în cadrul funcției THEME_NAME_preprocess_block, iar depanatorul nu s-a oprit aici, nu?
rukya avatar
drapel id
de exemplu, când folosesc această funcție: function npx_main_preprocess_block(&$variables) { kint($variabile['atribute']['id']); } afișează doar 4 nume de bloc și acesta pe care îl caut nu este acolo. Este ca o parte a altui bloc, deoarece dispare atunci când desetez blocul block-npx-main-content
zanvidmar avatar
drapel sa
Poate știi dacă acest bloc este de fapt redat în interiorul acestui bloc? pentru că dacă doar unele date sunt încărcate, nu sunt sigur dacă cârligul de preprocesare este chiar declanșat.
rukya avatar
drapel id
@zanvidmar mulțumesc pentru ajutor! este redat nside contrib_module/src/Plugin/Block, dacă are sens
zanvidmar avatar
drapel sa
Puteți partaja puțin mai mult din acel cod, nu sunt sigur că am o imagine completă aici, puteți chiar să actualizați întrebarea în sine. tnx
rukya avatar
drapel id
@zanvidmar Am actualizat informațiile în cauză
Puncte:1
drapel ru

Numele corect pentru funcția de preproces este THEME_NAME_preprocess_opigno_documents_last_group_block().

rukya avatar
drapel id
wow, mulțumesc mult, am fost aproape, dar am nepotrivit ordinea cuvintelor :) Am ajuns să folosesc hook_theme totuși, crezi că soluția ta este o alegere mai bună?
drapel ru
hook_theme și preprocess sunt lucruri diferite. Dacă doriți doar să faceți niște actualizări ale variabilelor existente în șablon (sau să adăugați câteva date noi la șablon), atunci preprocesarea este o alegere mai bună. Dar dacă este blocul dvs. personalizat (și creat programatic) - atunci vă puteți controla rezultatul în funcția build() și îl puteți adăuga în hook_theme. Deci: hoot_theme este bun pentru blocuri personalizate, iar preprocesele sunt grozave pentru lucrurile care nu sunt create programatic.
drapel ru
Aici puteți vedea mai multe informații despre crearea de blocuri personalizate (și șablon cu crearea de variabile personalizate): https://www.drupal.org/docs/creating-custom-modules/creating-custom-blocks/create-a-custom-block
rukya avatar
drapel id
multumesc mult pentru explicatii!
Puncte:0
drapel id

Am reușit să înțeleg cum să-mi rezolv problema și să trec câmpuri suplimentare folosind acest cârlig:

funcția npx_main_theme() {
  întoarcere [
    'opigno_documents_last_group_block' => [
      'variabile' => [
        'param1' => 'test text'
      ]
    ]
  ];
}

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.