Update stock levels in sekunden

      Update stock levels in sekunden

      Hallo zusammen,

      mit Sicherheit haben viele von euch das gleiche Problem: Einen Artikelstamm von ein paar tausend und das Update der Verfügbarkeiten dauert über das Backend gerne mal ein paar Stunden.

      Nachdem es bei meinem Update einige Schwierigkeiten gab, hat mich Herr Lehmann von Rackspeed auf ein Script aufmerksam gemacht, was den Updateprozess um einiges erleichtert. Nach einigen Versuchen und viel Hilfe von Herrn Lehmann hat es endlich geklappt.

      Funktionsweise:
      Man hat die Datei import.csv auf dem FTP in einem bestimmten Ordner und in dieser Datei befindne sich die verfügbarkeiten. Eine .php Datei wird aufgerufen und diese ließt die .csv und macht den update direkt in der Datenbank.

      Zeitersparniss:
      Bei ca. 2000 Produkten dauert so ein Update 2 Sekunden. Per Import Profile vom Backend ca. 3 Stunden.



      Hier ist die .csv Datei. Sie ist sehr einfach, man sieht aber das es keine " Teilung gibt, also nur ,

      Quellcode

      1. store,sku,qty,is_in_stock
      2. admin,xyz46,3,1
      Und diese ist die .php Datei die genutzt wird. Überall wo XXXXXXX zu sehen ist, müssen die Zugangsdaten zur Datenbank angegeben werden und auch der Pfad zur .csv und der Mage.php Datei.

      PHP-Quellcode

      1. <?php
      2. ////////////////GLOBAL DEFINITIONS/////////////////////
      3. //DATABASE SETTINGS
      4. $dbConfig = array(
      5. 'host' => 'localhost',
      6. 'username' => 'XXXXXXXXXXXXX',
      7. 'password' => 'XXXXXXXXXXXXX',
      8. 'dbname' => 'XXXXXXXXXXXXX',
      9. 'driver_options'=> array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8')
      10. );
      11. ///// Path to Your CSV file
      12. $path = '/home/XXXXXXXX/public_html/XXXXXXXXX/import.csv';
      13. // Path to Mage.php
      14. require_once '/home/XXXXXXXX/public_html/app/Mage.php';
      15. // Connect to the databases
      16. $db_magento = Zend_Db::factory('Pdo_Mysql', $dbConfig);
      17. updateTempTableFromFile($db_magento, $path);
      18. $query = $db_magento->select()->from('temp_table');
      19. $contents_array = $db_magento->fetchAll($query);
      20. // Run for each line
      21. foreach ($contents_array as $line) {
      22. $sku = $line['sku'];
      23. $qty = $line['qty'];
      24. echo $sku . '<br>';
      25. $exists = $db_magento->query("SELECT COUNT(sku) cnt FROM catalog_product_entity WHERE sku = '$sku' LIMIT 1");
      26. $find_product = (($exists->fetchObject()->cnt) > 0) ? true : false;
      27. if ($find_product == true) {
      28. $entity_id = getEntityID_bySKU($db_magento, $sku);
      29. updateQTY ($db_magento, $entity_id, $qty);
      30. }
      31. }
      32. function getEntityID_bySKU($db_magento, $sku) {
      33. $entity_row = $db_magento->query("SELECT entity_id FROM catalog_product_entity p_e WHERE p_e.sku = '$sku'")->fetchObject();
      34. $entity_id = $entity_row->entity_id;
      35. return $entity_id;
      36. }
      37. function updateQTY($db_magento, $entity_id, $qty) {
      38. $db_magento->query("UPDATE cataloginventory_stock_item s_i, cataloginventory_stock_status s_s
      39. SET s_i.qty = '$qty', s_i.is_in_stock = IF('$qty'>0, 1,0),
      40. s_s.qty = '$qty', s_s.stock_status = IF('$qty'>0, 1,0)
      41. WHERE s_i.product_id = '$entity_id' AND s_i.product_id = s_s.product_id ");
      42. }
      43. function updateTempTableFromFile($db_magento, $path){
      44. $db_magento->query("TRUNCATE TABLE temp_table");
      45. $db_magento->query("LOAD DATA LOCAL INFILE '$path'
      46. INTO TABLE temp_table
      47. CHARACTER SET cp1251
      48. FIELDS TERMINATED BY ','
      49. LINES TERMINATED BY '\n'
      50. (`store`,`sku`, `qty`,`is_in_stock`)");
      51. }
      52. function getAttributeEAV_id ($db_magento, $attribute_name)
      53. {
      54. $result = $db_magento->query("SELECT attribute_id FROM eav_attribute WHERE entity_type_id = 4 AND attribute_code = '$attribute_name'")->fetchObject()->attribute_id;
      55. return $result;
      56. }
      Diese Datei kann nach belieben benannt werden und in einem Verzeichniss abgelegt werden. Beim Aufrufen der Seite sind die SKU's zu sehen die in der .csv zu finden sind.


      Vielen Dank an Herrn Lehmann für seine große Hilfe!
      Damit das Script ordnungsgemäß funktioniert muss eine neue Tabelle in der Magento-DB angelegt werden:

      Quellcode

      1. CREATE TABLE IF NOT EXISTS `temp_table` (
      2. `store` varchar(255) NOT NULL,
      3. `sku` varchar(255) NOT NULL,
      4. `qty` varchar(255) NOT NULL,
      5. `is_in_stock` varchar(255) NOT NULL,
      6. PRIMARY KEY (`sku`)
      7. ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
      Magento Hosting | Cloud Server | Shopware Hosting | Elasticsearch Hosting
      Unsere Hosting-Lösungen nutzen ultraschnelle SSDs und sind jederzeit skalierbar.