Bestimmte Felder aus Beitragsreferenz im Node ausgeben [gelöst]
am 07.07.2010 - 15:30 Uhr in
Hallo Leute,
ich habe eine Konstellation, wo mehrere Nodes auf den selben Inhalt zugreifen müssen, der sich aber ständig verändert. So möchte ich das natürlich nur zentral ändern und nicht in jeden Node hineingehen müssen.
Über die Beitragsreferenz klappt das mit der Node-Überschrift auch schon, aber ich benötige den Inhaltstext des Referenzbeitrages und nicht den Titel. Ich habe einen View erstellt, der auch das Richtige in der Vorschau schon anzeigt. Ich vermute es ist nur eine Kleinigkeit und ich habe die Referenz nicht richtig mit dem View verbunden oder der View ist falsch eingestellt.
1. Was muss ich wo einstellen, um den Inhaltstext des Referenzbeitrages im eigentlichen Node darzustellen?
2. Kann ich die Verlinkung auf den Referenzbeitrag irgendwo deaktivieren?
3. Aus dem Node wird ein Kalendereintrag erstellt, der sich im Kalender natürlich immer mit ändern soll. Wie wird generell ein Node aktualisiert, wenn eine Verknüpfung zu einem "externen" Node (Referenzartikel) besteht? Wird das bei Aufruf des eigentlichen Nodes aktualisiert oder beim Abspeichern der Änderungen des Referenznodes? wenn ich die "Haupt"-Nodes ändere, sind die Änderungen im Kalender sofort sichtbar, aber wie verhält es sich mit den Referenznodes?
Danke vorab!!!
Grüße! Benki
- Anmelden oder Registrieren um Kommentare zu schreiben
1. Gehe nach
am 07.07.2010 - 16:01 Uhr
1. Gehe nach admin/content/types und klicke beim Inhaltstyp mit dem NodeReference-Feld auf "Felder anzeigen". Dort stellst du dann bei beiden Feldern ("Anrisstext" und "Vollständiger Beitrag") den Wert "Vollständiger Beitrag" ein. Dann wird dir der gesamte referenzierte Node mit ausgegeben.
2. Verstehe ich nicht, was meinst du genau?
3. Verstehe ich auch nicht so richtig. Ein Node wird aktualisiert, wenn man ihn eben bearbeitet. Wenn du den Node mit dem Nodereference-Feld bearbeitest, wird dieser Node aktualisiert und wenn du den referenzierten Node bearbeitest, wird eben dieser Node aktualisiert. Sorry, aber ich weiß nicht so recht, was du meinst.
Fast gelöst :-)
am 07.07.2010 - 16:56 Uhr
1. Das war ja einfach. Das kannte ich noch gar nicht. Funktioniert. Super :-)
2. ich meine den Link auf den Referenzartikel. Es soll nur der reine Beitragstext ausgegeben werden. mehr nicht, kein Titel, kein Link. Gibt es da eine Funktion für, oder muss ich das Feld im Layout ausblenden?
3. also es läuft ein Kalendermodul. Die einzelnen Nodes sind die Termine. Die Nodes bekommen ja jetzt Informationen aus dem Referenzartikel. Wenn ich einen Node (also auch einen Termin) ändere, ist die Änderung direkt im Termin sichtbar. Allerdings mit dem Referenzartikel ändere ich ja jetzt nur indirekt den Inhalt der Termin-Nodes. Wird also beim Abspeichern des Referenz-Nodes die Information in die Hauptnodes geschrieben oder rufen die bei jedem Aufruf den Inhalt der Referenz ab?
Dankeeee
1. Dann ist ja alles klar 2.
am 07.07.2010 - 17:31 Uhr
1. Dann ist ja alles klar
2. Mmmh, den bekommst du wahrscheinlich am ehesten mit Theming weg.
dafür gäbe es zwei Möglichkeiten:
--> Möglichkeit 1:
Du erstellst eine spezielle node.tpl.php für den Inhaltstyp, auf den referenziert wird und gibst dort nur dann den Titel aus, wen $page auf 1 steht, also so hier:
<?php if ($page == 1): ?>
<h2 class="title"><a href="<?php print $node_url; ?>"><?php print $title; ?></a></h2>
<?php endif;
//eigentlich steht oben $page == 0 --> auf $page == 1 ändern?>
Damit wird der Titel nur ausgegeben, wenn der Node als eigene Seite ausgegeben wird.
--> Möglichkeit 2:
Du erstellst eine extra node.tpl.php für den Inhaltstyp, der die NodeReference-Felder enthält.
Dort kannst du direkt auf das Node-Referenz-Feld zugreifen. Darin sind die Node-IDs der referenzierten Nodes gespeichert. Also kann man die ID nehmen, den entsprechenden Node laden und dann gezielt Felder des referenzierten Nodes ausgeben, köönte so aussehen:
<?php
//So sieht es standardmäßig aus:
print $content;
//So kann man es machen
//Inhalt des Nodes ausgeben
print $content;
//Inhalte der referenzierten Nodes ausgeben:
foreach($node->field_nodereference_feld as $key => $value){
//kleinen Abstand zwischen die einzelnen Inhalte bringen
print '<br /><br /><br />';
//Body des referenzierten Nodes ausgeben:
$ref_node = node_load($value['nid']);
print $ref_node->body;
}
?>
Im Foreach-Abschnitt "wandert" Drupal durch das Array "$node->field_nodereference_feld" (welches weitere Arrays enthält) und speichert immer das aktuelle Array in eine Variable.
Dann kann man sich immer aus dieser Variable die Node-ID nehmen, den Node laden und wie ein ganz normales Node-Objekt behandeln und Felder ausgeben.
mit spezieller node.tpl.php meine ich übrigens folgendes:
http://www.drupalcenter.de/handbuch/4287
Zu deinem 3. Punkt:
In dem Node mit den Referenz-Feldern werden nur die Node-IDs der referenzierten Nodes gespeichert, keine Daten aus diesen Nodes. Das heißt, die referenzierten Nodes sind werden bei einer Ausgabe immer frisch aufgerufen und ausgelesen. Wenn du also einen referenzierten Node änderst, sind diese Änderungen auch sofort in den Nodes ersichtlich, die auf diesen Node referenzieren und Felder von ihm ausgeben.
Probiere ich aus. Vielen
am 07.07.2010 - 17:49 Uhr
Probiere ich aus.
Vielen Dank für die schnelle Hilfe!
Jetzt muss ich das Trikot anziehen ;-)))