Wie kann ich Parameter an einen Block übergeben?

8

Ist es möglich, Parameter programmgesteuert an einen Block zu übergeben?

underq
quelle

Antworten:

7

Gemäß der anderen Antwort sind Blöcke "dumm" und können keine Argumente "übergeben" werden. Sie können jedoch Argumente aus dem Kontext der Seite abrufen, z. B. Knoten-IDs, aktueller Benutzer usw.

Sie haben wirklich zwei "einfache" Möglichkeiten:

  • Schreiben Sie Ihren eigenen Block: Es ist ziemlich einfach, wenn Sie ein wenig PHP können. Erstellen Sie ein Modul und implementieren Sie hook_block () . Es gibt viele Beispiele auf Drupal.org .
  • Verwenden Sie das Modul Panels und / oder Views: Mit Panels können Sie Panels erstellen, in denen alle Arten von Variablen und Kontexten übergeben werden können. ABER ohne ein spezielles Thema muss der Block im Inhaltsbereich und nicht in einer Drupal-Region leben. Es hängt also von Ihrer Site ab und davon, wo Sie den Block haben möchten. Ansichten können auch Blöcke erstellen und Argumente von der Seiten-URL, dem aktuellen Benutzer und auch von benutzerdefiniertem Code über das PHP-Modul Ansichten empfangen . Ansichten und Panels arbeiten sehr gut zusammen.
Jim Kirkpatrick
quelle
1
Im Allgemeinen können Sie bei Panels, wenn Ihr Thema dies unterstützt, alle anderen Blöcke deaktivieren und andere Inhalte, die kontextsensitiv sind, als "Pseudoblöcke" anzeigen.
Malks
2

Sie können nichts programmgesteuert an einen Block AFAIK übergeben. Sie können zulassen, dass ein Block konfiguriert werden kann (mithilfe von hook_block_configure in D7). Alternativ können Sie Ihre eigene Themenfunktion erstellen und Argumente an diese übergeben. Was versuchst du zu tun?

Andy
quelle
2

Kontextfilter konfigurieren Wählen Sie "Standardwert bereitstellen" type => "PHP-Code" und verwenden Sie das gewünschte Argument. Beispiel: return arg (1);

hasan
quelle
2

Für den speziellen (aber weit verbreiteten) Fall, in dem Ihr Block eine Anzeige einer Ansicht ist, können Sie views_embed_viewden Block mit Parametern rendern, die er über die Kontextfilter der Ansicht erhält (dh normalerweise über die URL).

Zum Beispiel:

print views_embed_view('news', 'panel_pane_1', 'world');

Alle Parameter nach der Sekunde werden als Kontextfilterwerte an den Block übergeben.

Quelle: Aus dieser Antwort von David Thomas , lizenziert CC-BY-SA 3.0, umgeschrieben

Tanius
quelle