2017-01-06 7 views
1

Momentan programmiere ich ein Modul für Prestashop 1.6.10, das sich im Administrationsbereich befindet und eine externe API verwendet. Mein Problem ist, dass ich nicht verstehe, wie man ein Produkt in der Datenbank im Backoffice hinzufügt.Produkt ein Produkt in Prestashop 1.6.10 von einer API extern hinzufügen?

Dies ist der Code, den ich writed haben:

public function Product() { 
    if (empty($_GET['product'])) { 
     return false; 
    } 

    switch($_GET['product']) { 
     case 'add' : 
      $product = new ProductCore(); 
      $product->id_shop_default = 1; 
      $product->id_manufacturer = 1; 
      $product->id_supplier = 1; 
      $product->reference = "adding_product"; 
      $product->supplier_reference = ""; 
      $product->location = ""; 
      $product->width = "0.00000"; 
      $product->height = "0.00000"; 
      $product->depth = "0.00000"; 
      $product->weight = "0.00000"; 
      $product->quantity_discount = "0"; 
      $product->ean13 = "0"; 
      $product->upc = ""; 
      $product->cache_is_pack = "0"; 
      $product->cache_has_attachments = "0"; 
      $product->is_virtual = "0"; 
      $product->save(); 
      $product->add(); 
      break; 
     /** Product suppression. 
     case 'del' : 
      if (Product::existsInDatabase()) { 

      } 
      break; 
    } 
    return false; 
} 

ich das „Produkt“ Objekt verwenden, aber es funktioniert nicht, und ich weiß nicht, warum :(

mir jemand bitte helfen konnte

?

Antwort

1

sollten Sie Product Klasse anstelle von ProductCore.

save Funktion genug Produkt in DB zu speichern. I Es ist nicht notwendig, danach die Funktion add zu verwenden.

Wenn die Produktwerte nicht korrekt sind, wird ein Fehler angezeigt. Aber du solltest DEBUG MODE zuerst aktivieren: Activate Prestashop Debug Mode

Viel Glück.

0

Verwenden Sie den folgenden Code.

{ 
     $object = new Product(); 
     foreach ($_POST as $key => $value) { 
      if (array_key_exists($key, $object) && $key != 'id_product') { 
       $object->{$key} = $value; 
      } 
     } 

     $languages = Language::getLanguages(false); 
     $class_vars = get_class_vars(get_class($object)); 
     $fields = array(); 
     if (isset($class_vars['definition']['fields'])) { 
      $fields = $class_vars['definition']['fields']; 
     } 
     foreach ($fields as $field => $params) { 
      if (array_key_exists('lang', $params) && $params['lang']) { 
       foreach ($languages as $language) { 
        $value = ''; 

        if (Tools::getIsset($field . '_' . (int)$language['id_lang'])) { 
         $value = Tools::getValue($field . '_' . (int)$language['id_lang']); 
        } elseif (isset($object->{$field}[(int)$language['id_lang']])) { 
         $value = $object->{$field}[(int)$language['id_lang']]; 
        } 
      foreach ($languages as $lang) { 
       if (Tools::getIsset($field . '_' . (int)$lang['id_lang']) && Tools::getValue($field . '_' . (int)$lang['id_lang']) != '') 
        $value = Tools::getValue($field . '_' . (int)$lang['id_lang']); 
      } 
        if ($field == 'description_short') { 
         $short_description_limit = Configuration::get('PS_PRODUCT_SHORT_DESC_LIMIT') 
          ? Configuration::get('PS_PRODUCT_SHORT_DESC_LIMIT') : 400; 
         $object->{$field}[(int)$language['id_lang']] = strip_tags(
          $this->clipLongText(
           $value, 
           '', 
           $short_description_limit, 
           false 
          ) 
         ); 
        } else { 
         $object->{$field}[(int)$language['id_lang']] = $value; 
        } 
       } 
      } 
     } 

     foreach ($languages as $language) { 
      $keywords = ''; 
      if (Tools::getIsset('meta_keywords_' . $language['id_lang'])) { 
       $keywords = Tools::getValue('meta_keywords_' . $language['id_lang']); 
      } elseif (isset($object->meta_keywords[$language['id_lang']])) { 
       $keywords = $object->meta_keywords[$language['id_lang']]; 
      } 
      $keywords = $this->cleanMetaKeywords(
       Tools::strtolower($keywords) 
      ); 
      $object->meta_keywords[$language['id_lang']] = $keywords; 
     } 

     $_POST['width'] = (!Tools::getIsset('width')) ? '0' : str_replace(',', '.', Tools::getValue('width')); 
     $_POST['height'] = (!Tools::getIsset('height')) ? '0' : str_replace(',', '.', Tools::getValue('height')); 
     $_POST['depth'] = (!Tools::getIsset('depth')) ? '0' : str_replace(',', '.', Tools::getValue('depth')); 
     $_POST['weight'] = (!Tools::getIsset('weight')) ? '0' : str_replace(',', '.', Tools::getValue('weight')); 

     if (Tools::getIsset('unit_price') != null) { 
      $object->unit_price = str_replace(',', '.', Tools::getValue('unit_price')); 
     } 

     $object->available_for_order = (int)Tools::getValue('available_for_order'); 
     $object->show_price = $object->available_for_order ? 1 : (int)Tools::getValue('show_price'); 
     $object->on_sale = (int)Tools::getValue('on_sale'); 
     $object->online_only = (int)Tools::getValue('online_only'); 

     $ecotaxTaxRate = Tax::getProductEcotaxRate(); 
     if ($ecotax = Tools::getValue('ecotax')) { 
      $_POST['ecotax'] = Tools::ps_round($ecotax/(1 + $ecotaxTaxRate/100), 6); 
     } 
     if (Tools::getIsset('ecotax') != null) { 
      $object->ecotax = str_replace(',', '.', Tools::getValue('ecotax')); 
     } 
     $object->add(); 
    } 
0

fand ich ein Problem in meinem Code: die Funktion Produkt von der Steuerung Admincontroller nicht ausgeführt wird, wenn ich auf klicken Sie aus dem Katalog Seite „ein Produkt hinzufügen“.

Darüber hinaus funktioniert die Funktion, wenn ich Prestashop zum Ausführen der Funktion erzwingen, aber Prestashop nicht gefällt, weil ich einen Fehler erstellen und das Modul nicht zugänglich ist.

[UPDATE 2017.01.09 um 17:35 Uhr GMT]

Derzeit ist der Code funktioniert, aber ich habe dieses Problem jetzt ... Ich denke, es geht um die Sprachparameter, wenn ich das Produkt zu erstellen, aber ich tue nicht, was ich tun muss, um dieses Problem zu lösen.

enter image description here

Verwandte Themen