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 .

Lester Peabody
quelle
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.

iStryker
quelle
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
7

Mit dem Display Suite- Modul können Sie dies tun. Sie müssen das Modul "Display Suite-Extras" aktivieren, um Themenbereiche als Ziele für Knotenkomponenten verfügbar zu machen. Informationen dazu finden Sie in den Feldern Hinzufügen zu einer Blockseite der Display Suite-Dokumentation

jhedstrom
quelle
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
    }

Patrik Lucan
quelle
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).

Chance G.
quelle
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.

Dominic Woodman
quelle
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.

Phils
quelle