[Gelöst] Node ID aus View zwischenspeichern
am 08.09.2009 - 10:17 Uhr in
Wie kann ich eine Node-ID aus einer View zwischenspeichern, damit ich diese weiter unten auf der Seite, bei einer weiteren View als Argument nutzen kann ?
Zur Erläuterung:
Ich habe eine Menge Artikel, die alle verwschiedenen Kategorien angehören. Nun wird auf meiner Startseite ganz oben der aktuellste Artikel mit Bild groß angezeigt. Dies wird mit dem "Oben in Listen" Strickly-Bit realisiert. (Eine Node mit dem aktuellsten Datum und Strikly-Bit)
Darunter werden weitere Blöcke durch Views ausgegeben. Jeder Block zeigt die 5 neuesten Artikel aus der entsprechenden Kategorie an.
Da ich aber unten in den Views nicht weiss, welcher Artikel als Top-Artikel ausgegeben wird, will ich dies über ein Argument ausschließen. In dem ich die 5 neuesten Artikel der entsprechenden Kategorie ausgebe, die aber nicht die Node-ID des Top-Artikels haben.
Wie kann man das umsetzen. Ach ja, die Views-Blöcke werden alle als Embed-Vies im Startseiten-Template fest verankert.
- Anmelden oder Registrieren um Kommentare zu schreiben
Nur unveröffentliche Nodes anzeigen lassen?
am 08.09.2009 - 14:14 Uhr
Kannst du nicht einfach das Argument so formulieren, dass bei deinen Top-5 nur Nodes mit Status "nicht veröffentlicht" angezeigt werden? Das müsste doch mit Bordmitteln gehen.
Gruß
Frank
Bitte Erledigtes im Betreff des ersten Postings als [gelöst] markieren.
Gruß
Frank
Bitte Erledigtes im Betreff des ersten Postings als [gelöst] markieren. Danke!
ich denke das ist alles eine
am 08.09.2009 - 14:26 Uhr
ich denke das ist alles eine Frage der richtigen Wahl der URL-Aliase. Folgendes Beispiel:
Du hast eine Kategorie names "CategorieX" und eine namens "CategorieY". Nun hast die mehrere Seite für die erste Kategorie mit den URL-Aliase CategorieX/Seite1 und CategorieX/Seite2. Da du die Views ja als Blöcke anzeigen lässt könntest du in den Block-Einstellungen festlegen, das der Block für die 5 neusten Artikel aus CategorieX nur auf den Seiten mit dem URL-Alias CategorieX/* und die aus CategorieY nur auf den Seite mit URL-Alias CategorieY/* angezeigt werden.
Der Block mit den 5 neusten Artikeln für CategorieX würde also nur auf den Seiten CategorieX/Seite1 und CategorieX/Seite2 zu sehen sein. Da müsste eigentlich das erfüllen, was du dir gedacht hast, oder?
Ich hoffe das war einigermaßen verständlich ausgedrückt.
Nein nein, da habt Ihr was
am 08.09.2009 - 17:26 Uhr
Nein nein, da habt Ihr was falsch verstanden. Habe ich vieleicht ein wenig bescheuert formuliert.
Ich habe viele Nodes vom Typ Artikel, welche mit Kategorien (15 an der Zahl) versehen sind.
Auf der Startseite lasse ich für jede Kategorie die neuesten 5 getrennt auflisten.
Ganz oben wird ähnlich wie beim Spiegel aus allen Nodes der absolute Top-Artikel ausgegeben. Der absolute Top-Artikel wird durch das Strickly-Bit mit dem neuesten Erstellungsdatum deklariert. Allerdings sollen ältere Artikel mit Strickly-Bit wieder unten in den Views angezeigt werden.
Technisch sieht das so aus, das für jede Kategorie eine View verantwortlich ist.
Diese wird im Template wie folgt ausgegeben:
<?php
$view = views_get_view('FrontNewsListe');
$out = views_build_view('embed', $view, $argumente, false, 5, 0, 1);
print $out;
?>
Das Ganze steht dort natürlich so oft drin wie es auch Kategorien gibt.
Durch dieses vorgehen, spare ich mir Panels und somit auch ein haufen Rechenleistung. Und ich kann diese einzelnen Views entsprechend gut themen.
Mein Problem ist nun, das ich die ID der
--------
Active-Media-Production
Individual Web Development and Design
--------
Active-Media-Production
Individual Web Development and Design
Ich habe mittlerweile selber
am 18.09.2009 - 10:30 Uhr
Ich habe mittlerweile selber eine Lösung gefunden für dieses Problem gefunden. Aber Danke nochmal an die User, die versucht haben mir dabei zu helfen.
Als erstes habe ich den Views, die für die unteren Blöcke (siehe Bild oben, grüne Blöcke) verantwortlich sind, ein zusätzliches Argument mit folgenden Eistellungen zugefügt:
Argument: Node: ID
Standard: Alle Werte anzeigen
Option: not equal
Platzhalter: *
Danach werden dann in dieser View alle Artikel angezeigt außer die als Argument übergebene Artikel-Node-ID. Oder wenn keine Node-ID übergeben wird, dann werden absolut alle Artikel angezeigt.
So weit so gut. Das Problem besteht nun darin die Node-ID aus dem obersten View, der ja den absoluten Top-Artikel anzeigt, auszulesen und auf die unternen Views als Argument anzuwenden.
Als erstes sollte mal erwähnt werden, dass alle Views in meinem Fall direkt im Template über folgenden Funktion aufgerufen werden:
<?php
$view = views_get_view('VIEWNAME');
$out = views_build_view('embed', $view, $argumente, false, 5, 0, 0);
print $out;
?>
Um nun die Node-ID des obersten Top-Artikel (siehe Bild oben, roter Block) aus zulesen, habe ich erst mal ein separates Template für diese Top-View erstellt. Das kann man recht einfach mit bem Theme-Wizard von Views erledigen. Dadurch kann ich in der Templatdatei auf das Node-Objekt des von der Top-View ausgelesenen Artikels zugreifen und über $node->nid die Node-ID auslesen.
Damit ich diese Node-ID nun auch in anderen Teilen Drupals benutzen kann, habe ich diese Variable in eine Globale Variable übergeben. Damit ist der Wert überall in Drupal verfügbar.
Folgender Code kommt dann in den oberen Bereich der Template-Datei des Top-Views, unter den Kommentar-Zeilen:
<?php
...
* $link -- This will create a link to the node; fill the option field with the text for the link. If you want titles that link to the node, use Node: Title instead.
* $link_label -- The assigned label for $link
*
* This function goes in your views-list-StartContentBlock.tpl.php file
*/
//now we add the stylesheet...
//drupal_add_css(path_to_theme() .'/views-list-StartContentBlock.css');
$GLOBALS['start_top_content_id'] = $node->nid;
...
?>
Jetzt kann ich in diese globale Variable beim Aufrufen der Emmbed-View in den unteren Blöcken (grün) die Node-ID als Argument übergeben.
<?php
$view = views_get_view('VIEWNAME');
$out = views_build_view('embed', $view, array($GLOBALS['start_top_content_id']), false, 5, 0, 0);
print $out;
?>
Somit werden in den unteren Blöcken alle Artikel angezeigt, außer dem Artikel, der schon im oberen Top-Artikel-Block angezeigt wird. Nach diesem Schema kann man auch mit mehreren Top-Artikeln verfahren, nur das dann dann die Node-IDs in einem Array gesammelt werden müssen, bevor sie an übergeben werden.
Ich hoffe man kann mit der erklährung was anfangen.
--------
Active-Media-Production
Individual Web Development and Design
--------
Active-Media-Production
Individual Web Development and Design