@Moritz (Gambio), kann es sein, dass ihr in der Version 3.1.1.0 etwas geändert habt? Die Zusatzfelder werden im Admin angezeigt. Wenn ich einen Artikel bearbeite werden die Daten auch übernommen, wenn ich allerdings einen neuen Artikel anlege werden die Daten nicht gespeichert. Ich muss dann den Artikel öffnen und die Zusatzfelder neu bearbeiten. Danach klappt das speichern wieder. Hast du eine Idee woran das liegt? Danke
Hi Mike, danke. Die hatte ich nur zum testen und habe keine Artikel angelegt nur geändert. Vielleicht fällt Moritz ja noch ein woran es liegt.
Der Artikel muss erst einmal gespeichert sein, damit er auch eine ID hat. Erst danach können Extrafelder oder Eigenschaften zu dieser ID angelegt werden
hallo zusamen ich habe das extrafeld mit GX3 gemacht und funktioniert ganz gut aber ich brauch noch hillfe wie kann ich bei den extrafelder so maschen $a = datenbank_feld1 $b = datenbank_feld2 $c = datenbank_feld3 datenbank_feld4 = $a $b $c danke für die hilfe
Was hast du dann ganz genau vor? Wo sollen die Variablen eingesetzt werden? Und wo zur Anzeige gebracht werden?
hallo sehe die datein das ist das allte 2.3 und jetzt bin ich auf gx3 und ich wollte das einpassen. hier /overloads/AdminCategoriesExtenderComponent/StoreEkpExtender.inc.php): oder hier /overloads/ProductAddonValueStorage/AddEkpField.inc.php)
Gibt es die Möglichkeit die overloads zu bearbeiten, damit man die Extrafelder beim Kopieren der Artikel mit kopiert?
Bei welcher Gambio Version? bei Versionen bis 2.7.x muss die Datei /user_classes/overloads/categories/extrafield_categories.inc.php so eine Aufbau haben. Dann werden die Extrafelder auch beim Kopieren mit kopiert. PHP: <?phpclass extrafield_categories extends extrafield_categories_parent{ public function insert_product($products_data, $dest_category_id, $action = 'insert') { $products_id = parent::insert_product($products_data, $dest_category_id, $action); // BOF products_extrafields $extra_data = array('products_content' => xtc_db_input($products_data['products_content']), 'products_origin' => xtc_db_input($products_data['products_origin']), 'products_package' => xtc_db_input($products_data['products_package']), 'products_fabrication' => xtc_db_input($products_data['products_fabrication']), 'products_taste' => xtc_db_input($products_data['products_taste']), 'products_variety' => xtc_db_input($products_data['products_variety']), 'products_type' => xtc_db_input($products_data['products_type']), 'products_treatment' => xtc_db_input($products_data['products_treatment']), 'products_lactose' => xtc_db_input($products_data['products_lactose']), 'products_fat' => xtc_db_input($products_data['products_fat']), 'products_maturity' => xtc_db_input($products_data['products_maturity']), 'products_calorie' => xtc_db_input($products_data['products_calorie']), 'products_protein' => xtc_db_input($products_data['products_protein']), 'products_carbohydrate' => xtc_db_input($products_data['products_carbohydrate']), 'products_calcium' => xtc_db_input($products_data['products_calcium']), 'products_salt' => xtc_db_input($products_data['products_salt']), 'products_gluten' => xtc_db_input($products_data['products_gluten']), 'products_glutamate' => xtc_db_input($products_data['products_glutamate']), 'products_feature' => xtc_db_input($products_data['products_feature']), 'products_prime_cost' => xtc_db_input($products_data['products_prime_cost']), 'products_additives' => xtc_db_input($products_data['products_additives'])); // EOF products_extrafields xtc_db_perform('products', $extra_data, 'update', 'products_id = \''.(int)$products_id.'\''); return $products_id; } 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_content`= `psrc`.`products_content`, `p`.`products_origin`=`psrc`.`products_origin`, `p`.`products_package`=`psrc`.`products_package`, `p`.`products_fabrication`=`psrc`.`products_fabrication`, `p`.`products_taste`=`psrc`.`products_taste`, `p`.`products_variety`=`psrc`.`products_variety`, `p`.`products_type`=`psrc`.`products_type`, `p`.`products_treatment`=`psrc`.`products_treatment`, `p`.`products_lactose`=`psrc`.`products_lactose`, `p`.`products_fat`=`psrc`.`products_fat`, `p`.`products_maturity`=`psrc`.`products_maturity`, `p`.`products_calorie`=`psrc`.`products_calorie`, `p`.`products_protein`=`psrc`.`products_protein`, `p`.`products_carbohydrate`=`psrc`.`products_carbohydrate`, `p`.`products_calcium`=`psrc`.`products_calcium`, `p`.`products_salt`=`psrc`.`products_salt`, `p`.`products_gluten`=`psrc`.`products_gluten`, `p`.`products_glutamate`=`psrc`.`products_glutamate`, `p`.`products_feature`=`psrc`.`products_feature`, `p`.`products_prime_cost`=`psrc`.`products_prime_cost`, `p`.`products_additives`=`psrc`.`products_additives` 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; }} ab Gambio Version 3.0.x braucht man nicht mehr die Klasse "categories" zu überladen, sondern die Klasse "AdminCategoriesExtenderComponent" und zwar folgendermassen: PHP: <?php/*** Class StoreExtrafelderExtender** Store product's Extrafelder** @see AdminCategoriesExtenderComponent*/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_prime_cost'] = (double)$this->v_data_array['POST']['products_prime_cost']; $addonValues['products_content'] = $this->v_data_array['POST']['products_content']; $addonValues['products_origin'] = $this->v_data_array['POST']['products_origin']; $addonValues['products_package'] = $this->v_data_array['POST']['products_package']; $addonValues['products_fabrication'] = $this->v_data_array['POST']['products_fabrication']; $addonValues['products_taste'] = $this->v_data_array['POST']['products_taste']; $addonValues['products_variety'] = $this->v_data_array['POST']['products_variety']; $addonValues['products_type'] = $this->v_data_array['POST']['products_type']; $addonValues['products_treatment'] = $this->v_data_array['POST']['products_treatment']; $addonValues['products_lactose'] = $this->v_data_array['POST']['products_lactose']; $addonValues['products_fat'] = $this->v_data_array['POST']['products_fat']; $addonValues['products_maturity'] = $this->v_data_array['POST']['products_maturity']; $addonValues['products_calorie'] = $this->v_data_array['POST']['products_calorie']; $addonValues['products_protein'] = $this->v_data_array['POST']['products_protein']; $addonValues['products_carbohydrate'] = $this->v_data_array['POST']['products_carbohydrate']; $addonValues['products_calcium'] = $this->v_data_array['POST']['products_calcium']; $addonValues['products_salt'] = $this->v_data_array['POST']['products_salt']; $addonValues['products_gluten'] = $this->v_data_array['POST']['products_gluten']; $addonValues['products_glutamate'] = $this->v_data_array['POST']['products_glutamate']; $addonValues['products_feature'] = $this->v_data_array['POST']['products_feature']; $addonValues['products_additives'] = $this->v_data_array['POST']['products_additives']; $addonValues['cooled_versand'] = $this->v_data_array['POST']['cooled_versand']; $addonValueCollection = MainFactory::create('KeyValueCollection', $addonValues); $product->addAddonValues($addonValueCollection); /** @var ProductWriteService $productWriteService */ $productWriteService = StaticGXCoreLoader::getService('ProductWrite'); $productWriteService->updateProduct($product); } }} Falls du die gambio Version 3 hast, lies einfach diesen Beitrag durch. Hier ist alles was man braucht schon beschrieben.
Hallo zusammen mit der anleitung ist super danke an euch all aber ich versuche seit 1 woche mit einem befehl wie kann ich 3 oder mehrere extra datenfeld in einen zu speichern oder am bestens meinen extrafelder in der kortzbschreibug zu speischern hat jemand von euch einen edae???
@Cyrus (LeGong), bin erst heute dazu gekommen das zu testen. Ich habe deinen Code mit meinem verglichen. Der einzige Unterschied sind die Feldbezeichnungen der Rest ist gleich. Leider werden damit aber die Daten der Felder nicht mit kopiert, wenn ich einen Artikel kopiere.
@Michael-77, ich habe aber das Problem nicht! Ich habe es gerade getestet. Man muss auch die Klasse "categories" überladen. PHP: <?phpclass 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_content`= `psrc`.`products_content`, `p`.`products_origin`=`psrc`.`products_origin`, `p`.`products_package`=`psrc`.`products_package`, `p`.`products_fabrication`=`psrc`.`products_fabrication`, `p`.`products_taste`=`psrc`.`products_taste`, `p`.`products_variety`=`psrc`.`products_variety`, `p`.`products_type`=`psrc`.`products_type`, `p`.`products_treatment`=`psrc`.`products_treatment`, `p`.`products_lactose`=`psrc`.`products_lactose`, `p`.`products_fat`=`psrc`.`products_fat`, `p`.`products_maturity`=`psrc`.`products_maturity`, `p`.`products_calorie`=`psrc`.`products_calorie`, `p`.`products_protein`=`psrc`.`products_protein`, `p`.`products_carbohydrate`=`psrc`.`products_carbohydrate`, `p`.`products_calcium`=`psrc`.`products_calcium`, `p`.`products_salt`=`psrc`.`products_salt`, `p`.`products_gluten`=`psrc`.`products_gluten`, `p`.`products_glutamate`=`psrc`.`products_glutamate`, `p`.`products_feature`=`psrc`.`products_feature`, `p`.`products_prime_cost`=`psrc`.`products_prime_cost`, `p`.`products_additives`=`psrc`.`products_additives` 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; }} Natürlich muss du die Name deine eigene Felder reinschreiben. einen Ordner namens "categories" in dem Ordner "user_classes/overloads" anlegen. Die Datei wie oben in diesem Ordner speichern. Caches leeren. Musste eigentlich dann funktionieren.
Ich habe es unter Version 3.1.1.0 gerade getestet. Ohne Probleme. du hast eventuell in der PHP-Datei einen Fehler oder du hast einen Feld in der Datenbank anderes benannt oder noch nicht angelegt.
Komisch. So sieht mein Overload von AdminCategoriesExtenderComponent aus. Kann keinen Unterschied feststellen. PHP: <?php/*** Class StoreEkpExtender** Store product's EKP** @see AdminCategoriesExtenderComponent*/class StoreEkpExtender extends StoreEkpExtender_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_name_bild'] = $this->v_data_array['POST']['products_name_bild']; $addonValues['products_bild'] = $this->v_data_array['POST']['products_bild']; $addonValues['products_schwer'] = $this->v_data_array['POST']['products_schwer']; $addonValues['download'] = $this->v_data_array['POST']['download']; $addonValueCollection = MainFactory::create('KeyValueCollection', $addonValues); $product->addAddonValues($addonValueCollection); /** @var ProductWriteService $productWriteService */ $productWriteService = StaticGXCoreLoader::getService('ProductWrite'); $productWriteService->updateProduct($product); } }}
Ja. Diese ist nur eine von Overloaddateien, die du brauchst. Diese muss in dem Ordner "../overloads/AdminCategoriesExtenderComponent/" gespeichert sein. In deinem Fall die Dateiname muss heißen "StoreEkpExtender.inc.php". Du brauchst aber auch ein Overload für die Klasse "AdminEditProductExtenderComponent"; ein Overload für die Klasse "ProductAddonValueStorage"; ein Overload für die Klasse "categories". Außerdem muss deine Datenbank mit den benötigten Felder erweitert sein und auch die notwendige Sprachdateien müssen vorhanden sein. Sonst funktioniert es nicht. Das Overload der Klasse "categories" ist für das Kopieren eines Produktes und dessen Extrafelder zuständig. Was die andere Dateien machen, ist in diesem Beitrag deutlich geschrieben worden.
Danke jetzt klappt es. Ich hatte die nicht neu hinzugefügt, weil du in deinem Post #49 geschrieben hast, dass man die nicht mehr benötigt. Mit der categories klappt es jetzt.
Hier nochmals eine Zip-Datei mit allen notwendigen Overloads und Erweiterungen um Extrafelder in Artikel einlegen, bearbeiten, speichern und kopieren. Die Feldnamen sind allgemein gehalten und müssen nach eigenen Bedürfnissen angepasst werden. Viel Spass und Erfolg.