Revamp Webshop: Automatische Kurzbeschreibung: Unterschied zwischen den Versionen
(→Wow) |
|||
Zeile 98: | Zeile 98: | ||
=== Wow === | === Wow === | ||
+ | <pre>[custom_params] => n="Gr\u00f6sse in Gigabyte"|s="1"|ft="int"| | ||
+ | t="slider_double_int"|m="OR"|af="0"|av=""|ld=""|z="hidden"| | ||
+ | </pre> | ||
<source lang="php"> foreach($types as $type){ | <source lang="php"> foreach($types as $type){ | ||
$tmp_params = $type->custom_params; | $tmp_params = $type->custom_params; |
Version vom 10. Februar 2016, 11:45 Uhr
Die Kurzbeschreibung soll automatisch aus custom-fields erstellt werden.
Lösungsmöglichkeiten
V1.
Bei der Ausgabe generieren.
(+) Ausgabe wird dynamische/automatische generiert (aktuelle Daten)
(---) Serverzeit zum erstellen, viele DB Abfragen etc.
(---) Code muss an verschiedenen Orten angepasst werden
V2.
Bei der Eingabe generieren und in der Datenbank als Kurzbeschreibung speichern.
(+) Keine Anpassung der Ausgabe nötig, diese ist automatisch überall richtig (Produktliste, einzelne Produkte etc.)
(-) Was geschieht mit bereits erfassten Artikeln ? --> diese werden im Laufe der Zeit angepasst, wir müssen eh alle Artikel nochmals überprüfen
V2 ist besser.
Umsetzung
Innerhalb der Testumgebung: rochen:/var/www/revamp/jodir_ut/..
Das Backend verwendet die sogenannte "isis" template.
Für die Produkt-Editier Ansicht wurde bereits ein "template override" erstellt.
Wo ist dieses ?
caydin@rochen:/var/www/revamp/jodir_ut$ grep -r "neue Artikelnummer" * administrator/templates/isis/html/com_virtuemart/product/product_edit_information.php: [ \ ] echo ' neue Artikelnummer: ';include '/var/www/revamp/shop2csv/next_sku.php';?> [ ... ]
BTW/Bemerkung: Wo werden doch gleich im Joomla Adm. die Overrides erstellt ? Auf Anhieb nicht gefunden...
- --> Erweiterungen --> Template --> in der Spalte Template auf den Namen klicken
Die Kurzbeschreibung View findet sich somit unter:
/var/www/revamp/jodir_ut/administrator/templates/isis/html/com_virtuemart/product
in der Datei: product_edit_description.php
Dort wird sie ausgelesen mittels:
<textarea class="inputbox" name="product_s_desc"
id="product_s_desc" cols="65" rows="3" >
<?php echo $this->product->product_s_desc; ?>
</textarea>
Das Formular ist:
<form method="post" name="adminForm" action="index.php" enctype="multipart/form-data" id="adminForm">
Problem
Die Eingabe der Kurzbeschreibung und die Eingabe der Custom Fields erfolgt über dasselbe Formular. Daher ist es in der View nicht einfach so möglich die Kurzbeschreibung aus den Custom Fields zu erstellen.
Dies müsste somit nach dem Submit gemacht werden. Das Formular wird an index.php geschickt und was dann geschieht ist schwer nachvollziehbar... Irgendwann endet es wohl im Product Controller. Eine Anpassung von Controllers ist aber durch Overrrides nicht vorgesehen.
Es lassen sich dazu zwar einige Seiten finden, diese scheinen aber nicht wirklich aktuell:
- Google Suche "joomla override controller"
- https://docs.joomla.org/How_to_override_the_component_mvc_from_the_Joomla!_core Das erwähnte MVC override Plugin ist nicht mehr vorhanden...
- http://www.digitaldisseny.com/en/blog/94-joomla-override-model-view-controller-part-one Verweist ebenfalls auf das nicht mehr vorhandene Plugin
http://stackoverflow.com/questions/28536095/joomla-how-to-override-component-controller Scheint zwei Lösungen anzubieten Es ist mir nicht klar wie diese im Detail funktionieren
"2. Add a special task to your view, and intercept it with a system plugin in OnAfterRoute(). You won't be touching the original controller, but your plugin will fire before the original controller, so it can take action, manipulate input and output, and eventually avoid invoking the original controller altogether."
--> https://docs.joomla.org/Plugin/Events/System#onAfterRoute
Wie wird ein "special task" zur view hinzugefügt ? onAfterRoute aktzeptiert keine Argumente und liefert keine zurück, wie werden damit Daten manipuliert ?
scheint ziemlich kompliziert / umständlich
rochen:/var/www/revamp/jodir_ut$ wc -l $(find .) [ ... ] 3074615 insgesamt
OMG
Lösung:
Die Kurzbeschreibung wird beim laden der Editier-Ansicht aus den custom-fields zusammengesetzt (und ins Formular eingetragen).
Bei einer Änderung der custom-fields muss zwei mal gespeichert werden, damit die Kurzbeschreibung wieder aktuell ist.
Wow
[custom_params] => n="Gr\u00f6sse in Gigabyte"|s="1"|ft="int"| t="slider_double_int"|m="OR"|af="0"|av=""|ld=""|z="hidden"|
foreach($types as $type){
$tmp_params = $type->custom_params;
$tmp_params = explode('|',$tmp_params);
$custom_params = array();
foreach($tmp_params as $v){
preg_match("/^([^=]*)=(.*)|/i",$v, $res);
$custom_params[@$res[1]] = json_decode(@$res[2]);
}