Рейтинг:-1

Как я могу передать больше переменных/триггеров предварительной обработки в блок плагинов?

флаг id

Блок opigno_documents_last_group_block находится в opigno_learning_path/src/Plugin/Block/DocumentsLastGroupBlock.php, который выглядит так:

<?php

пространство имен Drupal\opigno_learning_path\Plugin\Block;

используйте Drupal\Core\Block\BlockBase;
используйте Drupal\Core\Url;

/**
 * Предоставляет блок документов lastgroupblock.
 *
 * @Блокировать(
 * id = "opigno_documents_last_group_block",
 * admin_label = @Translation("DocumentsLastGroupBlock"),
 * категория = @Translation("Пользовательский")
 * )
 */
класс DocumentsLastGroupBlock расширяет BlockBase {

  /**
   * @var \Drupal\Component\Plugin\Context\ContextInterface[]|смешанный
   */
  защищенный $groupId;

  /**
   * {@inheritdoc}
   */
  общедоступная функция сборки () {
    $this->groupId = $gid = $this->configuration["group"];
    $tid = _tft_get_group_tid($gid);
    $content = _tft_folder_content($tid, FALSE, $gid);
    $content = array_slice($content ?: [], 0, 4);
    foreach ($content as $index => $item) {
      $контент[$индекс] = [
        '#theme' => 'opigno_documents_last_group_item',
        '#type' => $item["type"] == 'file' ? 'Папка',
        '#item' => $item,
        '#label' => $item["имя"],
        '#link' => $this->itemLink($item),
      ];
    }
    $сборка['контент'] = [
      '#theme' => 'opigno_documents_last_group_block',
      'контент' => $контент,
    ];
    вернуть $сборку;
  }
(...)

и прикреплен в LearningPathController в этом модуле:

 /**
  * Блок учебных документов.
  */
  общедоступная функция trainingContentDocuments(&$content, $group) {

    // $TFTController = новый 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('Посмотреть все') . '</a></div>',
    ];

    $block_render = $this->attachBlock('opigno_documents_last_group_block', ['group' => $group->id()]);
   $block_render["content"]['link'] = $tft_url;
    $content['tab_content']['documents'] = (isset($block_render["content"]["content"]) && !empty($block_render["content"]["content"])) ? [
      '#type' => 'контейнер',
      '#атрибуты' => [
        'id' => 'документы',
      ],
      'заблокировать' => [
        'контент' => $block_render["контент"],
      ],
    ] : [];

  }

Я попытался расширить его в пользовательском модуле: web/modules/custom/npx_files/src/Plugin/Block/NpxFilesDocumentsLastGroupBlock.php:

<?php

пространство имен Drupal\npx_files\Plugin\Block;

используйте Drupal\opigno_learning_path\Plugin\Block;

Блок opigno_documents_last_group_block находится в opigno_learning_path/src/Plugin/Block/DocumentsLastGroupBlock.php, который выглядит так:

<?php

пространство имен Drupal\opigno_learning_path\Plugin\Block;

используйте Drupal\Core\Block\BlockBase;
используйте Drupal\Core\Url;

/**
 * Предоставляет блок документов lastgroupblock.
 *
 * @Блокировать(
 * id = "opigno_documents_last_group_block",
 * admin_label = @Translation("DocumentsLastGroupBlock"),
 * категория = @Translation("Пользовательский")
 * )
 */
класс DocumentsLastGroupBlock расширяет BlockBase {

  /**
   * @var \Drupal\Component\Plugin\Context\ContextInterface[]|смешанный
   */
  защищенный $groupId;

  /**
   * {@inheritdoc}
   */
  общедоступная функция сборки () {
    $this->groupId = $gid = $this->configuration["group"];
    $tid = _tft_get_group_tid($gid);
    $content = _tft_folder_content($tid, FALSE, $gid);
    $content = array_slice($content ?: [], 0, 4);
    foreach ($content as $index => $item) {
      $контент[$индекс] = [
        '#theme' => 'opigno_documents_last_group_item',
        '#type' => $item["type"] == 'file' ? 'Папка',
        '#item' => $item,
        '#label' => $item["имя"],
        '#link' => $this->itemLink($item),
      ];
    }
    $сборка['контент'] = [
      '#theme' => 'opigno_documents_last_group_block',
      'контент' => $контент,
    ];
    вернуть $сборку;
  }
(...)

и прикреплен в LearningPathController в этом модуле:

 /**
  * Блок учебных документов.
  */
  общедоступная функция trainingContentDocuments(&$content, $group) {

    // $TFTController = новый 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('Посмотреть все') . '</a></div>',
    ];

    $block_render = $this->attachBlock('opigno_documents_last_group_block', ['group' => $group->id()]);
   $block_render["content"]['link'] = $tft_url;
    $content['tab_content']['documents'] = (isset($block_render["content"]["content"]) && !empty($block_render["content"]["content"])) ? [
      '#type' => 'контейнер',
      '#атрибуты' => [
        'id' => 'документы',
      ],
      'заблокировать' => [
        'контент' => $block_render["контент"],
      ],
    ] : [];

  }

Я попытался расширить его в пользовательском модуле: web/modules/custom/npx_files/src/Plugin/Block/NpxFilesDocumentsLastGroupBlock.php, но на самом деле он не срабатывает (я не уверен, что я могу даже расширить это таким образом):

<?php

пространство имен Drupal\npx_files\Plugin\Block;

используйте Drupal\opigno_learning_path\Plugin\Block;
/** 
 * Предоставляет блок документов lastgroupblock. 
 *
 * @Блокировать(
 * id = "opigno_documents_last_group_block",
 * admin_label = @Translation("DocumentsLastGroupBlock"),
 * категория = @Translation("Пользовательский")
 * )
 */


класс NpxFilesDocumentsLastGroupBlock расширяет DocumentsLastGroupBlock {

  общедоступная функция сборки () {
    возвращаться [
      '#markup' => $this->t('Привет, мир!'),
    ];
  }

}

Однако это не вызывает блокировку, как можно расширить это? Кэш очищен и модуль включен, конечно.

класс NpxFilesDocumentsLastGroupBlock расширяет DocumentsLastGroupBlock {

  общедоступная функция сборки () {
    возвращаться [
      '#markup' => $this->t('Привет, мир!'),
    ];
  }

}

Кэш очищен и модуль, конечно же, включен. Я попытался предварительно обработать этот блок плагина с помощью hook_preprocess_block, но он не запускается этим хуком, только его «родительский» блок. Также этот блок не срабатывает hook_block_build_alter (только его родитель). Я могу добраться до этого блока с помощью hook_block_alter, но это не очень помогает, так как я не могу поместить туда какие-то дополнительные переменные, я думаю.

Может ли кто-нибудь указать мне в правильном направлении? Я хотел бы либо добавить дополнительные переменные в этот блок, либо указать, чтобы он отображал какой-то другой блок, либо отключить его/отключить программно перед рендерингом.Я потратил много времени, пытаясь узнать об этом и пробуя разные крючки, но пока безуспешно.

Рейтинг:0
флаг id

Спасибо за игнорирование моего вопроса и отрицательные голоса! ;) Я совершенно не понимаю вас, люди. Однако мне удалось понять, как решить мою проблему и передать переменные:

функция npx_main_theme () {
  возвращаться [
    'opigno_documents_last_group_block' => [
      'переменные' => [
        'param1' => 'текстовый тест'
      ]
    ]
  ];
}

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

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