Điểm:-1

Làm cách nào tôi có thể chuyển nhiều biến hơn/tiền xử lý kích hoạt cho khối plugin?

lá cờ id

Khối opigno_documents_last_group_block nằm trong opigno_learning_path/src/Plugin/Block/DocumentsLastGroupBlock.php, có dạng như sau:

<?php

không gian tên Drupal\opigno_learning_path\Plugin\Block;

sử dụng Drupal\Core\Block\BlockBase;
sử dụng Drupal\Core\Url;

/**
 * Cung cấp một khối documentslastgroupblock.
 *
 * @Chặn(
 * id = "opigno_documents_last_group_block",
 * admin_label = @Translation("DocumentsLastGroupBlock"),
 * danh mục = @Translation("Tùy chỉnh")
 * )
 */
lớp DocumentsLastGroupBlock mở rộng BlockBase {

  /**
   * @var \Drupal\Component\Plugin\Context\ContextInterface[]|hỗn hợp
   */
  $groupId được bảo vệ;

  /**
   * {@inheritdoc}
   */
  xây dựng chức năng công cộng () {
    $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) {
      $content[$index] = [
        '#theme' => 'opigno_documents_last_group_item',
        '#type' => $item["type"] == 'file' ? 'thư mục tập tin',
        '#item' => $item,
        '#label' => $item["name"],
        '#link' => $this->itemLink($item),
      ];
    }
    $build['nội dung'] = [
      '#theme' => 'opigno_documents_last_group_block',
      'nội dung' => $nội dung,
    ];
    trả lại bản dựng $;
  }
(...)

và được đính kèm trong LearningPathController trong mô-đun này:

 /**
  * Khối tài liệu đào tạo.
  */
  đào tạo hàm công khaiContentDocuments(&$content, $group) {

    // $TFTController = new 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('Xem tất cả') . '</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' => 'thùng chứa',
      '#thuộc tính' => [
        'id' => 'tài liệu',
      ],
      'chặn' => [
        'nội dung' => $block_render["nội dung"],
      ],
    ] : [];

  }

Tôi đã cố gắng mở rộng nó trong mô-đun tùy chỉnh: web/modules/custom/npx_files/src/Plugin/Block/NpxFilesDocumentsLastGroupBlock.php:

<?php

không gian tên Drupal\npx_files\Plugin\Block;

sử dụng Drupal\opigno_learning_path\Plugin\Block;

Khối opigno_documents_last_group_block nằm trong opigno_learning_path/src/Plugin/Block/DocumentsLastGroupBlock.php, có dạng như sau:

<?php

không gian tên Drupal\opigno_learning_path\Plugin\Block;

sử dụng Drupal\Core\Block\BlockBase;
sử dụng Drupal\Core\Url;

/**
 * Cung cấp một khối documentslastgroupblock.
 *
 * @Chặn(
 * id = "opigno_documents_last_group_block",
 * admin_label = @Translation("DocumentsLastGroupBlock"),
 * danh mục = @Translation("Tùy chỉnh")
 * )
 */
lớp DocumentsLastGroupBlock mở rộng BlockBase {

  /**
   * @var \Drupal\Component\Plugin\Context\ContextInterface[]|hỗn hợp
   */
  $groupId được bảo vệ;

  /**
   * {@inheritdoc}
   */
  xây dựng chức năng công cộng () {
    $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) {
      $content[$index] = [
        '#theme' => 'opigno_documents_last_group_item',
        '#type' => $item["type"] == 'file' ? 'thư mục tập tin',
        '#item' => $item,
        '#label' => $item["name"],
        '#link' => $this->itemLink($item),
      ];
    }
    $build['nội dung'] = [
      '#theme' => 'opigno_documents_last_group_block',
      'nội dung' => $nội dung,
    ];
    trả lại bản dựng $;
  }
(...)

và được đính kèm trong LearningPathController trong mô-đun này:

 /**
  * Khối tài liệu đào tạo.
  */
  đào tạo hàm công khaiContentDocuments(&$content, $group) {

    // $TFTController = new 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('Xem tất cả') . '</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' => 'thùng chứa',
      '#thuộc tính' => [
        'id' => 'tài liệu',
      ],
      'chặn' => [
        'nội dung' => $block_render["nội dung"],
      ],
    ] : [];

  }

Tôi đã cố gắng mở rộng nó trong mô-đun tùy chỉnh: web/modules/custom/npx_files/src/Plugin/Block/NpxFilesDocumentsLastGroupBlock.php, nhưng nó không thực sự được kích hoạt (tôi không chắc liệu mình có thể mở rộng theo cách này không):

<?php

không gian tên Drupal\npx_files\Plugin\Block;

sử dụng Drupal\opigno_learning_path\Plugin\Block;
/** 
 * Cung cấp một khối documentslastgroupblock. 
 *
 * @Chặn(
 * id = "opigno_documents_last_group_block",
 * admin_label = @Translation("DocumentsLastGroupBlock"),
 * danh mục = @Translation("Tùy chỉnh")
 * )
 */


lớp NpxFilesDocumentsLastGroupBlock mở rộng DocumentsLastGroupBlock {

  xây dựng chức năng công cộng () {
    trở lại [
      '#markup' => $this->t('Xin chào, Thế giới!'),
    ];
  }

}

Tuy nhiên, nó không kích hoạt khối, cách tốt để mở rộng điều này là gì? Tất nhiên là đã xóa bộ nhớ cache & mô-đun đã bật.

lớp NpxFilesDocumentsLastGroupBlock mở rộng DocumentsLastGroupBlock {

  xây dựng chức năng công cộng () {
    trở lại [
      '#markup' => $this->t('Xin chào, Thế giới!'),
    ];
  }

}

Tất nhiên là đã xóa bộ nhớ cache & mô-đun đã bật.' Tôi đã cố gắng xử lý trước khối plugin này bằng hook_pre process_block, nhưng nó không được kích hoạt bởi hook này, chỉ có khối 'cha' của nó mới làm được. Ngoài ra, hook_block_build_alter không được kích hoạt bởi khối này (chỉ khối mẹ của nó). Tôi có thể truy cập khối này bằng hook_block_alter, nhưng nó không thực sự hữu ích, vì tôi không thể đặt thêm một số biến ở đó, tôi nghĩ vậy.

Ai có thể chỉ cho tôi đi đúng hướng? Tôi muốn thêm các biến bổ sung vào khối này hoặc trỏ nó để hiển thị một số khối khác hoặc bỏ đặt/tắt nó theo chương trình trước khi kết xuất.Tôi đã dành nhiều thời gian để cố gắng tìm hiểu về nó và thử các loại móc khác nhau, nhưng cho đến nay vẫn chưa gặp may.

Điểm:0
lá cờ id

Cảm ơn vì đã bỏ qua câu hỏi và lượt tải xuống của tôi! ;) Tôi hoàn toàn không hiểu các bạn. Tuy nhiên, tôi đã hiểu cách giải quyết vấn đề của mình và chuyển các biến:

hàm npx_main_theme() {
  trở lại [
    'opigno_documents_last_group_block' => [
      'biến' => [
        'param1' => 'kiểm tra văn bản'
      ]
    ]
  ];
}

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.