Eigene Artikelfelder im Adminbereich 2.7.x

Thema wurde von javierfrangenheim, 15. Februar 2016 erstellt.

  1. Anonymous

    Anonymous Beta-Held

    Registriert seit:
    22. März 2015
    Beiträge:
    2.381
    Danke erhalten:
    640
    Danke vergeben:
    414
    @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
     
  2. M. Zitzmann

    M. Zitzmann Erfahrener Benutzer

    Registriert seit:
    3. März 2016
    Beiträge:
    383
    Danke erhalten:
    125
    Danke vergeben:
    41
    Hallo Michael-77,

    das war in der Version 2.7.x auch schon so...

    Gruß
    Mike
     
  3. Anonymous

    Anonymous Beta-Held

    Registriert seit:
    22. März 2015
    Beiträge:
    2.381
    Danke erhalten:
    640
    Danke vergeben:
    414
    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.
     
  4. barbara

    barbara G-WARD 2014-2020

    Registriert seit:
    14. August 2011
    Beiträge:
    35.543
    Danke erhalten:
    11.305
    Danke vergeben:
    1.611
    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
     
  5. sabrimohamed

    sabrimohamed Mitglied

    Registriert seit:
    29. Januar 2014
    Beiträge:
    13
    Danke erhalten:
    0
    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
     
  6. Cyrus (LeGong)

    Cyrus (LeGong) Erfahrener Benutzer

    Registriert seit:
    21. Dezember 2011
    Beiträge:
    1.434
    Danke erhalten:
    342
    Danke vergeben:
    176
    Was hast du dann ganz genau vor? Wo sollen die Variablen eingesetzt werden? Und wo zur Anzeige gebracht werden?
     
  7. sabrimohamed

    sabrimohamed Mitglied

    Registriert seit:
    29. Januar 2014
    Beiträge:
    13
    Danke erhalten:
    0
    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)
     

    Anhänge:

  8. Anonymous

    Anonymous Beta-Held

    Registriert seit:
    22. März 2015
    Beiträge:
    2.381
    Danke erhalten:
    640
    Danke vergeben:
    414
    Gibt es die Möglichkeit die overloads zu bearbeiten, damit man die Extrafelder beim Kopieren der Artikel mit kopiert?
     
  9. Cyrus (LeGong)

    Cyrus (LeGong) Erfahrener Benutzer

    Registriert seit:
    21. Dezember 2011
    Beiträge:
    1.434
    Danke erhalten:
    342
    Danke vergeben:
    176
    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:
    <?php

    class 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.
     
  10. Anonymous

    Anonymous Beta-Held

    Registriert seit:
    22. März 2015
    Beiträge:
    2.381
    Danke erhalten:
    640
    Danke vergeben:
    414
    Super danke. Ich brauche das für 3.1.3.1. Werde es morgen gleich mal testen.
     
  11. sabrimohamed

    sabrimohamed Mitglied

    Registriert seit:
    29. Januar 2014
    Beiträge:
    13
    Danke erhalten:
    0
    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???
     
  12. Anonymous

    Anonymous Beta-Held

    Registriert seit:
    22. März 2015
    Beiträge:
    2.381
    Danke erhalten:
    640
    Danke vergeben:
    414
    @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.
     
  13. Cyrus (LeGong)

    Cyrus (LeGong) Erfahrener Benutzer

    Registriert seit:
    21. Dezember 2011
    Beiträge:
    1.434
    Danke erhalten:
    342
    Danke vergeben:
    176
    @Michael-77,
    ich habe aber das Problem nicht! Ich habe es gerade getestet. Man muss auch die Klasse "categories" überladen.
    PHP:
    <?php

    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_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.
     
  14. Anonymous

    Anonymous Beta-Held

    Registriert seit:
    22. März 2015
    Beiträge:
    2.381
    Danke erhalten:
    640
    Danke vergeben:
    414
    @Cyrus (LeGong),

    wenn ich das bei mir einfüge bekomme ich in der Version 3.1.3.1 einen SQL Fehler.
     
  15. Cyrus (LeGong)

    Cyrus (LeGong) Erfahrener Benutzer

    Registriert seit:
    21. Dezember 2011
    Beiträge:
    1.434
    Danke erhalten:
    342
    Danke vergeben:
    176
    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.
     
  16. Cyrus (LeGong)

    Cyrus (LeGong) Erfahrener Benutzer

    Registriert seit:
    21. Dezember 2011
    Beiträge:
    1.434
    Danke erhalten:
    342
    Danke vergeben:
    176
    Habe gerade getestet. Auch unter GX_3.1.3.1 keine Probleme.
     
  17. Anonymous

    Anonymous Beta-Held

    Registriert seit:
    22. März 2015
    Beiträge:
    2.381
    Danke erhalten:
    640
    Danke vergeben:
    414
    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);
            }
        }
    }
     
  18. Cyrus (LeGong)

    Cyrus (LeGong) Erfahrener Benutzer

    Registriert seit:
    21. Dezember 2011
    Beiträge:
    1.434
    Danke erhalten:
    342
    Danke vergeben:
    176
    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.
     
  19. Anonymous

    Anonymous Beta-Held

    Registriert seit:
    22. März 2015
    Beiträge:
    2.381
    Danke erhalten:
    640
    Danke vergeben:
    414
    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.
     
  20. Cyrus (LeGong)

    Cyrus (LeGong) Erfahrener Benutzer

    Registriert seit:
    21. Dezember 2011
    Beiträge:
    1.434
    Danke erhalten:
    342
    Danke vergeben:
    176
    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.
     

    Anhänge: