Mehr oder weniger geschafft
Hallo mal wieder.
Ich habe es nun geschafft ein Merklistenmodul für den Katalog zu erstellen. Allerdings noch nicht 100% so wie ich es gern hätte. Das Modul besteht aus einer statischen Klasse welche z.B. den "merken" button generiert etc. und einem auf der ModuleCatalogList aufbauenden ModuleWatchlist Klasse. Für jeden Katalog wird je ein Cookie angelegt, in welchem die IDs der gemerkten Katalogeinträge gespeichert werden.
Es gibt die Möglichkeit einen Javascript-basierten "merken" button zu erzeugen oder einen Formular-basierten. Beim Formularbasierten habe ich momentan das Problem, dass ich die vom Formular abgeschickten Daten derzeit direkt im Template, also zur Ausgabe, verarbeite. Würde das aber gern vor der Ausgabe machen. Hab leider dafür noch keinen vernünftigen Hook gefunden.
Vielleicht kann mir hier ja jemand helfen.
Hier noch ein wenig Pseudocode der verdeutlich, wie es in meinem Katalogeintrag-Ausgabe-Template aussieht:
Code:
<?php
/* prüfen, ob ein merken-button geklickt wurde und wenn ja,
dann Eintrag merken. Damit Ansicht aktualisiert wird muss
Seite neu geladen werden.
*/
if(CatalogWatchlist::evalRequest()) $this->reload();
?>
Ausgabe
<?php
/*merken-button erzeugen
CatalogWatchlist->getAddForm($entryID,$cat_tablename,$button_title,$button_class);
*/
echo CatalogWatchlist::getAddForm($entry['id'],$entry['tablename'],'Reise merken','last');
?>
Eigentlich hatte ich ja vor das Modul dann als community-extension einzubringen, aber da ja nun die neue Version des Katalogs vor der Tür steht, macht das vermutlich keinen Sinn mehr, da meine Extension damit sicherlich nicht mehr kompatibel wäre.
Liste der Anhänge anzeigen (Anzahl: 1)
Hier wären wir
Naja hier nun mal mein modul in einer zip.
Es ist noch nicht 100% fertig, aber ich setzte es so erstmal ein.
Die Benutzung ist relativ einfach:
Am Anfang des Ausgabetemplates muss diese Zeile:
Code:
if(CatalogWatchlist::evalRequest()) {
$this->reload();
}
CatalogWatchlist::evalRequest(); prüft ob mittels POST oder GET ein Katalogeintrag auf die Merkliste gesetzt wurde und setzt anschließend das Cookie. Anschließend sollte $this->reload(); aufgerufen werden, damit die eventuelle Darstellung der Merkliste aktualisiert wird.
Der Merklistenlink wird wie folgt erstellt:
Code:
echo CatalogWatchlist::getAddForm($entry['id'],$entry['tablename'],'Eintrag merken','css-klasse');
CatalogWatchlist::getAddForm($id,$tablename,$label ,$class)
$id = ID des Katalogeintrages
$tablename = Name der Tabelle des Katalogs, in welchem sich der Eintrag befindet. Die Merkliste erzeugt für jeden Katalog ein eigenes Cookie.
$label = Beschriftung des merken Links/Buttons
$class = css-Klasse die dem Link/Button vergeben wird. (optional)
Im Backend ist nun ein neues Frontend-Modul "Katalog-Merkliste" enthalten, welches die gemerkten Reisen ausgiebt. Das Modul baut auf der normalen Katalogliste auf und ist in der Bedienung gleich.
Ich bin Verbesserungen gegenüber sehr aufgeschlossen. Insbesondere würde ich gerne vermeiden "evalRequest()" im Template aufrufen zu müssen. Stattdessen wäre es besser wenn diese Funktion noch vor der Template-Ausgabe ausgeführt werden könnte.
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Zitat von
tubu
Hallo,
ich habe diesen älteren Thread gefunden und wollte mich erkundigen, ob an der Erweiterung weiter gemacht wurde (kann es nicht in der Erweiterungsliste finden) oder ob es schon im Katalog aufgenommen ist.
Gruß
Thomas
Ich habe das Modul nie ins Repo aufgenommen, vorallem da von den Catalog-Entwicklern selbst ebenfalls ein ähnliches Modul entwickelt wird. Dieses war für meine Zwecke allerdings nicht brauchbar und deshalb habe ich mein eigenes noch ein wenig weiter entwickelt, wenn auch nicht sehr. Ich habe es mit angehänt. Es muss unter /system/modules/catalog_watchlist/
Die Benutzung ist im Prinzip die gleiche geblieben, also einfach ins Template einbauen und für die Ausgabe die Katalog-Merkliste verwenden.