In Drupal 7, wie bekomme ich eine Liste aller Blöcke auf der Seite verwendet?
Ich Baue ein Modul zur Verwaltung von ad-Einheiten in form von Blöcken, die alle brauchen, zu wissen, jeder andere und weitergeben von Informationen rund um.
Also ich muss ein einfacher Haken oder eine andere Funktion, um eine Liste von jedem block, werden auf der Seite verwendet, so kann ich sicher sein, zu wissen, die gesamte Liste der Anzeigenblöcke auf der Seite.
Habe ich versucht, hook_block_list_alter (), aber dies scheint, um wieder die GESAMTE Liste der Blöcke, die es in meine Drupal Installation ohne Bezeichnung, von denen blockiert werden, die tatsächlich erbracht werden oder nicht auf diese Seite.
So, was mache ich jetzt?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, es hat etwas zu tun mit der Bestellung
hook_block_list_alter()
genannt wird, aber ich bin mir nicht ganz sicher. So oder so, der folgende code wird erhalten Sie eine Liste aller Blöcke in der aktuellen Seite Kontext. Achten Sie darauf, nicht setzen Sie diese in einemhook_block_list_alter()
funktioniert, oder Sie erhalten eine Ausnahme, verursacht durch unendliche Verschachtelung.Wenn Sie müssen nur die Blöcke in einer bestimmten region können Sie Graben die meisten der code oben und gehen Sie einfach mit:
Ich lief in das gleiche problem beim aufrufen
block_list('content')
. Suche den code für diese Funktion habe ich gefunden, ruft es zwei weitere Funktionen,_block_load_blocks()
und_block_render_blocks()
. Das problem scheint auftreten, in_block_render_blocks()
als text angezeigt wird, der nicht zu dem content-Objekt. Dies unterscheidet sich von den anderen block-Objekte, die übergeben durch die Funktion.Um dies zu umgehen, anstatt zu telefonieren
block_list()
rief ich_block_load_blocks()
direkt. Dieser gibt ein array von Blöcken gruppiert nach region, unter Umgehung der_block_render_blocks()
nennen.Jetzt können wir überprüfen für Sie die Blöcke in die content-region, ohne dass der Inhalt text verschwinden. Huzzar!
Ich hatte eine ähnliche Anforderung bei der Implementierung einer adserver (DFP). Meine Lösung war, zu definieren, die ein array als Globale variable, und beinhalten php-code in jede Anzeige Einheit block Hinzugefügt ein neues element in das array.
Dann, wenn alle Blöcke auf der Seite ausgeführt wurden, können Sie einfach Zugriff auf die Globale variable zu sehen, die ad-Blöcke genannt wurden. Da der code zum erstellen der Liste der Blöcke, die genannt wird, ist ein Teil von jedem block, es ist egal, ob die Blöcke dargestellt werden, in einer region, in einem panel oder sonst wo.
In meinem Fall wollte ich mit den Informationen zum hinzufügen von Skripten zur
<head>
Abschnitt, der nur als Verweis auf das add-Einheiten aus dem Blöcke platziert. Meine Lösung war wie folgt:1) Umsetzung hook init erstellen Sie eine Globale variable, die zum speichern von Informationen darüber, welche Blöcke angezeigt werden (Sie müssen erstellen Sie eine benutzerdefinierte Modul enthalten diese code):
2) Aktivieren Sie die core-php-Modul
3) Fügen Sie php-code am Ende jedes ad-block zum hinzufügen einer Zeile in dem array in Schritt 1 erstellt haben
4) Umsetzung THEME_preprocess_html in meinem template.php Datei, um den Zugriff auf die globalen Variablen erstellen Sie das Skript, und fügen Sie das Skript
<head>
Abschnitt mit einem Aufruf drupal_add_html_headKlingt es von deiner Beschreibung her, dass Sie brauchen nicht die Liste der ad-Blöcke zu bauen, die javascript für den head-Bereich, sondern möchten die Informationen verwenden, um ändern Sie den Inhalt der Blöcke selbst.
In diesem Fall insteaad von THEME_preprocess_html, Sie könnten versuchen, hook_page_alter(&Seite)
Die api-Seite, dass die Haken besagt, dass die einzelnen "Blöcke referenziert werden können, indem Sie Ihre Modul - /delta-pair innerhalb einer region:"
Hoffe, das hilft jemand!