Điểm:0

Tôi có thể sử dụng móc chủ đề để hiển thị một số trường bổ sung trong khối không?

lá cờ id

Giả sử tôi có hook 'opigno_documents_last_group_block':

<!-- GỠ LỖI CHỦ ĐỀ --> 
<!-- MÓC CHỦ ĐỀ: 'opigno_documents_last_group_block' -->
<!-- BẮT ĐẦU ĐẦU RA từ 'mô-đun/contrib/opigno_learning_path/templates/opigno-documents-latest-group-block.html.twig' -->
<div class="content-box">
...

Làm cách nào tôi có thể nhập nó để chuyển thêm một số biến vào mẫu?

tôi đã thử:

THEME_NAME_opigno_documents_last_group_block
THEME_NAME_opigno_documents_last_group_block_preprocess 
hoặc
THEME_NAME_preprocess_block 

hooks và một số thứ khác, nhưng dường như không có gì kích hoạt khối này, nhưng nó dường như biến mất (cùng với nhiều khối khác) khi tôi bỏ đặt npx_main_content_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"],
      ],
    ] : [];

  }
zanvidmar avatar
lá cờ sa
Ít nhất THEME_NAME_pre process_block sẽ hoạt động - bạn đã xóa bộ đệm và mô-đun/chủ đề đã được bật chưa?
rukya avatar
lá cờ id
@zanvidmar tất nhiên, xóa bộ nhớ cache, chủ đề được kích hoạt & hoạt động
zanvidmar avatar
lá cờ sa
Tuyệt vời và tôi đoán bạn đã thử sử dụng trình gỡ lỗi và bạn đã tạo một điểm dừng bên trong chức năng THEME_NAME_pre process_block và trình gỡ lỗi chưa dừng lại ở đó, phải không?
rukya avatar
lá cờ id
ví dụ: khi tôi sử dụng chức năng này: function npx_main_pre process_block(&$variables) { kint($variables['attributes']['id']); } nó chỉ in ra 4 tên khối và cái này tôi đang tìm thì không có. Nó giống như một phần của khối khác, bởi vì nó biến mất khi tôi bỏ đặt khối nội dung chính-npx-nội dung chính
zanvidmar avatar
lá cờ sa
Bạn có thể biết liệu khối này có thực sự được hiển thị bên trong khối này không? bởi vì nếu chỉ một số dữ liệu được tải, tôi không chắc liệu hook tiền xử lý có được kích hoạt hay không.
rukya avatar
lá cờ id
@zanvidmar cảm ơn vì đã giúp đỡ! nó được kết nối bên cạnh contrib_module/src/Plugin/Block, nếu điều đó hợp lý
zanvidmar avatar
lá cờ sa
Bạn có thể chia sẻ thêm một chút mã đó không, tôi không chắc là tôi có được toàn bộ bức tranh ở đây không, thậm chí bạn có thể tự cập nhật câu hỏi. tnx
rukya avatar
lá cờ id
@zanvidmar Tôi đã cập nhật thông tin được đề cập
Điểm:1
lá cờ ru

Tên chính xác cho chức năng tiền xử lý là THEME_NAME_pre process_opigno_documents_last_group_block().

rukya avatar
lá cờ id
wow, cảm ơn rất nhiều, tôi đã gần hoàn thành, nhưng tôi sắp xếp sai thứ tự các từ :) Tuy nhiên, cuối cùng tôi đã sử dụng hook_theme, bạn có nghĩ rằng giải pháp của mình là lựa chọn tốt hơn không?
lá cờ ru
hook_theme và tiền xử lý là những thứ khác nhau. Nếu bạn chỉ muốn thực hiện một số cập nhật cho các biến hiện có trong mẫu (hoặc thêm một số dữ liệu mới vào mẫu) thì tiền xử lý là lựa chọn tốt hơn. Nhưng nếu đó là khối tùy chỉnh (và được tạo theo chương trình) của bạn - thì bạn có thể kiểm soát đầu ra của mình trong hàm build() và thêm nó vào hook_theme. Vì vậy: hoot_theme phù hợp với các khối tùy chỉnh và các quy trình tiền xử lý phù hợp với những thứ không được tạo theo chương trình.
lá cờ ru
Tại đây, bạn có thể xem thêm thông tin về cách tạo khối tùy chỉnh (và mẫu có tạo biến tùy chỉnh): https://www.drupal.org/docs/creating-custom-modules/creating-custom-blocks/create-a-custom-block
rukya avatar
lá cờ id
cảm ơn rất nhiều vì đã giải thích!
Điểm:0
lá cờ id

Tôi đã hiểu cách giải quyết vấn đề của mình và chuyển các trường bổ sung bằng hook này:

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.