Ups... Soweit habe ich nicht gelesen... Ab #19 wird doch genau erklärt wie es mit den Kategorien geht. Die categories_id ist die jeweilige in der man "arbeitet"... Wenn man eine neue anlegt muß diese erst gespeichert werden (gibt eine neue ID) und beim nächsten Aufruf können die Zusatzfelder gespeichert werden. #77 bezieht sich auf die Produktfelder Ich denke daß es analog dazu auch bei den Kategorien geht..
Ja, das Speichern bei einer vorhandenen Kategorie funktioniert schon. Aber es ist doch relativ sinnfrei, wenn ich erst eine neue Kategorie speichern muss um dann das Zusatzfeld zu speichern. Beim Speichern einer Kategorie gibt es ja nicht mal die "Aktualisieren" Funktion, wie beim Artikel. Den Hinweis ab #77 habe ich glaube ich schon probiert (mit categorie_id), das hat aber nicht funktioniert. Ich werde das aber nochmal prüfen. Nachtrag: Mit 'insert_category' anstatt 'new_category' funktioniert es dann auch.
Hi Cyrus, ich muss diesen alten Post mal rauskramen, da ich bei meinen Artikeln zwei Extrefelder benötige. Habe Deine Daten runtergeladen und die Dateien ExtrafelderFormExtender.inc.php, sowie AddExtrafields.inc.php entsprechend angepasst. Klappt soweit auch alles. Die beiden extrafelder werden mir auch beim Artikel bearbeiten angezeigt. Wenn ich nun allerdings etwas eintrage und den Artikel speichere, werden die Werte anscheinend nicht abgespeichert. Wenn ich das nächste mal den Artikel bearbeite sind die Felder leer. Bei der Artikeldetailansicht im Frontend werden die Felder daher natürlich auch nicht angezeigt. Was habe ich übersehen oder muss ich noch anpassen ? Mein Wunsch ist es das ich diese beiden Felder mit Text füllen kann, der dann auch bei den Artikeldetails rechts unter Artikelnummer und Lieferzeit angezeigt und auch mit in den Warenkorb und Checkout etc. übernommen wird. Es gibt ja auch die schöne Funktion Zusatzfelder (die ich vorab genutzt habe) die ja eigentlich auch passend ist, aber die Werte werden halt leider nicht mit in den Warenkorb und Chechout übernommen. Danke für Deine Hilfe.
Hallo @pulli#7 es sind insgesamt 4 php-Dateien, die überladen werden müssen. "StoreExtrafelderExtender.inc.php" "ExtrafelderFormExtender.inc.php" "extrafield_categories.inc.php" "AddExtrafields.inc.php" hast du was vergessen?
Ach siehste, ich dachte die zwei anderen Dateien wären für Extrafelder in den Kategorien ;-) Gut habe die Daten nun auch entsprechend bearbeitet und hochgeladen. Jetzt wird zumindest vom zweiten Feld der Wert beim Artikel gespeichert. Vom ersten Feld jedoch (bei Dir inhalt) bleibt egals was ich eingebe eine 0 stehen. Auch wenn ich die Einträge dieses Feldes lösche und abspeicher bleibt diese 0 bestehen... Und beim Artikel im Frontend wird dann auch nichts angezeigt und übertragen...
Ja, habe es zig mal geprüft und neu getestet, Datenbank zurückgesetzt etc. Immer das selbe Ergebnis. Das erste Feld (bei Cyrus mit Bezeichnung inhalt) hat nach erstmaligem Ausfüllen immer eine 0 stehen. Und angezeigt werden beide Felder nicht auf der Detailseite des Artikels. Übrigens auch nicht, wenn ich die Originaldateien völlig unverändert nutze. ;-) Da kommt auch das Problem mit der 0. So langsam verzweifel ich ;-)
Also zumindest habe ich folgendes rausgefunden: Wenn man im ersten Feld eine Zahl einträgt wird diese zumindest nicht durch eine 0 ersetzt sondern bleibt stehen. Auf der Detailseite wird leider trotzdem nichts angezeigt. Und in der einen Datei (categories) hatte Cyrus bei dem zweiten Namen ein _ dahinter, beim ersten aber nicht... Daran wird es aber wohl nicht liegen, da ich auch dort schon verschiedene Versionen getestet habe. Daher hier einfach mal der Inhalt der entsprechenden Dateien: StoreExtrafelderExtender.inc.php PHP: <?php/** * Der Dateiname muss StoreExtrafelderExtender.inc.php heissen. * * Overload der Klasse AdminCategoriesExtenderComponent. * * Der Ordner muss AdminCategoriesExtenderComponent heissen. */class StoreExtrafelderExtender extends StoreExtrafelderExtender_parent{ /** * Overloaded "proceed" method. */ public function proceed() { parent::proceed(); if(isset($this->v_data_array['GET']['action']) && $this->v_data_array['GET']['action'] === 'update_product') { $productId = (int)$this->v_data_array['GET']['pID']; /** @var ProductReadService $productReadService */ $productReadService = StaticGXCoreLoader::getService('ProductRead'); /** @var StoredProduct $product */ $product = $productReadService->getProductById(new IdType($productId)); $addonValues = $product->getAddonValues()->getArray(); $addonValues['products_bandfarbe'] = (double)$this->v_data_array['POST']['products_bandfarbe']; $addonValues['products_ankerfarbe'] = $this->v_data_array['POST']['products_ankerfarbe']; $addonValueCollection = MainFactory::create('KeyValueCollection', $addonValues); $product->addAddonValues($addonValueCollection); /** @var ProductWriteService $productWriteService */ $productWriteService = StaticGXCoreLoader::getService('ProductWrite'); $productWriteService->updateProduct($product); } }} ExtrafelderFormExtender.inc.php PHP: <?php/** * Class ExtrafelderFormExtender. Also die Datei muss heissen * ExtrafelderFormExtender.inc.php * * Overload der Klasse AdminEditProductExtenderComponent. * Also der Ordner muss AdminEditProductExtenderComponent heissen. * * Adds a form for Extrafields values to the edit product page * * @see AdminEditProductExtenderComponent */require_once(DIR_FS_INC . 'xtc_get_tax_rate.inc.php');class ExtrafelderFormExtender extends ExtrafelderFormExtender_parent{ /** * Overloaded "proceed" method. */ public function proceed() { parent::proceed(); $products_bandfarbe = ''; $products_ankerfarbe = ''; if(isset($this->v_data_array['GET']['pID'])) { $productId = (int)$this->v_data_array['GET']['pID']; /** @var ProductReadService $productReadService */ $productReadService = StaticGXCoreLoader::getService('ProductRead'); /** @var StoredProduct $product */ $product = $productReadService->getProductById(new IdType($productId)); try { $products_bandfarbe = $product->getAddonValue(new StringType('products_bandfarbe')); $products_ankerfarbe = $product->getAddonValue(new StringType('products_ankerfarbe')); } catch(InvalidArgumentException $e) { // product has no Extrafields yet } } $bp = round($products_prime_cost * (107 / 100), 2) ; $cooled_1 = $cooled_versand == 1 ? 'selected' : ''; $cooled_0 = $cooled_versand == 0 ? 'selected' : ''; $html = '<div class="span12"> <div class="grid control-group span6"> <div class="span6"> <label>Bandfarbe:</label> </div> <div class="span6"> <input name="products_bandfarbe" type="text" value="' . $products_bandfarbe . '" /> </div> </div> <div class="grid control-group span6"> <div class="span6"> <label>Ankerfarbe:</label> </div> <div class="span6"> <input name="products_ankerfarbe" type="text" value="' . $products_ankerfarbe . '" /> </div> </div> </div>'; $this->v_output_buffer['top'][''] = array('title' => 'Extrafelder', 'content' => $html); }} extrafield_categories.inc.php PHP: <?php/* * Der dateiname muss extrafield_categories.inc.php heissen. * Genau wie der Klassenname. * Overload der Klasse categories. Also der Orner muss categories heissen.*/class extrafield_categories extends extrafield_categories_parent{ function duplicate_product($src_products_id, $dest_categories_id) { $new_products_id = parent::duplicate_product($src_products_id, $dest_categories_id); $copy_extra_data_query = 'UPDATE `products` p LEFT JOIN `products` psrc ON psrc.products_id = \':src_products_id\' SET `p`.`products_bandfarbe_`= `psrc`.`products_bandfarbe`, `p`.`products_ankerfarbe_`=`psrc`.`products_ankerfarbe` WHERE `p`.`products_id` = \':new_products_id\' '; // EOF products_extrafield $copy_extra_data_query = strtr($copy_extra_data_query, array( ':src_products_id' => (int)$src_products_id, ':new_products_id' => (int)$new_products_id, ) ); xtc_db_query($copy_extra_data_query); return $new_products_id; }} Und bei der AddExtrafields.inc.php PHP: <?php/** * Class AddExtrafields. Also die Datei muss AddExtrafields.inc.php heissen. * * Overload der Klasse ProductAddonValueStorage. Also der Ordner muss * nach Klasse benannt werden. * * @category System * @package Product * @subpackage Storages * * @see ProductAddonValueStorage */class AddExtrafields extends AddExtrafields_parent{ /** * Maps extrafields addon values to extrafields fields in products table * * @return array */ protected function _getExternalFieldsArray() { $externalFields = parent::_getExternalFieldsArray(); $externalFields['products']['fields']['products_bandfarbe'] = 'products_bandfarbe'; $externalFields['products']['fields']['products_ankerfarbe'] = 'products_ankerfarbe'; return $externalFields; }} und für das SQL dann entsprechend: Ich habe also immer inhalt mit bandfarbe und herkunft mit ankerfarbe ausgetauscht. Mehr nicht ;-)
die beide Unterstriche müssen weg: Code: `p`.`products_bandfarbe_`= `psrc`.`products_bandfarbe`, `p`.`products_ankerfarbe`=`psrc`.`products_ankerfarbe`
Einen Unterstrich hast Du ja jetzt wieder drin ;-) Habe aber beides versucht, mit dem einen, aber natürlich auch ohne unterstriche...es ändert sich aber leider nichts. keine Ahnung wo jetzt noch der Fehler liegt.
Außerdem bekomme ich nun immer eine SQL-Fehlermeldung, wenn ich einen Artikel kopiere. Wenn ich dann zurückgehe und neu lade ist der Artikel zwar tatsächlich kopiert, aber schön ist das mit der Fehlermeldung dennoch nicht ;-)
kann ich Dir leider nicht mehr genau sagen, da ich die Funktion nun erstmal rausgenommen habe und die Datenbank nochmal neu eingespielt habe. wie gesagt, da bei dem ersten feld immer eine 0 stand und die beiden felder ohnehin nicht auf der artikeldetailseite angezeigt wurden bringt mir das momentan leider noch nichts. entweder habe ich was falsch gemacht, oder im code steckt ein kleiner fehler...
Nimm doch mal aus der StoreExtrafelderExtender.inc.php das (double) raus. Dadurch wird in dem Feld auch ein Text gespeichert. Um die Werte im Artikel anzuzeigen mußt du die ProductInfoContentView überladen. https://www.gambio.de/forum/threads...m-adminbereich-2-7-x.23754/page-2#post-201910