Neuigkeiten
  • Die modified eCommerce Shopsoftware ist kostenlos, aber nicht umsonst.
    Spenden
  • Damit wir die modified eCommerce Shopsoftware auch zukünftig kostenlos anbieten können:
    Spenden
  • Thema: Kurze Frage zu EASY POPULATE

    dertobinator

    • Fördermitglied
    • Beiträge: 601
    • Geschlecht:
    Kurze Frage zu EASY POPULATE
    am: 08. Oktober 2018, 13:43:46
    Moin,

    ich habe es in einem anderen Thread schon angeschnitten, möchte hier aber nochmal Eure Rückmeldung erbitten.

    Kann jemand, der EP benutzt, verifizieren, dass bei selben Artikelnummer beim Neuimprt alle bis auf die letzte überschrieben werden, weil EP denkt, es handele sich um Aktualisierungen?
    Oder habe ich etwas übersehen? Ich frage nur deshalb, falls Ronald dieses Problem seinerzeit tatsächlich übersehen haben sollte, ich das dann eventuell "nachprogrammieren" lassen würde. Wär nur ärgerlich, wenn ICH da irgendetwas übersehen habe.
    Alternativ kann ich natürlich zunächst einmal mit eindeutigen Artikelnummern (z.B. selbe Artikelnummern mit Zusatz hochzählen lassen, also z.B. "XYZ.1", "XYZ.2" etc.) neuimportieren, danach wieder exportieren. Nun haben sie eine ID. Artikelnummern wieder "entschlacken" und mit Importrefernz "ID" aktualiseren.
    Geht auch, ist nur einen Tick aufwändiger. Kommt auf den Preis an.

    Gruß

    Tobi

    Linkback: https://www.modified-shop.org/forum/index.php?topic=39558.0

    verstl1

    • Neu im Forum
    • Beiträge: 1
    Re: Kurze Frage zu EASY POPULATE
    Antwort #1 am: 12. Oktober 2018, 19:34:46
    Hallo Tobi,

    wir arbeiten mit eineindeutigen Artikelnummern und wenn diese irrtümlich nochmal vergeben werden, so werden die bestehenden Artikel beim Import auch überschrieben. Haben also das gleiche Problem festgestellt.

    Gruß, Verstl

    dertobinator

    • Fördermitglied
    • Beiträge: 601
    • Geschlecht:
    Re: Kurze Frage zu EASY POPULATE
    Antwort #2 am: 12. Oktober 2018, 19:44:08
    Der gute h-h-h kann das wohl lösen, indem er einen Schalter dazu programmiert. Aus irgendeinem mir völlig unverständlichen Grunde antwortet er aber leider nicht mehr. Vielleicht hat ihn meine Fragerei gestört, keine Ahnung, aber ich wollte halt verstehen, was der Schalter genau macht und ob es auch bei der verschlüsselten Version möglich ist (was es wohl ist). Stehe seinem Verhalten ratlos gegenüber, weil ich absolut nicht unhöflich war oder sonst etwas. Wie gesagt, keine Ahnung. Oder er hat Urlaub.
    Vielleicht hast Du ja mehr Glück. Hinbekommen tut er das wohl. Was das kostet, hat er allerdings noch nicht beantwortet. Ist aber sicherlich interessant.
    Man kann sich auf meine beschriebene Weise denke ich selbst helfen, ist aber wie gesagt etwas umständlicher.

    umbi

    • Mitglied
    • Beiträge: 163
    • Geschlecht:
    Re: Kurze Frage zu EASY POPULATE
    Antwort #3 am: 14. Oktober 2018, 14:43:04
    wenn Ihr Easypopulate verwendet, importiert Ihr ja eine csv.

    Wieso nicht gleich beim csv export eine dopoelvergabe der artikelnummer blocken? man kann ja sogar ein alarm-echo  ausgeben.

    Oder Idee2: beim exporter das Duplikat mit  xxxx-01, xxxx-02 generieren?

    dertobinator

    • Fördermitglied
    • Beiträge: 601
    • Geschlecht:
    Re: Kurze Frage zu EASY POPULATE
    Antwort #4 am: 14. Oktober 2018, 17:11:58
    Verstehe ich nicht. Die Artikelnr. ist ja immer dieselbe und soll dann natürlich auch als solche geführt werden. Sie soll genauso oft geführt werden, wie sie nun mal vorkommt, aber mit unterschiedlichen IDs.

    umbi

    • Mitglied
    • Beiträge: 163
    • Geschlecht:
    Re: Kurze Frage zu EASY POPULATE
    Antwort #5 am: 14. Oktober 2018, 18:59:22
    Tobi

    Bin Deiner Meinung. Ein richtiges Wawi vergibt die Art.Nr. auch nur einmalig. Was aber wenn 2 CSV zweier lieferanten teils die gleiche art Nr verwenden?

    karsta.de

    • Experte
    • Beiträge: 3.082
    Re: Kurze Frage zu EASY POPULATE
    Antwort #6 am: 12. Februar 2019, 15:16:22
    Ich stecke mit dem Importscript fest.

    Der Import der Artikel funktioniert, wenn eval übergangen wird. Aber um auch die neuen Kategorien in die Datenbank zu schreiben, muss eval funktionieren.

    so sieht das Script aus:
    Code: PHP  [Auswählen]
    if (EP_USE_CAT_CACHE_IMPORT) {
                  $catname = $filelayout['v_categories_name_' . $catlevel . '_' . $lang['id']] ;
                  $catname = ep_db_input(ep_db_prepare_input($catname)); //ESCAPING
                  if (trim($catname) != '') {
                    //$catTreeName[$lang['id']] .= '[\''.$catname.'\']';
                                    $catTreeName[$lang['id']] = $catTreeName[$lang['id']].'[\''.$catname.'\']';
                    $code = '$CatTree'.$parTreeName[$lang['id']].'[\''.$catname.'\'][\'ID\']='.$cat_id.';';
                    if ($catCacheDebug) echo 'CODE2_'.$catlevel.': '.$code .'<br>';
                    //return eval ($code);
                                    eval ($code);
                  }
                }

    FEHLERMELDUNG:
    Code: XML  [Auswählen]
    syntax error, unexpected ';', expecting ']' in File: /xxxxxx/import/ep_import_categories.php(197) : eval()'d code on Line: 1

    Leider komme ich selbst nicht drauf, wie ich das Script anpassen muss damits funktioniert.
    Bin für alle Ideen offen.

    BG kgd

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.745
    • Geschlecht:
    Re: Kurze Frage zu EASY POPULATE
    Antwort #7 am: 12. Februar 2019, 16:01:35
    Mmh, ich würde ja so sagen
    Code: PHP  [Auswählen]
    $code = $CatTree.$parTreeName[$lang['id']].'[\''.$catname.'\'][\'ID\']='.$cat_id.';';

    Ich verstehe aber nicht was in $CatTree stehen soll, daß man es mit $parTreeName[$lang['id']] einfach concatenieren kann.

    Gruß,
    noRiddle

    h-h-h

    • modified Team
    • Beiträge: 4.563
    Re: Kurze Frage zu EASY POPULATE
    Antwort #8 am: 13. Februar 2019, 00:04:57
    Code: PHP  [Auswählen]
    $catTreeName[$lang['id']] = $catTreeName[$lang['id']].'[\''.$catname.'\']';
    $code = '$CatTree'.$parTreeName[$lang['id']].'[\''.$catname.'\'][\'ID\']='.$cat_id.';';

    ersetzen mit:

    Code: PHP  [Auswählen]
    $catTreeName[$lang['id']] = $catTreeName[$lang['id']]."['$catname']";
    $code = '$CatTree'.$parTreeName[$lang['id']]."['$catname']['ID'] = $cat_id;";

    Um es genau zu inspizieren, müssen wir wissen, was über eval genau ausgeführt wird.

    Gruß, h-h-h

    karsta.de

    • Experte
    • Beiträge: 3.082
    Re: Kurze Frage zu EASY POPULATE
    Antwort #9 am: 13. Februar 2019, 10:25:12
    Vielen Dank euch beiden. Nach dem Test muss ich leider sagen, dass ich ähnliche Fehler erhalte.

    @noRiddle
    Code: XML  [Auswählen]
     syntax error, unexpected '[', expecting '(' in File: xxxxxxxxx/import/ep_import_categories.php(193) : eval()'d code on Line: 1

    @hhh
    Code: XML  [Auswählen]
     syntax error, unexpected ';', expecting ']' in File: xxxxxxxxx/import/ep_import_categories.php(193) : eval()'d code on Line: 1

    Zum besseren Verständis hier mal die ganze Datei (die Passage kommt mehrmals vor)
    Code: PHP  [Auswählen]
    <?php
    //----------------------------------------------------
    //  ep_import_categories.php
    //  (c) by rpa-com.de
    //----------------------------------------------------
    defined('_VALID_EP') or die('Direct Access to this location is not allowed.');

    $catCacheDebug = false;
    //print_r($filelayout);
    // BOF Nur Import wenn Kategorie beim Import vorhanden  - Multilanguage
    $is_cat = false;
    unset($categories_id);
    // auf Kategorie Ebene 1 testen - Multilanguage
    foreach ($languages as $key => $lang) {
      if (isset($filelayout['v_categories_name_1_' . $lang['id']]) && trim($filelayout['v_categories_name_1_' . $lang['id']]) != '') {
        $is_cat = true;
        break;
      }
      if (EP_USE_IMPORT_DIR) {
        $filelayout['v_categories_name_1_' . $lang['id']] = EP_DEFAULT_IMPORT_DIR;
        $is_cat = true;
      }
    }
    // EOF Nur Import wenn Kategorie beim Import vorhanden  - Multilanguage

    //CATEGORIES UPDATE-INSERT
    if ($is_cat) {

      //CatCaching
      if (EP_USE_CAT_CACHE_IMPORT) {
        $catTreeName = array();
        foreach ($languages as $key => $lang){
          for ($catlevel= 1 ; $catlevel <= EP_MAX_CATEGORIES; $catlevel++ ) {
            $catname = $filelayout['v_categories_name_' . $catlevel . '_' . $lang['id']] ;
            $catname = ep_db_input(ep_db_prepare_input($catname)); //ESCAPING
            if (trim($catname) != '') {
              //$catTreeName[$lang['id']] .= '[\''.$catname.'\']';
                      $catTreeName[$lang['id']] = $catTreeName[$lang['id']].'[\''.$catname.'\']';
            }
          }
          $code = '$catID=$CatTree'.$catTreeName[$lang['id']].'[\'ID\'];';
          if ($catCacheDebug) echo 'CODE1: '.$code . '|'.$lang['id'] .'<br>';
          //return eval ($code);
              eval ($code);
          if (is_int($catID) && $catID > 0) {
            if ($catCacheDebug) echo 'catID:'.$catID . '|'.$lang['id'].'<br>';
            $categories_id = $catID;
            break;
          }
        }
      }

      if (!isset($categories_id)) {
        $categories_id = 0;
        $theparent_id = 0;
        $parTreeName = '';
        $catTreeName = '';
        // start from the lowest  category and work our way up
        for ($catlevel= 1 ; $catlevel <= EP_MAX_CATEGORIES; $catlevel++ ) {
          //echo $catlevel.'<br>';
          //BOF FIX Multilanguage
          $catname = '';
          foreach ($languages as $key => $lang){
            $catname = $filelayout['v_categories_name_' . $catlevel . '_' . $lang['id']] ;
            $catname = ep_db_input(ep_db_prepare_input($catname)); //ESCAPING
            if (trim($catname) != '') {
              $baselang_id = $lang['id'];
              break;
            }
          }
          //echo 'CN'. $catname.'<br>';
          //EOF FIX Multilanguage

          if ($catname != '') {

            // NEW CATEGORIE CUSTOM FIELDS
            $ep_categorie_array = array();

            foreach ($custom_fields[TABLE_CATEGORIES] as $key => $name) {
              $cat_var= $filelayout['v_'.$key.'_' . $catlevel];
              if (isset($cat_var) && strpos($cat_var, 'categories_id')=== false) {
                $ep_categorie_array[$key] = $cat_var;
              }
            }

            $ep_cat_fields = array_merge($default_fields[TABLE_CATEGORIES],$hidden_fields[TABLE_CATEGORIES]);
            foreach ($ep_cat_fields as $key) {
              $cat_var= $filelayout['v_'.$key.'_' . $catlevel];
              if (isset($cat_var) && strpos($cat_var, 'categories_id')=== false) {
                $ep_categorie_array[$key] = $cat_var;
              }
            }

            // CAT GROUP PERMISSION
            if (GROUP_CHECK == 'true' && defined('EP_GROUP_PERMISSIONS') && EP_GROUP_PERMISSIONS) {
              for ($ii = 0, $nn = count($groups); $ii < $nn ; $ii ++) {
                $cat_var= $filelayout['v_cat_group_permission_'.$groups[$ii]['id'].'_'.$catlevel];
                if (isset($cat_var) && strpos($cat_var, 'categories_id')=== false) {
                  $ep_categorie_array['group_permission_'.$groups[$ii]['id']] = $cat_var;
                }
              }
            }

            $ep_categorie_array['last_modified'] = 'now()';

            //echo 'CN:'. $catname.'|'.$theparent_id.'<br>';
            // we found a category name in this field, look for database entry
            $cat_query = ep_db_query("SELECT c.categories_id
                                        FROM "
    .TABLE_CATEGORIES." as c,
                                             "
    .TABLE_CATEGORIES_DESCRIPTION." as cd
                                       WHERE c.categories_id = cd.categories_id
                                         AND cd.language_id = "
    .$baselang_id."
                                         AND c.parent_id = "
    . $theparent_id . "
                                         AND cd.categories_name = '"
    . $catname . "'
                                     "
    );
            //INSERT
            if (!xtc_db_num_rows($cat_query)) { // insert categorie

              $ep_categorie_array['parent_id'] = $theparent_id;
              $ep_categorie_array['date_added'] = date("Y-m-d H:i:s");
              $result = ep_db_perform(TABLE_CATEGORIES, $ep_categorie_array);

              $cat_id = mysqli_insert_id();

              foreach ($languages as $key => $lang) {

                //CatCaching
                if (EP_USE_CAT_CACHE_IMPORT) {
                  $catname = $filelayout['v_categories_name_' . $catlevel . '_' . $lang['id']] ;
                  $catname = ep_db_input(ep_db_prepare_input($catname)); //ESCAPING
                  if (trim($catname) != '') {
                    //$catTreeName[$lang['id']] .= '[\''.$catname.'\']';
                                    $catTreeName[$lang['id']] = $catTreeName[$lang['id']].'[\''.$catname.'\']';
                    $code = '$CatTree'.$parTreeName[$lang['id']].'[\''.$catname.'\'][\'ID\']='.$cat_id.';';
                    if ($catCacheDebug) echo 'CODE2_'.$catlevel.': '.$code .'<br>';
                    //return eval ($code);
                                    eval ($code);
                  }
                }

                //BOF  NEW CATEGORIE CUSTOM FIELDS
                $ep_categorie_desc_array = array();

                foreach ($custom_fields[TABLE_CATEGORIES_DESCRIPTION] as $key => $name){
                  if (isset($filelayout['v_'.$key.'_' . $catlevel . '_' . $lang['id']] )) {
                    $ep_categorie_desc_array[$key] = ep_db_prepare_input($filelayout['v_'.$key.'_' . $catlevel . '_' . $lang['id']]);
                  }
                }

                $ep_cat_des_fields = array_merge($default_fields[TABLE_CATEGORIES_DESCRIPTION],$hidden_fields[TABLE_CATEGORIES_DESCRIPTION]);
                foreach ($ep_cat_des_fields as $key){
                  if (isset($filelayout['v_'.$key.'_' . $catlevel . '_' . $lang['id']] )) {
                    $ep_categorie_desc_array[$key] = ep_db_prepare_input($filelayout['v_'.$key.'_' . $catlevel . '_' . $lang['id']]);
                  }
                }
                //EOF  NEW CATEGORIE CUSTOM FIELDS

                $ep_categorie_desc_array['categories_id'] = $cat_id;
                $ep_categorie_desc_array['language_id'] = $lang['id'];
                ep_db_perform(TABLE_CATEGORIES_DESCRIPTION, $ep_categorie_desc_array);
              }
            //UPDATE
            } else { // we have an existing category, update image and date
              //echo 'CID:'.$row['categories_id'].'<br>';
              $cData =  ep_db_fetch_array($cat_query);
              //print_r($cData);
              $cat_id = $cData['categories_id'];
              unset($ep_categorie_array['categories_id']);
              ep_db_perform(TABLE_CATEGORIES, $ep_categorie_array, 'update', "categories_id = '".$cat_id."'");

              // update multilangugae categories_description
              foreach ($languages as $key => $lang) {

                //CatCaching
                if (EP_USE_CAT_CACHE_IMPORT) {
                  $catname = $filelayout['v_categories_name_' . $catlevel . '_' . $lang['id']] ;
                  $catname = ep_db_input(ep_db_prepare_input($catname)); //ESCAPING
                             
                  if (trim($catname) != '') {
                                 //$catTreeName[$lang['id']] .= '[\''.$catname.'\']';
                                     $catTreeName[$lang['id']] = $catTreeName[$lang['id']].'[\''.$catname.'\']';
                                     $code = '$CatTree'.$parTreeName[$lang['id']].'[\''.$catname.'\'][\'ID\']='.$cat_id.';';
                                    if ($catCacheDebug) echo 'CODE2_'.$catlevel.': '.$code .'<br>';
                                    //return eval ($code);
                                    eval($code);
                  }
                }
                           

                // BOF NEW CATEGORIE CUSTOM FIELDS
                $ep_categorie_desc_array = array();
                $doit = false;
                foreach ($custom_fields[TABLE_CATEGORIES_DESCRIPTION] as $key => $name) {
                  if (isset($filelayout['v_'.$key.'_' . $catlevel . '_' . $lang['id']] )) {
                    $ep_categorie_desc_array[$key] = ep_db_prepare_input($filelayout['v_'.$key.'_' . $catlevel . '_' . $lang['id']]);
                    $doit = true;
                  }
                }

                $ep_cat_des_fields = array_merge($default_fields[TABLE_CATEGORIES_DESCRIPTION],$hidden_fields[TABLE_CATEGORIES_DESCRIPTION]);
                foreach ($ep_cat_des_fields as $key) {
                  if (isset($filelayout['v_'.$key.'_' . $catlevel . '_' . $lang['id']] )) {
                    $ep_categorie_desc_array[$key] = ep_db_prepare_input($filelayout['v_'.$key.'_' . $catlevel . '_' . $lang['id']]);
                    $doit = true;
                  }
                }
                // EOF NEW CATEGORIE CUSTOM FIELDS

                if ($doit) {
                  unset($ep_prod_desc_array['categories_id']);
                  ep_db_perform(TABLE_CATEGORIES_DESCRIPTION, $ep_categorie_desc_array, 'update', "categories_id = '".$row['categories_id']."' AND language_id='".$lang['id']."'");
                }
              }
            }
            // the current catid is the next level's parent
            $theparent_id = $cat_id;
            $categories_id = $cat_id; // keep setting this, we need the lowest level category ID later
            //echo 'CID_'.$catlevel.':'.$categories_id.'<br>';
            //print_r($CatTree);
            if ($catCacheDebug) {echo 'CODE3_'.$catlevel.': '; print_r(catTreeName);echo '<br>';}
            $parTreeName = $catTreeName;
          } else {
            break;
          }
        }
      }
    }
    //echo 'CID:'.$categories_id.'<br>';
    //print_r($filelayout);
    //EXIT;
    ?>

     

    Ich habe selbst auch schon etliche verschieden Schreibweisen getestet und immer wieder ähnliche Fehler erhalten, deshalb mein Hilferuf im Forum.

    BG kgd

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.745
    • Geschlecht:
    Re: Kurze Frage zu EASY POPULATE
    Antwort #10 am: 13. Februar 2019, 13:01:48
    Ach, das ist ein Mist mit eval() und den ganzen Quotes, escaped oder nicht...

    Bist du sicher, daß die im $code-String verwendeten Variablen okay definiert sind ?, in einer solchen Definition könnte ja auch schon ein Fehler sein.
    Es werden Variablen benutzt die nicht in dem File selbst definiert zu sein scheinen womit es schwer wird von außen da durchzublicken.

    Ich wiederhole mal worauf du nicht geantwortet hast:
    Zitat von: noRiddle
    Ich verstehe aber nicht was in $CatTree stehen soll, daß man es mit $parTreeName[$lang['id']] einfach concatenieren kann.

    Also, was steht in $CatTree ?

    Wichtiger zum Verständnis ist aber:
    Wie soll das Ergebnis, daß durch eval() geht aussehen wenn es klar in PHP geschrieben würde, also ohne eval() ?

    Allgemein ?
    Was soll das mit dem eval() überhaupt ?, mach's doch ohne.

    Gruß,
    noRiddle

    hpzeller

    • Experte
    • Beiträge: 4.130
    • Geschlecht:
    Re: Kurze Frage zu EASY POPULATE
    Antwort #11 am: 14. Februar 2019, 09:15:27
    Hallo Karsta,

    setze doch mal "$catCacheDebug = false;" ca. Zeile 8, zum testen auf true, ev. musst du dann am ende des Skripts //EXIT; noch einkommentieren, damit du eine Ausgabe welche unter Anderem den "$code" String welcher evaluiert werden soll enthält im Browser siehst. Anhand dieser Ausgabe könnte man dann ev. die Fehlerursache ermitteln.

    Kurz noch eine Erklärung was in diesem Skript eval() überhaupt macht, eval() erzeugt variable Variablennamen und weist ihnen einen Wert zu.

    Grundsätzlich könnte man obiges auch so -> http://php.net/manual/de/language.variables.variable.php  lösen, müsste dann aber auf andere Weise auf die Werte der Variablen zugreifen. .

    Gruss
    Hanspeter

    karsta.de

    • Experte
    • Beiträge: 3.082
    Re: Kurze Frage zu EASY POPULATE
    Antwort #12 am: 14. Februar 2019, 09:18:18
    Danke. Werde ich testen, wenn ich wieder im Büro bin.

    BG kgd

    karsta.de

    • Experte
    • Beiträge: 3.082
    Re: Kurze Frage zu EASY POPULATE
    Antwort #13 am: 14. Februar 2019, 16:57:32
    Hallo Hanspeter,
    bin jetzt deinen Anweisungen gefolgt und habe folgende Ausgabe erhalten:
    Code: XML  [Auswählen]
    CODE1: $catID=$CatTree['AUDI']['100 (44, 44Q, C3)']['1.8']['55 kW / 75 PS']['ID'];|2
    CODE2_1: $CatTree['AUDI']['ID']=7;
    CODE3_1: catTreeName
    CODE2_2: $CatTree[['100 (44, 44Q, C3)']['ID']=279;
     

    Dazu muss ich erklären AUDI und 100 (44, 44Q, C3) sind Kategorien die schon vorhanden sind und wie in der Ausgabe oben stimmen die IDs mit den IDs im Shop überein.
    Die nächsten Kategorien 1.8 und 55 kW / 75 PS sind noch nicht im Shop und sollten mit dem Import eingefügt werden.

    BG kgd

    hpzeller

    • Experte
    • Beiträge: 4.130
    • Geschlecht:
    Re: Kurze Frage zu EASY POPULATE
    Antwort #14 am: 14. Februar 2019, 19:14:17
    [...]
    Code: XML  [Auswählen]
    CODE2_2: $CatTree[['100 (44, 44Q, C3)']['ID']=279;
     
    [...]

    Dieser Code $CatTree[['100 (44, 44Q, C3)']['ID']=279; würde folgende Fehlermeldung erklären, denn es fehlt eine schliessende eckige Klammer.

    Code: XML  [Auswählen]
    syntax error, unexpected ';', expecting ']' in File: /xxxxxx/import/ep_import_categories.php(197) : eval()'d code on Line: 1
     

    Gruss
    Hanspeter
    Modulshop - Eine große Auswahl an neuen und hilfreichen Modulen für die modified eCommerce Shopsoftware
    20 Antworten
    6125 Aufrufe
    17. September 2021, 14:33:36 von noRiddle (revilonetz)
    3 Antworten
    1188 Aufrufe
    17. Februar 2020, 12:09:35 von Bonner
    1 Antworten
    2481 Aufrufe
    13. März 2011, 10:30:12 von Modulfux
    20 Antworten
    9064 Aufrufe
    13. November 2010, 23:39:04 von REV