Змінення вмісту сухарів


13

Я намагаюся використовувати цей гачок, щоб змінити посилання на сухарі:

hook_menu_breadcrumb_alter(&$active_trail, $item)

Гачок, схоже, не називається.

Я спробував:

  • Використання гачка на тему
  • Використання гачка на спеціальному модулі (breadcrumb_finder_fix)
  • Очищення всіх кешів за допомогою Drush

У мене встановлений і активований модуль Devel, і наступне не дає жодного результату.

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

Будь-які ідеї? Напрямки? Порадьте, будь ласка.

OBS: я прочитав цю відповідь: /drupal//a/7659/12647


У мене така ж проблема. Я створив функцію гака MYMODULE_menu_breadcrumb_alter (), увімкнув модуль, очистив кеш і гачок ніколи не називається на сторінках користувачів. Як не дивно, це, схоже, називається на сторінках адміністратора (я отримую вихід krumo на сторінках адміністратора). Здається, що рівень _breadcrumb () теми є неправильним місцем для цього.
Пітер Мюррей

Відповіді:


4

Ось фрагмент, який показує, як ви можете змінити сухарі.

Майте на увазі наступне:

  • Цей метод змінює сухарі на рівні теми, і це останнє місце для зміни будь-якої речі до того, як вона потрапить до файлів шаблонів, тому зміна тут не дозволить іншому модулю змінити сухарі пізніше.
  • Розгляньте цей спосіб як останній варіант зміни своїх сухарів.
  • Додайте цей фрагмент у файл template.php вашої теми.

    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 Я зробив декілька змін, подивіться на це (не в фрагменті), але в застереженнях
arpitr

13

Можливо, трохи пізно відповісти, але я наткнувся на цю тему сьогодні вранці, шукаючи способу переоцінити сухарі в Drupal 7, це допомогло трохи, тому я подумав, що додам своє рішення.

Це створює додаткові крихти на основі типів вмісту і додає крихті поточну сторінку. Я використовую це для додання крихти до фільтруючого виду, який бачив перед заданим вузлом.

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
Це здається правильним, але це не працює для мене. Як не дивно, це працює на сторінках адміністратора, але це не працює на загальному вмісті користувача. Пропозиції щодо налагодження?
Пітер Мюррей

У мене така ж проблема, як у @PeterMurray. Я ще не вирішив його повністю, але, з того, що я можу зараз сказати, це викликано модулем custom_breadcrumbs, який якимось чином перекриває посилання. Мої 2 копійки, все одно.
Пакс

9

kuk_menu_breadcrumb_alter () не працює на сторінках, на яких раніше дзвонив drupal_set_breadcrumb ().

гачок_мену_бреадкрумба_алтер () викликається з меню_джет_активного_бреадкрумба () . Це викликається з drupal_get_breadcrumb () , але лише якщо попередньо не встановлено панірування з drupal_set_breadcrumb () .

Не схоже, що на сторінці користувача викликається drupal_set_breadcrumb (). Але, можливо, є модуль contrib, який це робить. Ви можете поставити dpm () або ddebug_backtrace () в drupal_set_breadcrumb (), щоб побачити, чи це так (чи потрібно ввімкнути модуль розробки, і у вас є дозвіл на перегляд відомостей про розробку).

Можна замість цього використовувати гачку_preprocess_breadcrumb (), але для цього потрібно проаналізувати посилання на сухарі, яке потрібно змінити. Оскільки в цьому гачку посилання на сухарі вже відображаються як html, то для визначення, наприклад, URL-адреси вам потрібні регулярні вирази (preg_match ()) або подібні.

Набагато кращим рішенням є використання одного з різних модулів, що налаштовують сухарі , які доступні для Drupal.


2

це може бути не найефективнішим способом, але спробуйте:

function THEME_breadcrumb($variables)

а потім прочитайте змінні.

... також мій бог, я ненавиджу панірувальні сухарі. Так багато.


1
Я це бачив. Але це не здається "друпальським шляхом". Це гак теми, і тому його не слід використовувати для зміни даних
Жан-Мішель Гарсія

Я берусь за це, тому що інший шлях не працює. Я підтримую ваше запитання, але не приймаю. Сподіваючись, що хтось знайде «правильний шлях».
Жан-Мішель Гарсія

1

Якщо вам потрібно лише змінити сухарі на певній сторінці, можливо, наступне рішення може вам допомогти. Приклад оновлює сухарі для форми редагування.

$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);

Інший спосіб Drupal - це користувач, hook_menu_breadcrumb_alterале обов'язково вкажіть його ім’я YOUR_MODULE_menu_breadcrumb_alterта очистіть кеш після додавання функції.

Або також theme_breadcrumbє друпальським способом оновити сухарі, але в цьому гачку слід змінити лише розмітку хлібної сухарі, а не посилання.


0

THEME_NAME_breadcrumbне працює для мене. Однак мені вдалося замінити сухарі за допомогою цієї функції:

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);
  }
}

Кредит належить: /programming/10087168/how-to-add-breadcrumb


0

функція 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
        );
    }
}

}

цього великого коду достатньо для зміни URL-адреси сухаря.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.