Overloading von Produktinfos

Thema wurde von Cyrus (LeGong), 21. Oktober 2014 erstellt.

  1. Cyrus (LeGong)

    Cyrus (LeGong) Erfahrener Benutzer

    Registriert seit:
    21. Dezember 2011
    Beiträge:
    1.434
    Danke erhalten:
    342
    Danke vergeben:
    176
    @Wilken
    Also, wenn ich das richtig verstehe unter GX_2.1.x.x kann man alle Dateien, die im Ordner "admin/includes/classes" sind können überladen werden. Heißt das auch die Dateien, die keine ".inc.php" sind, sind überladbar?
    Jetzt nehmen wir an, wir möchten die Datei "categories.php" überladen um die Daten von neu eingefügten Feldern "Extra-Felder" zu speichern. Wie macht man das?
    Ich habe die folgende Methode benutzt. Es funktioniert aber nicht! Was habe ich wo falsch eingegeben?
    PHP:
    <?php

    class extrafield_categories extends extrafield_categories_parent {
        function 
    insert_product($products_data$dest_category_id$action 'insert')
        {
            
    $sql_data_array = array('products_inhalt' => xtc_db_prepare_input($products_data['products_inhalt']),
                
    'products_herkunft' => xtc_db_prepare_input($products_data['products_herkunft']),
                
    'products_verpackung' => xtc_db_prepare_input($products_data['products_verpackung']),
                
    'products_anfertigung' => xtc_db_prepare_input($products_data['products_anfertigung']),
                
    'products_geschmack' => xtc_db_prepare_input($products_data['products_geschmack']),
                
    'products_kaesesorte' => xtc_db_prepare_input($products_data['products_kaesesorte']),
                
    'products_milchsorte' => xtc_db_prepare_input($products_data['products_milchsorte']),
                
    'products_milchbehandlung' => xtc_db_prepare_input($products_data['products_milchbehandlung']),
                
    'products_laktose' => xtc_db_prepare_input($products_data['products_laktose']),
                
    'products_fett' => xtc_db_prepare_input($products_data['products_fett']),
                
    'products_reifezeit' => xtc_db_prepare_input($products_data['products_reifezeit']),
                
    'products_kalorien' => xtc_db_prepare_input($products_data['products_kalorien']),
                
    'products_eiweiss' => xtc_db_prepare_input($products_data['products_eiweiss']),
                
    'products_kh' => xtc_db_prepare_input($products_data['products_kh']),
                
    'products_calcium' => xtc_db_prepare_input($products_data['products_calcium']));
            return 
    $products_data;
            
        }
    }
    ?>
     
  2. Anonymous

    Anonymous Erfahrener Benutzer
    Mitarbeiter

    Registriert seit:
    22. Juni 2011
    Beiträge:
    4.760
    Danke erhalten:
    1.748
    Danke vergeben:
    137
    @Cyrus: Das Verzeichnis ist wichtig. Ein Overload für die categories-Klasse muss in user_classes/overloads/categories/ liegen. Vergiss in deinem Beispiel den Aufruf von parent::insert_product() nicht! Bzw. unter Umständen musst du auch die ganze Funktion kopieren, je nachdem, was du da tun willst.
     
  3. Cyrus (LeGong)

    Cyrus (LeGong) Erfahrener Benutzer

    Registriert seit:
    21. Dezember 2011
    Beiträge:
    1.434
    Danke erhalten:
    342
    Danke vergeben:
    176
    Danke für die schnelle Antwort. Dazu habe ich ein Paar Fragen:
    1: Muss die Overload-Datei dann im Format "xxx_categories.inc.php" gespeichert werden? oder "xxx_categories.php"?
    2: Ich habe 15 Extra-Felder für die Produkte eingefügt. Diese sollen es ermöglichen extra Informationen über die Produkte zu ermitteln. Genau so wie die vorhandene Informationen. Zum Beispiel:
    PHP:
    $sql_data_array = array('products_quantity' => xtc_db_prepare_input($products_data['products_quantity']),
                
    'product_type' => xtc_db_prepare_input($products_data['product_type']),
                
    'products_model' => xtc_db_prepare_input($products_data['products_model']),
    usw.
    Extrafelder.jpg

    Extrafelder-Detailseite.jpg


    Diese funktioniert auch richtig, wenn ich es direkt in die Datei /admin/includes/classes/categories.php eingebe:
    PHP:
    $sql_data_array = array('products_quantity' => xtc_db_prepare_input($products_data['products_quantity']),
                
    'product_type' => xtc_db_prepare_input($products_data['product_type']),
                
    'products_model' => xtc_db_prepare_input($products_data['products_model']),
                
    'products_ean' => xtc_db_prepare_input($products_data['products_ean']),
                
    'products_price' => xtc_db_prepare_input($products_data['products_price']),
                
    'products_sort' => xtc_db_prepare_input($products_data['products_sort']),
                
    'products_shippingtime' => xtc_db_prepare_input($products_data['shipping_status']),
                
    'products_discount_allowed' => xtc_db_prepare_input($products_data['products_discount_allowed']),
                
    'products_date_available' => $products_date_available,
                
    'products_weight' => xtc_db_prepare_input($products_data['products_weight']),
                
    'products_status' => $products_status,
                
    'products_startpage' => xtc_db_prepare_input($products_data['products_startpage']),
                
    'products_startpage_sort' => xtc_db_prepare_input($products_data['products_startpage_sort']),
                
    'products_tax_class_id' => xtc_db_prepare_input($products_data['products_tax_class_id']),
                
    'product_template' => xtc_db_prepare_input($products_data['info_template']),
                
    'options_template' => xtc_db_prepare_input($products_data['options_template']),
                
    'manufacturers_id' => xtc_db_prepare_input($products_data['manufacturers_id']),
                
    'products_fsk18' => xtc_db_prepare_input($products_data['fsk18']),
                
    'products_vpe_value' => xtc_db_prepare_input($products_data['products_vpe_value']),
                
    'products_vpe_status' => xtc_db_prepare_input($products_data['products_vpe_status']),
                
    'products_vpe' => xtc_db_prepare_input($products_data['products_vpe']),
                
    'gm_show_date_added' => xtc_db_prepare_input($products_data['gm_show_date_added']),
                
    'gm_show_price_offer' => xtc_db_prepare_input($products_data['gm_show_price_offer']),
                
    'gm_price_status' => xtc_db_prepare_input($products_data['gm_price_status']),
                
    'gm_show_qty_info' => xtc_db_prepare_input($products_data['gm_show_qty_info']),
                
    'gm_min_order' => $gm_min_order,
                
    'gm_show_weight' => xtc_db_prepare_input($products_data['gm_show_weight']),
                
    'gm_graduated_qty' => $gm_graduated_qty,
                
    'gm_priority' => xtc_db_prepare_input($products_data['gm_priority']),
                
    'gm_changefreq' => xtc_db_prepare_input($products_data['gm_changefreq']),
                
    'gm_sitemap_entry' => xtc_db_prepare_input($products_data['gm_sitemap_entry']),
                
    'gm_options_template' => xtc_db_prepare_input($products_data['gm_options_template']),
                
    'nc_ultra_shipping_costs' => xtc_db_prepare_input($products_data['nc_ultra_shipping_costs']));
    Wie kann ich das Updatessicher durch Überladung machen?
     
  4. Anonymous

    Anonymous Erfahrener Benutzer
    Mitarbeiter

    Registriert seit:
    22. Juni 2011
    Beiträge:
    4.760
    Danke erhalten:
    1.748
    Danke vergeben:
    137
    Der Name der überladenden Klasse muss mit dem Dateinamen übereinstimmen, d.h.
    PHP:
    meine_tolle_categories extends meine_tolle_categories_parent {
      ...
    }
    muss in user_classes/overloads/categories/meine_tolle_categories.inc.php stehen.

    Ansonsten werden wir gerade übel off-topic, ich schlage Verlegung in die Entwicklerecke vor.
     
  5. Avenger

    Avenger G-WARD 2012/13/14/15

    Registriert seit:
    26. April 2011
    Beiträge:
    4.771
    Danke erhalten:
    1.478
    Danke vergeben:
    89
    Dein Code baut ja nur den "sql_array" auf (lokal in der Routine...) und gibt dann eine "$products_data" zurück.

    Ohne mich damit jetzt genauer auseinander gesetzt zu haben, würde ich vermuten, dass man folgendes machen muss:

    Statt

    PHP:
    $sql_data_array = array('products_inhalt' => xtc_db_prepare_input($products_data['products_inhalt']),....


    muss man

    PHP:
    $products_data=array_merge($products_data,array('products_inhalt'  => xtc_db_prepare_input($products_data['products_inhalt']),....)
    D.h., man packt die eigenen Felder zu den schon definierten dazu.
     
  6. Avenger

    Avenger G-WARD 2012/13/14/15

    Registriert seit:
    26. April 2011
    Beiträge:
    4.771
    Danke erhalten:
    1.478
    Danke vergeben:
    89
    Das ist das Problem, das ich schon die ganze Zeit an unterschiedlichsten Stellen bemängele...

    Wenn ich eine ganze Funktion überladen muss (wie in diesem Fall), ist die m.E. nicht mehr als "updatesicher" zu bezeichnen....

    Hier helfen nur zusätzliche Methoden, direkt bevor die Daten in die Datenbank geschrieben werden.

    z.B.

    PHP:
    $sql_array=$this->add_user_data($sql_array)
    Und in der Methode "add_user_data" muss ich dann wirklich nur noch die Daten dazu packen, die wirklich meine sind....
     
  7. Anonymous

    Anonymous Erfahrener Benutzer
    Mitarbeiter

    Registriert seit:
    22. Juni 2011
    Beiträge:
    4.760
    Danke erhalten:
    1.748
    Danke vergeben:
    137
    In diesem speziellen Fall ist das aber nicht so schlimm, denn categories::insert_product() liefert in 2.1+ die betroffene products_id zurück. Man kann also so etwas machen:

    PHP:
    class my_categories extends my_categories_parent
    {
        public function 
    insert_product($products_data$dest_category_id$action 'insert')
        {
            
    $products_id parent::insert_product($products_data$dest_category_id$action);
            
    $my_data = array(
                
    'products_foo' => 'is a foo',
                
    'products_bar' => 'is a bar',
                
    'products_answer' => 42,
            );
            
    xtc_db_perform('products'$my_data'update''products_id = \''.(int)$products_id.'\'');
            return 
    $products_id;
        }
    }
    Der eine zusätzliche Query tut nicht so weh, dass man da größeren Aufwand betreiben müsste, um ihn zu vermeiden.
     
  8. Cyrus (LeGong)

    Cyrus (LeGong) Erfahrener Benutzer

    Registriert seit:
    21. Dezember 2011
    Beiträge:
    1.434
    Danke erhalten:
    342
    Danke vergeben:
    176
    #8 Cyrus (LeGong), 23. Oktober 2014
    Zuletzt bearbeitet: 23. Oktober 2014
    @Marco
    Vielen Dank. Das ist genau was ich gebraucht habe. Es funktioniert PRIMA!
    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_inhalt' => xtc_db_prepare_input($products_data['products_inhalt']),
                
    'products_herkunft' => xtc_db_prepare_input($products_data['products_herkunft']),
                
    'products_verpackung' => xtc_db_prepare_input($products_data['products_verpackung']),
                
    'products_anfertigung' => xtc_db_prepare_input($products_data['products_anfertigung']),
                
    'products_geschmack' => xtc_db_prepare_input($products_data['products_geschmack']),
                
    'products_kaesesorte' => xtc_db_prepare_input($products_data['products_kaesesorte']),
                
    'products_milchsorte' => xtc_db_prepare_input($products_data['products_milchsorte']),
                
    'products_milchbehandlung' => xtc_db_prepare_input($products_data['products_milchbehandlung']),
                
    'products_laktose' => xtc_db_prepare_input($products_data['products_laktose']),
                
    'products_fett' => xtc_db_prepare_input($products_data['products_fett']),
                
    'products_reifezeit' => xtc_db_prepare_input($products_data['products_reifezeit']),
                
    'products_kalorien' => xtc_db_prepare_input($products_data['products_kalorien']),
                
    'products_eiweiss' => xtc_db_prepare_input($products_data['products_eiweiss']),
                
    'products_kh' => xtc_db_prepare_input($products_data['products_kh']),
                
    'products_calcium' => xtc_db_prepare_input($products_data['products_calcium']));
                
    // EOF products_extrafields
                
    xtc_db_perform('products'$extra_data'update''products_id = \''.(int)$products_id.'\'');
            return 
    $products_id;
        }
    }
    Das einzige was offen bleibt ist das Kopieren eines Produktes. Hier muß vermute ich im Bereich:-
    PHP:
    // duplicates a product by id into specified category by id

        
    function duplicate_product($src_products_id$dest_categories_id)
        {
    auch die Daten für Extrafelder eingegeben werden. Also:-
    PHP:
    // BOF products_extrafield
                
    'products_inhalt' => $product['products_inhalt'],
                
    'products_herkunft'    => $product['products_herkunft'],
                
    'products_verpackung' => $product['products_verpackunfg'],
                
    'products_anfertigung' => $product['products_anfertigung'],
                
    'products_geschmack' => $product['products_geschmack'],
                
    'products_kaesesorte' => $product['products_kaesesorte'],
                
    'products_milchsorte' => $product['products_milchsorte'],
                
    'products_milchbehandlung' => $product['products_milchbehandlung'],
                
    'products_laktose' => $product['products_laktose'],
                
    'products_fett' => $product['products_fett'],
                
    'products_reifezeit' => $product['products_reifezeit'],
                
    'products_kalorien' => $product['products_kalorien'],
                
    'products_eiweiss' => $product['products_eiweiss'],
                
    'products_kh' => $product['products_kh'],
                
    'products_calcium' => $product['products_calcium'],
                
    // EOF products_extrafield
    Ich wäre sehr dankbar, wenn du mir auch eine Lösung dazu zeigen würdest, oder einen Tipp geben würdest.
     
  9. Anonymous

    Anonymous Erfahrener Benutzer
    Mitarbeiter

    Registriert seit:
    22. Juni 2011
    Beiträge:
    4.760
    Danke erhalten:
    1.748
    Danke vergeben:
    137
    Hallo,

    das ist ein kleines bisschen schwieriger, weil bei duplicate_product() die Rückgabe der erzeugten products_id fehlt. Ich schlage daher vor, erst einmal am Ende von duplicate_product() direkt in admin/includes/categories.php die Zeile
    PHP:
    return $dup_products_id;
    einzufügen. Ich habe das auch gerade hier intern als Merge Request hinterlegt.

    Danach kann man dann so etwas machen (Beispiel von oben erweitert):
    PHP:
    class my_categories extends my_categories_parent
    {
        public function 
    insert_product($products_data$dest_category_id$action 'insert')
        {
            
    $products_id parent::insert_product($products_data$dest_category_id$action);
            
    $my_data = array(
                
    'products_foo' => 'is a foo',
                
    'products_bar' => 'is a bar',
                
    'products_answer' => 42,
                );
            
    xtc_db_perform('products'$my_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();

            
    $copy_my_data_query 
                
    'UPDATE 
                    `products` p
                LEFT JOIN 
                    `products` psrc ON psrc.products_id = \':src_products_id\'
                SET 
                    `p`.`products_foo` = `psrc`.`products_foo`,
                    `p`.`products_bar` = `psrc`.`products_bar`,
                    `p`.`products_answer` = `psrc`.`products_answer`
                WHERE 
                    `p`.`products_id` = \':new_products_id\'
                '
    ;
            
    $copy_my_data_query strtr($copy_my_data_query
                array(
                    
    ':src_products_id' => (int)$src_products_id,
                    
    ':new_products_id' => (int)$new_products_id,
                )
            );
            
    xtc_db_query($copy_my_data_query);

            return 
    $new_products_id;
        }
    }  
    Wie immer: ohne Gewähr. Ich habe das jetzt nur mal schnell so runtergeschrieben, ohne es getestet zu haben. :)
     
  10. Cyrus (LeGong)

    Cyrus (LeGong) Erfahrener Benutzer

    Registriert seit:
    21. Dezember 2011
    Beiträge:
    1.434
    Danke erhalten:
    342
    Danke vergeben:
    176
    Ich sehe dass du im ersten Teil die Daten für die
    PHP:
    $my_data = array(
                
    'products_foo' => 'is a foo',
                
    'products_bar' => 'is a bar',
                
    'products_answer' => 42,
                );
    wobei habe ich diese so eingegeben:
    PHP:
    $my_data = array('products_foo' =>xtc_db_prepare_input($products_data['products_foo']),
    ...
    ...
    );
    Ist meine Methode falsch oder macht es keine Unterschied?
     
  11. Cyrus (LeGong)

    Cyrus (LeGong) Erfahrener Benutzer

    Registriert seit:
    21. Dezember 2011
    Beiträge:
    1.434
    Danke erhalten:
    342
    Danke vergeben:
    176
    Ich habe es jetzt getestet. Beim kopieren führt es leider zu
    USER ERROR(256): "SQL Error"

    Der Code:
    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_inhalt' => xtc_db_prepare_input($products_data['products_inhalt']),
                
    'products_herkunft' => xtc_db_prepare_input($products_data['products_herkunft']),
                
    'products_verpackung' => xtc_db_prepare_input($products_data['products_verpackung']),
                
    'products_anfertigung' => xtc_db_prepare_input($products_data['products_anfertigung']),
                
    'products_geschmack' => xtc_db_prepare_input($products_data['products_geschmack']),
                
    'products_kaesesorte' => xtc_db_prepare_input($products_data['products_kaesesorte']),
                
    'products_milchsorte' => xtc_db_prepare_input($products_data['products_milchsorte']),
                
    'products_milchbehandlung' => xtc_db_prepare_input($products_data['products_milchbehandlung']),
                
    'products_laktose' => xtc_db_prepare_input($products_data['products_laktose']),
                
    'products_fett' => xtc_db_prepare_input($products_data['products_fett']),
                
    'products_reifezeit' => xtc_db_prepare_input($products_data['products_reifezeit']),
                
    'products_kalorien' => xtc_db_prepare_input($products_data['products_kalorien']),
                
    'products_eiweiss' => xtc_db_prepare_input($products_data['products_eiweiss']),
                
    'products_kh' => xtc_db_prepare_input($products_data['products_kh']),
                
    'products_calcium' => xtc_db_prepare_input($products_data['products_calcium']));
                
    // 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_inhalt`= `psrc`.`products_inhalt`,
                    `p`.`products_herkunft`=`psrc`.`products_herkunft`,
                    `p`.`products_verpackung`=`psrc`.`products_verpackung`,
                    `p`.`products_anfertigung`=`psrc`.`products_anfertigung`,
                    `p`.`products_geschmack`=`psrc`.`products_geschmack`,
                    ´p`.`products_kaesesorte`=`psrc`.`products_kaesesorte`,
                    `p`.`products_milchsorte`=`psrc`.`products_milchsorte`,
                    `p`.`products_milchbehandlung`=`psrc`.`products_milchbehandlung`,
                    `p`.`products_laktose`=`psrc`.`products_laktose`,
                    `p`.`products_fett`=`psrc`.`products_fett`,
                    `p`.`products_reifezeit`=`psrc`.`products_reifezeit`,
                    `p`.`products_kalorien`=`psrc`.`products_kalorien`,
                    `p`.`products_eiweiss`=`psrc`.`products_eiweiss`,
                    `p`.`products_kh`=`psrc`.`products_kh`,
                    `p`.`products_calcium`=`psrc`.`products_calcium`
                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;            
                
        }
    }
     
  12. Anonymous

    Anonymous Erfahrener Benutzer
    Mitarbeiter

    Registriert seit:
    22. Juni 2011
    Beiträge:
    4.760
    Danke erhalten:
    1.748
    Danke vergeben:
    137
    Magst du mal im Error-Log nachsehen, wie der DB-Error genau lautet? Ich habe das mal eben in einem kleinen Test-Szenario bei mir nachgestellt, da funktionierte es.
     
  13. Anonymous

    Anonymous Erfahrener Benutzer
    Mitarbeiter

    Registriert seit:
    22. Juni 2011
    Beiträge:
    4.760
    Danke erhalten:
    1.748
    Danke vergeben:
    137
    Bei insert_product() wird xtc_db_perform() verwendet, das macht von sich aus noch einmal ein xtc_db_input() auf die Werte, deswegen muss man sich da in der Regel nicht weiter um die Bereinigung kümmern.

    Generell sollte man xtc_db_input() verwenden, nicht xtc_db_prepare_input().
     
  14. Wilken (Gambio)

    Wilken (Gambio) Erfahrener Benutzer

    Registriert seit:
    7. November 2012
    Beiträge:
    18.737
    Danke erhalten:
    7.310
    Danke vergeben:
    2.208
    Ich hab eure Beiträge mal aus dem Entwicklerdokumentationsfred ausgekoppelt, ihr macht mir das Ding sonst komplett mit eurem konkreten Problem zu ;)
     
  15. Cyrus (LeGong)

    Cyrus (LeGong) Erfahrener Benutzer

    Registriert seit:
    21. Dezember 2011
    Beiträge:
    1.434
    Danke erhalten:
    342
    Danke vergeben:
    176
    Hier ist der Error-Report:-
    Code:
    [URL="http://localhost/724/admin/show_logs.php#"]2014-10-24 10:41:34 (837ec5754f503cfaaee0929fd48974e7) [B]USER ERROR(256): [/B]"SQL Error" in D:\xampp\htdocs\724\inc\xtc_db_error.inc.php:24[/URL] ([URL="http://localhost/724/admin/show_logs.php#"]Details[/URL])
    [URL="http://localhost/724/admin/show_logs.php#"]#3	File: D:\xampp\htdocs\724\inc\xtc_db_error.inc.php:24[/URL] ([URL="http://localhost/724/admin/show_logs.php#"]Details[/URL])
    [URL="http://localhost/724/admin/show_logs.php#"]	Function: trigger_error('SQL Error', 256)[/URL] ([URL="http://localhost/724/admin/show_logs.php#"]Details[/URL])
    		- $message: ### indeterminate value ###
    		- $error_type: ### indeterminate value ###
    	Code:
    		line 22: 	$coo_logger = LogControl::get_instance(); 		line 23: 	$coo_logger->notice($p_error, 'error_handler', 'errors', 'notice', 'SQL ERROR', $p_errno, 'Query:' . "\r\n" . trim($p_query)); [B]		line 24: 	trigger_error('SQL Error', E_USER_ERROR); [/B]		line 25: }[URL="http://localhost/724/admin/show_logs.php#"]#2	File: D:\xampp\htdocs\724\inc\xtc_db_query.inc.php:77[/URL] ([URL="http://localhost/724/admin/show_logs.php#"]Details[/URL])
    [URL="http://localhost/724/admin/show_logs.php#"]#1	File: D:\xampp\htdocs\724\user_classes\overloads\categories\extrafield_categories.inc.php:62[/URL] ([URL="http://localhost/724/admin/show_logs.php#"]Details[/URL])
    [URL="http://localhost/724/admin/show_logs.php#"]	Function: xtc_db_query('UPDATE  			                `products` p 			            LEFT JOIN  			                `products` psrc ON psrc.products_id = \'707\' 			            SET  							`p`.`products_inhalt`= `psrc`.`products_inhalt`, 							`p`.`products_herkunft`=`psrc`.`products_herkunft`, 							`p`.`products_verpackung`=`psrc`.`products_verpackung`, 							`p`.`products_anfertigung`=`psrc`.`products_anfertigung`, 							`p`.`products_geschmack`=`psrc`.`products_geschmack`, 							´p`.`products_kaesesorte`=`psrc`.`products_kaesesorte`, 							`p`.`products_milchsorte`=`psrc`.`products_milchsorte`, 							`p`.`products_milchbehandlung`=`psrc`.`products_milchbehandlung`, 							`p`.`products_laktose`=`psrc`.`products_laktose`, 							`p`.`products_fett`=`psrc`.`products_fett`, 							`p`.`products_reifezeit`=`psrc`.`products_reifezeit`, 							`p`.`products_kalorien`=`psrc`.`products_kalorien`, 							`p`.`products_eiweiss`=`psrc`.`products_eiweiss`, 							`p`.`products_kh`=`psrc`.`products_kh`, 							`p`.`products_calcium`=`psrc`.`products_calcium` 						WHERE 							`p`.`products_id` = \'1247\' 							')[/URL] ([URL="http://localhost/724/admin/show_logs.php#"]Details[/URL])
    	Code:
    		line 60:             ) 		line 61:         ); [B]		line 62:         xtc_db_query($copy_extra_data_query); [/B]		line 63:  		line 64:         return $new_products_id;			 [URL="http://localhost/724/admin/show_logs.php#"]#0	File: D:\xampp\htdocs\724\admin\categories.php:303[/URL] ([URL="http://localhost/724/admin/show_logs.php#"]Details[/URL])
    [URL="http://localhost/724/admin/show_logs.php#"]	Class: extrafield_categories[/URL] ([URL="http://localhost/724/admin/show_logs.php#"]Details[/URL])
    		- $redirect_url: NULL
    [URL="http://localhost/724/admin/show_logs.php#"]	Method: duplicate_product('707', '0')[/URL] ([URL="http://localhost/724/admin/show_logs.php#"]Details[/URL])
    		- $src_products_id: '707'
    		- $dest_categories_id: '0'
    	Code:
    		line 301: 								} 		line 302: 								elseif ($_POST['copy_as'] == 'duplicate') { [B]		line 303: 									$catfunc->duplicate_product($product_id, $dest_category_id); [/B]		line 304: 								} else { 		line 305: 									$messageStack->add_session('Copy type not specified.', 'error'); [URL="http://localhost/724/admin/show_logs.php#"][B]Request:[/B] POST /724/admin/categories.php?action=multi_action_confirm&pID=707&cPath=0_1_7[/URL] ([URL="http://localhost/724/admin/show_logs.php#"]Details[/URL])
    	- duration: ~2305ms
    	- server: Apache/2.4.9 (Win32) OpenSSL/0.9.8y PHP/5.4.27
    	- server address: ::1
    	- user agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:33.0) Gecko/20100101 Firefox/33.0
    	- remote address: 837ec5754f503cfaaee0929fd48974e7
    [URL="http://localhost/724/admin/show_logs.php#"][B]Session:[/B] [/URL] ([URL="http://localhost/724/admin/show_logs.php#"]Details[/URL])
    	- tpl: EyeCandy
    	- MOBILE_ACTIVE: false
    	- language: german
    	- languages_id: 2
    	- language_charset: utf-8
    	- language_code: de
    	- currency: EUR
    [URL="http://localhost/724/admin/show_logs.php#"]	- customers_status: [...][/URL]
    [URL="http://localhost/724/admin/show_logs.php#"]	- cart: [...][/URL]
    [URL="http://localhost/724/admin/show_logs.php#"]	- wishList: [...][/URL]
    	- customer_id: 1
    	- payment: ### Session entry not present ###
    	- shipping: ### Session entry not present ###
    	- cartID: ### Session entry not present ###
    	- sendto: ### Session entry not present ###
    	- billto: ### Session entry not present ###
    [URL="http://localhost/724/admin/show_logs.php#"][B]Post:[/B] [/URL] ([URL="http://localhost/724/admin/show_logs.php#"]Details[/URL])
    	- cPath: 0_1_7
    [URL="http://localhost/724/admin/show_logs.php#"]	- multi_products: [...][/URL]
    	- dest_category_id: 0
    	- copy_as: duplicate
    	- gm_copy_attributes: 1
    	- gm_copy_specials: 1
    	- gm_copy_cross_sells: 1
    	- page_token: 590ce3f2933e376c2135e26327cdb384
    	- multi_copy_confirm: Kopieren
    [URL="http://localhost/724/admin/show_logs.php#"][B]Get:[/B] [/URL] ([URL="http://localhost/724/admin/show_logs.php#"]Details[/URL])
    	- action: multi_action_confirm
    	- pID: 707
    	- cPath: 0_1_7
     
  16. Cyrus (LeGong)

    Cyrus (LeGong) Erfahrener Benutzer

    Registriert seit:
    21. Dezember 2011
    Beiträge:
    1.434
    Danke erhalten:
    342
    Danke vergeben:
    176
    @Marco
    Vielen Dank für deine Mühe und wertvolle Hilfe. Ich habe den Fehler gefunden. Tip-Fehler. Dein Code funktioniert wunderbar. Danke, mit deine große Hilfe kann man jetzt eigene Extrafelder oder Zusatz-Felder ein Stück weiter Updatessicher gestallten.

    Fehler-Code:
    PHP:
    ´p`.`products_kaesesorte`=`psrc`.`products_kaesesorte`,
    Korrektur-Code:
    PHP:
    `p`.`products_kaesesorte`=`psrc`.`products_kaesesorte`,
     
  17. sabrimohamed

    sabrimohamed Mitglied

    Registriert seit:
    29. Januar 2014
    Beiträge:
    13
    Danke erhalten:
    0
    hallo
    ich habe Gambio Version: v2.1.3.3
    und bin ich damit zufrieden
    die Anleitung für extrafellder habe ich geschaft und alles ok auf der Info Seite
    jetzt sollte ich die Felder auf die artekelliste seit kalbt aber nicht
    könne sie bitte helfen
     
  18. Cyrus (LeGong)

    Cyrus (LeGong) Erfahrener Benutzer

    Registriert seit:
    21. Dezember 2011
    Beiträge:
    1.434
    Danke erhalten:
    342
    Danke vergeben:
    176
    schau mal unter http://www.gambio-forum.de/threads/...nter-Artikelnamen/page9?highlight=extrafelder
    da gibt es genaue anleitung für alles was man für die Extrafelder braucht.
     
  19. sabrimohamed

    sabrimohamed Mitglied

    Registriert seit:
    29. Januar 2014
    Beiträge:
    13
    Danke erhalten:
    0
    danke für das schnellen antwort
    deine gote anleitung habe ich gemacht
    auf artekel info ist ok
    aber ich brauche die felder auf artekel listing
     
  20. Cyrus (LeGong)

    Cyrus (LeGong) Erfahrener Benutzer

    Registriert seit:
    21. Dezember 2011
    Beiträge:
    1.434
    Danke erhalten:
    342
    Danke vergeben:
    176
    Für den Artikellisting habe ich es bis jetzt nicht probiert. musste ich mal schauen wie das geht. Aber du kannst das auch selbst probieren. Die Datei dafür ist: "SHOP-Ordner/templates/EyeCandy/module/product_listing/product_listing_v1.html". Diese Datei kopieren und als "product_listing_v1-USERMOD.html" speichern. In dieser Datei nach:-
    HTML:
    <div class="article-list-item-main">
                            <h2>
                                <a href="{$module_data.PRODUCTS_LINK}" class="product_link"{if $module_data.PRODUCTS_META_DESCRIPTION != ''} title="{$module_data.PRODUCTS_META_DESCRIPTION|truncate:80:"..."|replace:'"':'&quot;'}"{/if}>{$module_data.PRODUCTS_NAME}</a>
    suchen und je nachdem wie du das Aussehen der Liste haben möchtest, deine Extrafelder gestalten. NICHT VERGESSEN, ENTWEDER AUF EINE TEST-UMGEBUNG testen, oder vor Änderungen immer EINE DATENSICHERUNG UND DATENBANKSICHERUNG machen.