Ich verwende Drupal 7. Im Moment habe ich eine Hauptmenü-Navigation und einen Sprachumschalter, die in meinem Website-Header vorhanden sind. Ich habe sie dort platziert, indem ich zu CMS> Structure> Blocks gegangen bin und die Blöcke in den Header-Bereich gezogen habe.
Wie positioniere ich diesen Block programmatisch im Header?
block_example_block_info()
der Wert "Region" nützlich sein könnte, um ihn zu testen.Antworten:
Um die Region zu ändern, in der von anderen Modulen definierte Blöcke platziert werden, können Sie hook_block_info_alter () implementieren , das die folgenden Argumente empfängt:
$blocks
(als Referenz übergeben): Das Array mit den Blockdefinitionen, die nach Modul und Delta verschlüsselt sind$theme
: Das Thema, für das die Blöcke definiert werden$code_blocks
: Die aus denhook_block_info()
Implementierungen definierten Blöcke , bevor ihre Werte von den aus der Datenbank erhaltenen Werten überschrieben werdenquelle
Es ist zulässig, in hook_page_build () jedem Seitenbereich ein renderbare Array hinzuzufügen. Drupal 7-Beispiel zum Hinzufügen eines Minipanels zur Fußzeilenregion.
Dies ist die gleiche Technik, die Kontextmodul verwendet.
Hinweis: Sie müssen block.module enable nicht aktivieren, damit dies funktioniert.
quelle
In D6 wäre es im Wesentlichen
In D7 denke ich schon
aber ich bin immer noch auf D7 auf dem Laufenden.
quelle
drupal_add_region_content()
ist eine Sackgasse, da es für die Installation / Aktualisierung von Seiten gedacht ist.Wenn Sie einen benutzerdefinierten Block hinzufügen, verwenden Sie dazu hook_block_info und setzen die Statusoption auf 1 und die Regionsoption auf die Region, in die der Block eingefügt werden soll.
Beispiel:
Wenn Sie einen bereits vorhandenen Block ändern möchten, verwenden Sie stattdessen hook_block_info_alter (). Das Aktualisieren derselben Optionen wird unten gezeigt.
Beispiel:
Weitere Informationen finden Sie unter https://api.drupal.org/api/drupal/modules%21block%21block.api.php/function/hook_block_info/7
quelle
Dieser Code basiert auf @ jonhattans, rendert jedoch nicht den Blockcontainer-HTML-Code oder Kontextlinks. Ich stellte auch eine einfache Möglichkeit zur Verfügung, alle Blöcke und Regionen an einem Ort anzugeben.
Hinweis: Im Gegensatz zu seinem Code muss das block.module installiert sein.
quelle
Dies ist nicht die beste Form, aber Sie können Inhalte wie folgt manuell in das Seitenarray einfügen ...
Sie sollten sich jedoch an die Verwendung von Context oder nur an Kernblöcken halten. Das Erstellen neuer Plugins ist nicht so schlimm, wie es scheint. Benennen Sie die Dateien einfach richtig, richten Sie einen Auslöser und einen Test ein. Beispiel .
quelle
Sie können auch Blöcke in Ihrem Thema anpassen wie:
quelle