Aufteilen von Inhaltsfeldern in verschiedene Regionen


11

Meine Situation ist wie folgt: Ich habe ein Inhaltstyp-Seminar mit den Feldern A, B und C. Ich habe Regionen Kopfzeile, Fußzeile, Inhalt und Seitenleiste links. Es gibt einige Felder in Seminar, die im Inhaltsbereich angezeigt werden sollen, aber auch im linken Bereich der Seitenleiste.

Wie mache ich das? Entschuldigung, wenn dies bereits zuvor beantwortet wurde. Ich bin Entwickler und zögere nicht, mich mit Hook- und Präprozessorfunktionen zu beschäftigen. Ich habe das Views-Modul installiert, es aber noch nie verwendet (dies ist meine erste Drupal-Site, wenn Sie nicht sagen können: P).

Prost.

EDIT: Dies ist für Drupal 7 .


Welche Version von Drupal?
Keva

Entschuldigung, dies ist für Drupal 7. Ich habe diese Informationen zu meiner ursprünglichen Frage hinzugefügt.
Lester Peabody

Ich werde eine Antwort akzeptieren, sobald ich das Problem behoben habe. Ich überlege gerade, wie ich meine Vorschläge einrichten soll, um Inhalte angemessen anzuzeigen ...
Lester Peabody

Antworten:


11

Es ist nicht einfach, den Inhalt eines Knotens sofort zu verschiedenen Regionen auf der Seite hinzuzufügen. Es gibt mehrere Möglichkeiten, um dieses Problem anzugehen.

Nicht codierende Methode: Ansichten und Blöcke

Erstellen Sie eine Ansicht

  • Typ: Block
  • Kontextfilter: Inhalt: Nid
    • Standardwert: Von aktueller Seite abrufen
  • Felder: Was auch immer Sie wollen
  • Filter:
    • Inhaltstyp: Seminar

(plus die gewünschten zusätzlichen Einstellungen)

Gehen Sie dann zur Seite Administratorblock. Verschieben Sie den neu erstellten Ansichtsblock in die Region, in der er angezeigt werden soll. Es sollte nur auf den Seiten des Seminarknotens angezeigt werden.

Wiederholen Sie dies für alle Regionen

Codierungsmethode mit theme_preprocess_region ():

Code würde ungefähr so ​​aussehen

MYTHEME_preprocess_region(&$variables) {
  if (isset($node) && ($node->type == 'seminar' )) {
     //add new variable here.     
  }
}

Dies ist nur für Drupal 7. Jetzt ist es in Ihrer Region verfügbar.tpl.php.


1
Der Views / Block-Ansatz ist eigentlich der, den ich bevorzuge, aber ich schlug Display Suite vor, da einige ihn zugänglicher finden.
Jhedstrom

Views funktioniert hierfür hervorragend, wie ich herausfinde. Die Aussicht ist im Allgemeinen fantastisch. Ich verwende auch das Menüblock-Modul, um meine Menüs basierend auf meiner Position auf der Site aufzuteilen (lassen Sie mich das Hauptmenü so aufteilen, dass es immer angezeigt wird, und die Untermenüs basierend darauf, unter welches Menü ich im Hauptmenü falle). Total geniales Modul, sehr zu empfehlen.
Lester Peabody

Irgendwie verrückt, dass ich das fast einen Monat lang gefragt habe, die Antwort akzeptiert habe, aber jetzt gerade mit der Anwendung dieser Antwort komme (obwohl ich seitdem eine Tonne Views verwendet habe). Könnten Sie Ihre Verwendung von Ansichten für Drupal 7 ein wenig erläutern? Es scheint, dass Argument: nid in Views 3 für Drupal 7 nicht vorhanden ist. Danke.
Lester Peabody

Ich habe es herausgefunden. Der Begriff Argument wurde unter Erweitert durch Kontextfilter ersetzt.
Lester Peabody

D7, Contextual Fitler: Inhalt: NID. Bearbeiten: sehen Sie, dass Sie es gefunden haben, bevor ich antworten konnte
iStryker


5

Ich hatte das gleiche Problem. Die Lösung ist ganz einfach. Sie können die Tatsache begründen, dass wir in Drupal 7 unseren eigenen view_mode definieren können, nicht nur FULL und TEASER (wie wir aus den ältesten Versionen wissen). Definieren Sie also einen anderen view_mode für die Verwendung in Ihrer Region: z. B. LEFTHAND. Drupal zeigt FULL view_mode im Inhaltsbereich an. Sie müssen Drupal also sagen, dass LEFTHAND in der linken Seitenleiste angezeigt werden soll.

  1. In template_preprocess_page ()

    if ($vars['node']) {
    $vars['page']['sidebar_left'][] = node_view($vars['node'], 'lefthand');
    }

  2. Fügen Sie in node.tpl.php eine neue Anzeige für den Ansichtsmodus für die linke Hand hinzu

    if ($view_mode == 'lefthand') {
    // render content fields here
    }


1
Diese Antwort ist äußerst clever und erfordert keine externen Module, außer um Ansichtsmodi zu definieren. Eine einfache Alternative zur Display Suite sind die Entity View-Modi: drupal.org/project/entity_view_mode
paul-m

Das hat mir sehr gut gefallen. Wickeln Sie es in eine if-Funktion ein, damit es nur auf bestimmten Seiten angezeigt wird. Früher if (array_key_exists('block_14',$vars['page']['main_content'])){}habe ich es nur auf Seiten mit einem bestimmten Block angezeigt.
Dominic Woodman

3

Wenn Display Suite zu viel für Ihre Anforderungen zu sein scheint (es ist ein großartiges Modul, aber es könnte übertrieben sein, wenn Sie nur ein paar Felder verschieben müssen), gibt es ein Modul nur für diesen Zweck -> CCK-Blöcke .

Ich weiß, dass es 'CCK'-Blöcke heißt, aber es funktioniert mit Drupal 7 (was die Funktionalität von CCK auf den Kern gebracht hat).


1

Eine geringfügige Änderung der Antwort von @Patrik Lucan if ($vars['node'])verursachte Probleme auf Seiten, die keine Knoten waren, z. B. benutzerdefinierte Startseite mit Block- oder Ansichtsseite.

Gewechselt zu:

if (array_key_exists('node', $vars))

Welches scheint das Problem gelöst zu haben.


0

Inzwischen gibt es dafür ein Modul. Von der Modulseite:

Feld als Block bietet eine einfache Möglichkeit, ein oder mehrere Felder des aktuellen Knotens in einem Block anzuzeigen.

Dieses Modul soll eine leichte Alternative zu Modulen wie Panels und Display Suite sein oder mithilfe von Ansichten einen Block definieren, der nur ein Feld abruft.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.