私はパンくずリンクを変更するためにこのフックを使用しようとしています:
hook_menu_breadcrumb_alter(&$active_trail, $item)
フックが呼び出されていないようです。
私はもう試した :
Develモジュールをインストールしてアクティブ化しましたが、以下では何も出力されません。
function breadcrumb_Finder_fix_menu_breadcrumb_alter(&$active_trail, $item) {
drupal_set_message(krumo($active_trail));
}
何か案は ?道順?お知らせ下さい。
OBS:私はこの回答を読みました: https://drupal.stackexchange.com/a/7659/12647
以下は、パンくずリストを変更する方法を示すスニペットです。
次の点に注意してください。
このスニペットをテーマの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);
}
}
おそらく少し遅れて応答しましたが、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;
}
}
}
hook_menu_breadcrumb_alter()は機能しないで、以前にdrupal_set_breadcrumb()が呼び出されたページで機能します。
hook_menu_breadcrumb_alter() は menu_get_active_breadcrumb() から呼び出されます。これは drupal_get_breadcrumb() から呼び出されますが、-[if if]drupal_set_breadcrumb() で事前にブレッドクラムが設定されていません。
それは見えない drupal_set_breadcrumb()がユーザーページから呼び出されます。しかし、多分 contrib module があります。 drupal_set_breadcrumb()にdpm()またはddebug_backtrace()を配置して、これが当てはまるかどうかを確認できます(develモジュールを有効にする必要があり、devel情報を表示する権限がある)。
代わりにhook_preprocess_breadcrumb()を使用できますが、これには、変更するブレッドクラムリンクを解析する必要があります。このフックでは、パンくずリストのリンクがすでにhtmlとしてレンダリングされているため、正規表現(preg_match())などが必要です。 URL。
はるかに優れたソリューションは、Drupalで使用できるさまざまな breadcrumb-customizing modules のいずれかを使用することです。
これは最も効率的な方法ではないかもしれませんが、以下を試してください:
function THEME_breadcrumb($variables)
次に変数を読み取ります。
...私の神もパンくずを嫌いです。そんなに。
特定のページのパンくずリストを変更するだけでよい場合は、次の解決策が役立つでしょう。この例では、編集フォームのブレッドクラムを更新します。
$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
はDrupalブレッドクラムを更新する方法ですが、このフックでは、リンクではなくブレッドクラムのマークアップのみを変更する必要があります。
function MODULE_menu_breadcrumb_alter(&$active_trail, $item) {
// Store the last item
$end = end($active_trail);
foreach ($active_trail as $key => $crumb){
// Check against the node type
if ($crumb['map'][1]->type == 'CONTENT_TYPE' && $crumb['link_path'] == 'node/%') {
// Replace the breadcrumb
$active_trail[$key] = array(
'title' => t("Title"),
'href' => 'PATH',
'link_path' => 'PATH',
'localized_options' => array(),
'type' => 0
);
}
}
}
これだけのコードでパンくずリストのURLを変更できます。
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);
}
}
クレジットは次のようになります: https://stackoverflow.com/questions/10087168/how-to-add-breadcrumb