Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/239.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
PrestaShop-在php上通过引用更新价格_Php_Json_Prestashop - Fatal编程技术网

PrestaShop-在php上通过引用更新价格

PrestaShop-在php上通过引用更新价格,php,json,prestashop,Php,Json,Prestashop,我每天都会收到一份JSON,上面有我必须在网站上更新的价格。我能够正确地用php阅读json,但我不知道如何更新产品的价格。我曾尝试直接修改数据库,但没有成功。目标是找到每个有特定参考的产品,通常是一个产品,但可能有一些重复,然后改变价格。我从JSON中读取了这两个数据:引用和价格。到目前为止,我创建了一个全新的php文件,正在尝试: include(dirname(__FILE__) . '/config/config.inc.php'); include(dirname(__FILE__)

我每天都会收到一份JSON,上面有我必须在网站上更新的价格。我能够正确地用php阅读json,但我不知道如何更新产品的价格。我曾尝试直接修改数据库,但没有成功。目标是找到每个有特定参考的产品,通常是一个产品,但可能有一些重复,然后改变价格。我从JSON中读取了这两个数据:引用和价格。到目前为止,我创建了一个全新的php文件,正在尝试:

include(dirname(__FILE__) . '/config/config.inc.php');
include(dirname(__FILE__) . '/init.php');

此代码没有错误,也没有任何更改。

使用产品对象来实现您的目标

foreach ($json_datos as $articulo) {
    $cod_articulo = $articulo["Cod_Articulo"];
    $precio_articulo = $articulo["PVP"];

    $product = new Product(Product::getIdByReference($cod_articulo));
    $product->price = $precio_articulo;
    $product->update();
}
这样更安全、更稳定 UPD: 对于低于1.7.6的版本,您需要定义自己的方法

include(dirname(__FILE__) . '/config/config.inc.php');

function getIdByReference($reference)
{
    if (empty($reference)) {
        return 0;
    }

    if (!Validate::isReference($reference)) {
        return 0;
    }

    $query = new DbQuery();
    $query->select('p.id_product');
    $query->from('product', 'p');
    $query->where('p.reference = \'' . pSQL($reference) . '\'');

    return Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue($query);
}

foreach ($json_datos as $articulo) {
    $cod_articulo = $articulo["Cod_Articulo"];
    $precio_articulo = $articulo["PVP"];

    $product = new Product(getIdByReference($cod_articulo));
    $product->price = $precio_articulo;
    $product->update();
}

但在这种情况下,它失去了一点意义。但是在产品对象中更新价格更安全

首先,你不应该试图通过直接操作数据库中的内容来“绕过”这样的系统。这应该使用商店系统自己的方法来定位并更新这些产品。我知道这一点,但我相信对我来说,试图了解和理解Prestashop的精髓将更加困难。实际上,其目的是能够每24小时执行一次PHP,以读取最新的json并更新价格。我正试图从PostMan运行此程序,以查看它是否有效,但我只得到一个500错误。我不知道是否会发生这种情况,因为我试图从服务器外部访问php。启用调试模式并检查日志文件以获取错误报告一个问题。创建此文件的唯一目的是由cron作业执行。如果是这种情况,那么如果在prestashop网站环境之外执行,该代码是否有效?它被放在web文件夹中,但我并不真正理解这段代码是如何工作的。我需要每24小时执行一次。您需要至少包含这些文件includedirnameFILE。”/config/config.inc.php';includedirnameFILE'/php';以访问您的prestashop环境。然后检查脚本是否可执行,并将cronjob设置为运行它,但最好的方法是创建一个简单的模块来为您执行该任务。在互联网上有很多关于如何建立它的信息
include(dirname(__FILE__) . '/config/config.inc.php');

function getIdByReference($reference)
{
    if (empty($reference)) {
        return 0;
    }

    if (!Validate::isReference($reference)) {
        return 0;
    }

    $query = new DbQuery();
    $query->select('p.id_product');
    $query->from('product', 'p');
    $query->where('p.reference = \'' . pSQL($reference) . '\'');

    return Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue($query);
}

foreach ($json_datos as $articulo) {
    $cod_articulo = $articulo["Cod_Articulo"];
    $precio_articulo = $articulo["PVP"];

    $product = new Product(getIdByReference($cod_articulo));
    $product->price = $precio_articulo;
    $product->update();
}