Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在Prestashop 1.6.10中从API外部添加产品?_Php_Oop_Prestashop - Fatal编程技术网

Php 在Prestashop 1.6.10中从API外部添加产品?

Php 在Prestashop 1.6.10中从API外部添加产品?,php,oop,prestashop,Php,Oop,Prestashop,目前,我使用外部API为管理面板中的Prestashop 1.6.10编写了一个模块,我的问题是我不知道如何在后台的数据库中添加产品 这是我写的代码: public function Product() { if (empty($_GET['product'])) { return false; } switch($_GET['product']) { case 'add' : $product = new Pro

目前,我使用外部API为管理面板中的Prestashop 1.6.10编写了一个模块,我的问题是我不知道如何在后台的数据库中添加产品

这是我写的代码:

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;
}
我使用“产品”对象,但它不起作用,我不知道为什么:(


有人能帮帮我吗?

你应该使用
Product
类而不是
ProductCore

save
功能足以将产品保存在数据库中,之后无需使用
add
功能

如果产品值不正确,则会显示错误。但应首先激活调试模式:


祝你好运。

尝试使用以下代码

{
        $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();
    }

我在代码中发现了一个问题:当我从目录页面单击“添加产品”时,控制器adminController没有执行函数Product

此外,如果我强制Prestashop执行该函数,则该函数可以工作,但Prestashop不喜欢这样,因为我创建了一个bug,并且无法访问该模块

[于2017年9月1日17:35 GMT更新]

目前,代码正在运行,但我现在有这个问题…我认为这是关于我创建产品时的语言参数,但我没有做我需要做的来解决这个问题