Điểm:-1

Làm cách nào tôi có thể lập trình thay thế một chuỗi trên trang nhất?

lá cờ la

Tôi tạo một mô-đun tùy chỉnh thay thế một số chuỗi trên trang nhất. Đối với các nút, nó hoạt động chính xác, nhưng nó không hoạt động trên trang đầu tiên. Tôi đã viết mã này.

function my_module_pre process_page(&$variables) {
  if (\Drupal::routeMatch()->getRouteName() == 'view.frontpage.page_1') {
    $generateBlock = NULL;
    $block_manager = \Drupal::service('plugin.manager.block');
    $block_config = [];
    $block_plugin = $block_manager->createInstance('id_block', $block_config);
    $block_build = $block_plugin->build();
    $block_content = kết xuất($block_build);
      
    $block = \Drupal\block_content\Entity\BlockContent::load(4);
    $render = \Drupal::entityTypeManager()->getViewBuilder('block_content')->view($block);
    $body = $render['body'][0]['#text'];
    $newContent = str_replace('---*block*---', $block_content, $body);
    // Tôi không biết cách hiển thị nội dung mới sửa đổi từ $newContent.
    trả lại các biến $;
  }
}

Tôi cần sửa đổi nội dung bằng một chuỗi mới trong $newContent, nhưng tôi không thể lưu nội dung này vào các biến. Nội dung của tôi không được sửa đổi.

Jaypan avatar
lá cờ de
Bạn có thể cho chúng tôi biết trường hợp sử dụng của bạn? Tôi nghi ngờ rằng làm điều này trong preprocess_page là nơi tốt nhất để làm điều đó, nhưng bạn chưa cho chúng tôi biết mục tiêu của bạn là gì.
apaderno avatar
lá cờ us
Chào mừng bạn đến với Câu trả lời của Drupal! Cũng không cần kết xuất một khối trong `hook_pre process_page()`, đây có thể là nơi không phù hợp để thực hiện, vì lõi Drupal đã kết xuất các khối của riêng nó. Nếu bạn cần thay đổi một khối, sẽ có một cái móc cho việc đó.
ridd avatar
lá cờ la
Trường hợp sử dụng của tôi là - người dùng đó tạo khối trong quản trị. Nội dung khối này có chuỗi đặc biệt ---*blok*--- - chuỗi này cho biết vị trí trong khối mà người dùng muốn tạo nội dung từ một khối khác 'id_block' Vì vậy, tôi cần tìm chuỗi này trên trang nhất và thay thế nó bằng khối kết xuất của mình. Nó hoạt động chính xác trong preprocess_node, nhưng không hoạt động trong preprocess_page vì tôi không thể lưu nội dung - điều này không hoạt động $variables['page']['content']['kontakt'] = $mynewcontent
Điểm:0
lá cờ in

Bạn đã cân nhắc sử dụng Mã thông báo tùy chỉnhBộ lọc mã thông báo mô-đun với nhau?

Ngoài ra còn có hướng dẫn ngắn gọn này về cách triển khai mã thông báo tùy chỉnh của riêng bạn: https://codimth.com/blog/web/drupal/how-create-custom-token-drupal-8-9

Và đây là Readme của Token Filter: https://git.drupalcode.org/project/token_filter/-/blob/8.x-1.x/README.txt

ridd avatar
lá cờ la
Cảm ơn. Mã thông báo tùy chỉnh là giải pháp tốt. Tôi đã tạo ra nó, và bây giờ tốt hơn nhiều so với trước đây :)

Đă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.