Thay đổi nội dung vụn bánh mì


13

Tôi đang cố gắng sử dụng móc này để thay đổi liên kết bánh mì:

hook_menu_breadcrumb_alter(&$active_trail, $item)

Cái móc dường như không được gọi.

Tôi đã thử:

  • Sử dụng hook trên một chủ đề
  • Sử dụng hook trên mô-đun tùy chỉnh (Breadcrumb_finder_fix)
  • Xóa tất cả bộ nhớ cache bằng Drush

Tôi đã cài đặt và kích hoạt mô-đun Devel và sau đây không tạo ra bất kỳ đầu ra nào.

function breadcrumb_finder_fix_menu_breadcrumb_alter(&$active_trail, $item) {
    drupal_set_message(krumo($active_trail));
}

Có ý kiến ​​gì không? Hướng ? Xin tư vấn.

OBS: Tôi đã đọc câu trả lời này: /drupal//a/7659/12647


Im có cùng một vấn đề. Tôi đã tạo chức năng hook MYMODULE_menu_breadcrumb_alter (), kích hoạt mô-đun, xóa bộ nhớ cache và hook dường như không bao giờ được gọi trên các trang của người dùng. Trớ trêu thay, nó dường như được gọi trên các trang quản trị (tôi nhận được đầu ra krumo trên các trang quản trị). Cấp độ _breadcrumb () của chủ đề dường như là nơi sai để làm điều này.
Peter Murray

Câu trả lời:


4

Dưới đây là đoạn trích để cho thấy cách bạn có thể thay đổi mẩu bánh mì.

Hãy ghi nhớ những điều sau:

  • Phương pháp này thay đổi mẩu bánh mì ở cấp chủ đề, là nơi cuối cùng thay đổi bất kỳ thứ gì trước khi nó chuyển sang tệp mẫu, do đó thay đổi ở đây sẽ không cho phép mô-đun khác thay đổi mẩu bánh mì sau này.
  • Hãy xem xét cách này như là lựa chọn cuối cùng để thay đổi mẩu bánh mì của bạn.
  • Thêm đoạn mã này vào tệp template.php của chủ đề của bạn.

    function THEME_NAME_breadcrumb($variables) {
      $breadcrumb = $variables['breadcrumb'];
    
      // check to ensure this is the one you want to alter
      // Custom rebuild process of breadcrumb with custom links.
      if ($breadcrumb[1] == 'your_breadcrumb_id') {
        // linking to home page
        $links[0] = l(t('Home'), '<front>');
    
        // Keeping the trail/current page as non linked
        $links[1] = ('your desired breadcrumb');
        drupal_set_breadcrumb($links);
      }
    }

@jean Tôi đã thực hiện một vài thay đổi, hãy xem thử (không phải trong đoạn trích), nhưng trong phần từ chối trách nhiệm
arpitr

13

Có lẽ hơi muộn để trả lời, nhưng tôi đã bắt gặp chủ đề này sáng nay trong khi tìm cách ghi đè lên mẩu bánh mì trong Drupal 7, nó đã giúp một chút nên tôi nghĩ tôi sẽ thêm giải pháp của mình.

Điều này tạo ra các mẩu vụn thêm dựa trên các loại nội dung và thêm trang hiện tại vào mẩu. Tôi đang sử dụng điều này để thêm một mẩu vụn vào chế độ xem lọc được nhìn thấy trước nút đã cho.

function MYMODULE_menu_breadcrumb_alter(&$active_trail, $item) {

    //STORE THE LAST ITEM
    $end = end($active_trail);

    foreach ($active_trail as $key => $crumb){

        //CHECK AGAINST NODE TYPE
        if($crumb['map'][1]->type == 'NODE_MACHINE_NAME'){

            //INSERT THE REPLACEMENT CRUMB
            $active_trail[$key] = array( 
                'title' => t("Title"),
                'href' => 'PATH',
                'link_path' => 'PATH', 
                'localized_options' => array(),
                'type' => 0
            );
            //RECREATE ITEM
            $active_trail[] = $crumb;
        }

    }


    //SHOW CURRENT PAGE IN BREADCRUMB BY DUPLICATING THE LAST ARRAY ITEM IN ACTIVE_TRAIL

    if (!drupal_is_front_page()) {
        if ($item['href'] == $end['href']) {
            $active_trail[] = $end;
        }       
    }

}

2
Đây có vẻ là cách đúng đắn, nhưng nó không hiệu quả với tôi. Trớ trêu thay, điều này không hoạt động trên các trang quản trị, nhưng nó không hoạt động trên nội dung chung của người dùng. Gợi ý về cách gỡ lỗi?
Peter Murray

Tôi có cùng một vấn đề như @PeterM bồ. Tôi chưa giải quyết được hoàn toàn nhưng từ những gì tôi có thể nói ngay bây giờ, điều này là do mô-đun custom_breadcrumbs bằng cách nào đó ghi đè lên các liên kết. 2 xu của tôi, dù sao đi nữa.
Pax

9

hook_menu_breadcrumb_alter () không hoạt động trên các trang nơi drupal_set_breadcrumb () đã được gọi trước đó.

hook_menu_breadcrumb_alter () được gọi từ menu_get_active_breadcrumb () . Điều này được gọi từ drupal_get_breadcrumb () , nhưng chỉ khi không có đường dẫn bánh mì nào được thiết lập trước đó với drupal_set_breadcrumb () .

Nó không giống như drupal_set_breadcrumb () được gọi từ trang người dùng. Nhưng có lẽ có một mô-đun đóng góp làm điều đó. Bạn có thể đặt một dpm () hoặc ddebug_backtrace () trong drupal_set_breadcrumb () để xem đây có phải là trường hợp không (cần mô-đun phát âm được bật và bạn có quyền xem thông tin phát hiện).

Thay vào đó, bạn có thể sử dụng hook_pre process_breadcrumb (), nhưng điều này đòi hỏi phải phân tích liên kết Breadcrumb mà bạn muốn thay đổi. Bởi vì trong hook này, các liên kết Breadcrumb đã được hiển thị dưới dạng html, do đó bạn cần các biểu thức chính quy (preg_match ()) hoặc tương tự để xác định ví dụ: url.

Một giải pháp tốt hơn nhiều là sử dụng một trong các mô-đun tùy biến bánh mì khác nhau có sẵn cho Drupal.


2

đây có thể không phải là cách hiệu quả nhất, nhưng hãy thử:

function THEME_breadcrumb($variables)

và sau đó đọc các biến.

... cũng là chúa của tôi, tôi ghét vụn bánh mì. rất nhiều.


1
Tôi đã thấy nó. Nhưng nó không có vẻ là "cách Drupal". Đây là một hook hook theme và do đó không nên được sử dụng để sửa đổi đầu vào
Jean-Michel Garcia

Tôi sẽ làm điều này bởi vì cách khác không hiệu quả. Tôi đang nâng cao câu hỏi của bạn, nhưng không chấp nhận. Hy vọng rằng ai đó tìm thấy "cách đúng".
Jean-Michel Garcia

1

Nếu bạn chỉ cần thay đổi mẩu bánh mì trên một trang cụ thể, có thể giải pháp sau đây có thể giúp bạn. Ví dụ cập nhật mẩu bánh mì cho một hình thức chỉnh sửa.

$breadcrumb = array();
$breadcrumb[] = l(t('Home'), '<front>');
$breadcrumb[] = l(t('Nodes listing'), 'nodes/listing');
# Update breadcrumb on the edit form
if (isset($form['nid']) && (is_numeric($form['nid']['#value']))) {
    $breadcrumb[] = l($form['#node']->title, 'node/' . $node->nid);
}

drupal_set_breadcrumb($breadcrumb);

Một cách khác của Drupal là người dùng hook_menu_breadcrumb_alternhưng hãy đảm bảo đặt tên YOUR_MODULE_menu_breadcrumb_altervà xóa bộ đệm sau khi thêm chức năng.

Hoặc cũng theme_breadcrumblà một cách Drupal để cập nhật mẩu bánh mì nhưng trong hook này, bạn chỉ nên thay đổi đánh dấu của Breadcrumb, không liên kết.


0

những THEME_NAME_breadcrumbkhông làm việc cho tôi. Tuy nhiên, tôi đã quản lý để ghi đè lên mẩu bánh mì với chức năng này:

function MODULE_node_view_alter(&$build) {
  $node = $build['#node'];
  if ($build['#view_mode'] == 'full' && $node->type == 'CONTENT_TYPE') {
    $breadcrumb = array();
    $breadcrumb[] = l('Home', '<front>');
    $breadcrumb[] = l('People', 'group/node/' . arg(2) . '/people');
    $breadcrumb[] = l('Attendance', 'group/node/' . arg(2) . '/people/attendance');
    drupal_set_breadcrumb($breadcrumb);
  }
}

tín dụng vào: /programming/10087168/how-to-add-breadcrumb


0

chức năng MODULE_menu_breadcrumb_alter (& $ active_trail, $ item) {

//STORE THE LAST ITEM
$end = end($active_trail);
foreach ($active_trail as $key => $crumb){
    //CHECK AGAINST NODE TYPE
    if($crumb['map'][1]->type == 'CONTENT_TYPE' && $crumb['link_path'] == 'node/%'){
       //INSERT THE REPLACEMENT CRUMB
        //INSERT THE REPLACEMENT CRUMB
        $active_trail[$key] = array( 
            'title' => t("Title"),
            'href' => 'PATH',
            'link_path' => 'PATH', 
            'localized_options' => array(),
            'type' => 0
        );
    }
}

}

nhiều mã này là đủ để sửa đổi url Breadcrumb.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.