it-swarm.com.de

Ändern des Paniermehlinhalts

Ich versuche, diesen Hook zu verwenden, um einen Breadcrumb-Link zu ändern:

hook_menu_breadcrumb_alter(&$active_trail, $item)

Der Haken scheint nicht genannt zu werden.

Ich habe es versucht :

  • Verwenden des Hakens für ein Thema
  • Verwenden des Hooks für ein benutzerdefiniertes Modul (readcrumb_Finder_fix)
  • Löschen aller Caches mit Drush

Ich habe das Devel-Modul installiert und aktiviert, und das Folgende erzeugt keine Ausgabe.

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

Irgendwelche Ideen ? Richtungen ? Bitte beraten.

OBS: Ich habe diese Antwort gelesen: https://drupal.stackexchange.com/a/7659/12647

13

Hier ist ein Ausschnitt, der zeigt, wie Sie Semmelbrösel ändern können.

Beachten Sie Folgendes:

  • Diese Methode ändert Breadcrumbs auf Themenebene. Dies ist der letzte Ort, an dem etwas geändert wird, bevor es zu Vorlagendateien gelangt. Wenn Sie hier also ändern, können andere Module die Breadcrumbs später nicht mehr ändern.
  • Betrachten Sie diesen Weg als letzte Option, um Ihre Semmelbrösel zu ändern.
  • Fügen Sie dieses Snippet zur Datei template.php Ihres Themas hinzu.

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

Wahrscheinlich etwas spät, um zu antworten, aber ich bin heute Morgen auf diesen Thread gestoßen, als ich nach einer Möglichkeit gesucht habe, den Breadcrumb in Drupal 7) zu überschreiben. Es hat ein wenig geholfen, also dachte ich, ich würde meine Lösung hinzufügen.

Dadurch werden zusätzliche Krümel basierend auf den Inhaltstypen erstellt und die aktuelle Seite zum Krümel hinzugefügt. Ich verwende dies, um einer Filteransicht, die vor dem angegebenen Knoten angezeigt wird, einen Krümel hinzuzufügen.

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

}
13
andrew_hoffi

hook_menu_breadcrumb_alter () funktioniert nicht auf Seiten, auf denen drupal_set_breadcrumb () zuvor aufgerufen wurde.

hook_menu_breadcrumb_alter () wird von menu_get_active_breadcrumb () aufgerufen. Dies wird von drupal_get_breadcrumb () aufgerufen, aber nur, wenn zuvor kein Breadcrumb mit drupal_set_breadcrumb () festgelegt wurde. .

Es sieht nicht so aus drupal_set_breadcrumb () wird von der Benutzerseite aufgerufen. Aber vielleicht gibt es ein Contrib-Modul , das das macht. Sie können ein dpm () oder ddebug_backtrace () in drupal_set_breadcrumb () einfügen, um festzustellen, ob dies der Fall ist (das Entwicklungsmodul muss aktiviert sein und Sie haben die Berechtigung, Entwicklungsinformationen anzuzeigen).

Sie können stattdessen hook_preprocess_breadcrumb () verwenden, dies erfordert jedoch das Parsen des Breadcrumb-Links, den Sie ändern möchten. Da in diesem Hook die Breadcrumb-Links bereits als HTML gerendert sind, benötigen Sie reguläre Ausdrücke (preg_match ()) oder ähnliches, um z. die URL.

Eine viel bessere Lösung ist die Verwendung eines der verschiedenen Breadcrumb-Customizing-Module , die für Drupal verfügbar sind.

9
donquixote

dies ist möglicherweise nicht der effizienteste Weg, aber versuchen Sie:

function THEME_breadcrumb($variables)

und dann lesen Sie die Variablen.

... auch mein Gott, ich hasse Semmelbrösel. so viel.

2
jdu

Wenn Sie nur den Breadcrumb auf einer bestimmten Seite ändern müssen, kann Ihnen möglicherweise die folgende Lösung helfen. Das Beispiel aktualisiert den Breadcrumb für ein Bearbeitungsformular.

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

Ein anderer Drupal Weg ist, Benutzer hook_menu_breadcrumb_alter aber stellen Sie sicher, dass Sie es benennen YOUR_MODULE_menu_breadcrumb_alter und leeren Sie den Cache nach dem Hinzufügen der Funktion.

Oder auch theme_breadcrumb ist eine Drupal Möglichkeit, den Breadcrumb zu aktualisieren, aber in diesem Hook sollten Sie nur das Markup des Breadcrumbs ändern, keine Links.

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

so viel Code reicht aus, um die Breadcrumb-URL zu ändern.

0
Nayana

das THEME_NAME_breadcrumb hat bei mir nicht funktioniert. Es ist mir jedoch gelungen, Breadcrumb mit dieser Funktion zu überschreiben:

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

gutschrift geht an: https://stackoverflow.com/questions/10087168/how-to-add-breadcrumb

0
Turtletrail