(Gelöst) In Content type ein Reihenfolge-Feld für Prev-Next-Buttons erstellen
am 06.06.2013 - 08:18 Uhr in
Hallo zusammen,
meine Frage bezieht sich nicht wirklich auf Module, ich fand aber auch kein anderes passendes Unterforenthema.
Ich zeige verschiedene Nodes mit Produktinformationen an, die auf einem eigens erstellten Content type basieren.
Auf einer Detailseite, also der Node, sollen Previous- bzw. Next-Buttons zu Nachbarnodes angezeigt werden.
Die Reihenfolge dieser Nodes würde ich gerne selbst steuern, sodass es intern (während des Erstellens einer Node)
die Möglichkeit gibt, der ersten erstellten Node z.B. den Reihenfolgenwert 10, der nächsten 20 zu geben usw. sodass
ich im Nachhinein die Reihenfolge noch verändern kann.
Eigentlich würde ich gerne so etwas nachbauen, was Drupal auch für das Sortieren der Felder auf der Seite
Felder verwalten (admin/structure/types/manage/type/fields) verwendet, allerdings
nicht für Felder, sondern für Nodes.
Eine vorläufige Version der Buttons hatte ich mir schon erarbeitet, allerdings habe ich hierzu die Node-ID herangezogen,
was eine nachträgliche Änderung der Reihenfolge nicht möglich macht:
<?php
$result = db_query("SELECT nid FROM {node} WHERE nid < :nid AND type = :ntype AND status = 1 ORDER BY nid DESC LIMIT 1", array(':nid' => $node->nid, ':ntype' => $type));
foreach ($result as $record) { if(!empty($record->nid)) $prev_id = $record->nid; else $prev_id = false; }
$result = db_query("SELECT nid FROM {node} WHERE nid > :nid AND type = :ntype AND status = 1 ORDER BY nid ASC LIMIT 1", array(':nid' => $node->nid, ':ntype' => $type));
foreach ($result as $record) { if(!empty($record->nid)) $next_id = $record->nid; else $next_id = false; }
?>
<?php if ($prev_id): ?><a class="prev-example" href="<?php print url('node/'.$prev_id); ?>"></a><?php endif; ?>
<?php if ($next_id): ?><a class="next-example" href="<?php print url('node/'.$next_id); ?>"></a><?php endif; ?>
- Anmelden oder Registrieren um Kommentare zu schreiben
Für das manuelle Sortieren
am 07.06.2013 - 00:08 Uhr
Für das manuelle Sortieren von Nodes ist eigentlich das Modul weight gut geeignet. Ich verwende weight manchmal zusammen mit Views. Aber wie sich das dann im Node äussert, damit Du das im SQL als Sortierung verwenden kannst, weiss ich grad nicht. Ich würde mal eine View mit dieser Sortierung bauen und dann den SQL dazu inspizieren.
lg leda
"Du liebst es, Du brauchst es oder Du gibst es weg"
www.leda.ch
Wie leda.ch schon schrieb
am 07.06.2013 - 21:30 Uhr
Wie leda.ch schon schrieb bietet sich hierfür das Modul [do:weight] oder draggableviews an. Hiermit kannst du die Reihenfolge von Nodes einfach über einen View steuern. Die festgelegte Reihenfolge lässt sich dann natürlich auch als Sortierkriterium für die Ausgabe verwenden.
Als Pager bietet sich das Modul [do:custom_pagers] an - dies erlaubt es auch auf Grundlage von Views einen previous/next Pager zu erzeugen. Im Einsatz ist das Ganze bspw. hier: http://www.urlaub-gosch.de/ferienhaus/meerjungfrau (unter der Google Map)
SteffenR
http://www.twitter.com/_steffenr
Drupal-Initiative e.V.
Vielen Dank leda.ch und
am 11.06.2013 - 08:09 Uhr
Vielen Dank leda.ch und SteffenR@drupal.org für die Hinweise, die mir echt weitergeholfen haben und ich
somit das Problem lösen konnte.
Zum Einsatz ist das weight-Modul gekommen, mit dessen Hilfe ich jetzt jeder Node ein bestimmtes Gewicht
geben und dieses z.B. zur Sortierung verwenden konnte.
Darauf aufbauend konnte ich die Zurück- und Vor-Buttons dann selbst implementieren. Wen es interessiert,
hier der Code:
<?php
$result = db_query("SELECT entity_id, weight FROM {weight_weights} WHERE `weight` < :weight_weight ORDER BY weight DESC LIMIT 1", array(':weight_weight' => $node->weight_weight));
foreach ($result as $record) {
if(!empty($record->entity_id)) $prev_id = $record->entity_id;
else $prev_id = false;
}
$result = db_query("SELECT entity_id, weight FROM {weight_weights} WHERE `weight` > :weight_weight ORDER BY weight ASC LIMIT 1", array(':weight_weight' => $node->weight_weight));
foreach ($result as $record) {
if(!empty($record->entity_id)) $next_id = $record->entity_id;
else $next_id = false;
}
?>
<?php if ($prev_id): ?><a class="prev-example" href="<?php print url('node/'.$prev_id); ?>" title="Previous example"></a><?php endif; ?>
<?php if ($next_id): ?><a class="next-example" href="<?php print url('node/'.$next_id); ?>" title="Next example"></a><?php endif; ?>
Vielen Dank nochmal!
Wieso hast du die vor/ zurück
am 14.06.2013 - 07:50 Uhr
Wieso hast du die vor/ zurück Buttons denn selbst implementiert?
Genau dies hättest du ohne eine einzige Zeile Code mit dem [do:custom_pagers] Modul auch erreichen können.
SteffenR
http://www.twitter.com/_steffenr
Drupal-Initiative e.V.