PHP Shopify интеграция - изтриване на вариант

Работя върху PHP приложение, интегрирано за shopify. По принцип информацията за продукта трябва да бъде синхронизирана между "магазина" и приложението. Вътре в продуктите имаме варианти (подобни на подпродукти). Shopify използва за изпращане на уеб кукички с json данни, за да докладва тези промени. Всеки път, когато променя/добавя/изтривам вариант, shopify изпраща уебкукичка за „актуализация на продукта“, която променя само json съдържанието. Това е пример:

{
...
    "variants": [{
        "id": 279656846,
        "position": 1,
        "price": "80.00",
        "product_id": 123022448,
        "sku": "1000",
        "option1": "30 cm",
        "inventory_quantity": 10
    },
    {
        "id": 291321287,
        "position": 2,
        "price": "15.00",
        "product_id": 123022448,
        "sku": "1003",
        "option1": "15 cm",
        "inventory_quantity": 23
    }],
...
}

Ако създам нов вариант, той ми изпраща „актуализация на продукта“ с текущо състояние и има новия вариант в json. По същия начин, ако изтрия, той ми изпраща само „актуализация на продукта“ с текущо състояние, но без изтрития вариант в json.

Създадох следния код, който може да третира правилно регистъра на промените/добавянето:

foreach ($jsonArr['variants'] as $rows) {

    $variant = $rows['option1'];
    $sku = $rows['sku'];
    $salesPrice = $rows['price'];
    $stockQty = $rows['inventory_quantity'];

    $idVar = $rows['id'];

    $dupchk = mysql_query("SELECT * FROM `variants` WHERE `idVar`='$idVar'",$con) or die (mysql_error());
    $num_rows = mysql_num_rows($dupchk);

    if ($num_rows > 0) {

        $sql = "UPDATE `variants` SET `variant`='$variant',`sku`='$sku',`salesPrice`='$salesPrice',`stockQty`='$stockQty' WHERE `idVar`='$idVar'";

        if (!mysql_query($sql,$con)) {
            die('Error: ' . mysql_error());
        }

    }

    else {

        $sql = "INSERT INTO `variants`(`idVariant`, `idProduct`, `variant`, `sku`, `salesPrice`, `stockQty`, `comments`, `idVar`) VALUES ('','$idProduct','$variant','$sku','$salesPrice','$stockQty','','$idVar')";

        if (!mysql_query($sql,$con)) {
            die('Error: ' . mysql_error());
        }

    }

}

Проблемът е, че този код не обработва случай на вариант за изтриване. Опитах се да го направя, но досега създавах само „голям объркващ“ код, който не можеше да работи. Моля, дайте съвет, ако имате някакво предложение за интелигентен начин за справяне с него.


person Valladão    schedule 01.04.2013    source източник


Отговори (1)


За решаване използвах следния код:

//Variable to count variant update or create
$var_count = 0;

foreach ($jsonArr['variants'] as $rows) {

    $variant = $rows['option1'];
    $sku = $rows['sku'];
    $salesPrice = $rows['price'];
    $stockQty = $rows['inventory_quantity'];

    $idVar = $rows['id'];

    $dupchk = mysql_query("SELECT * FROM `variants` WHERE `idVar`='$idVar'",$con) or die (mysql_error());
    $num_rows = mysql_num_rows($dupchk);

    if ($num_rows > 0) {

        $sql = "UPDATE `variants` SET `variant`='$variant',`sku`='$sku',`salesPrice`='$salesPrice',`stockQty`='$stockQty' WHERE `idVar`='$idVar'";
        $var_count++;


        if (!mysql_query($sql,$con)) {
            die('Error: ' . mysql_error());
        }

    }

    else {

        $sql = "INSERT INTO `variants`(`idVariant`, `idProduct`, `variant`, `sku`, `salesPrice`, `stockQty`, `comments`, `idVar`) VALUES ('','$idProduct','$variant','$sku','$salesPrice','$stockQty','','$idVar')";
        $var_count++;

        if (!mysql_query($sql,$con)) {
            die('Error: ' . mysql_error());
        }

    }

}

//Start checking to erase variant if needed
$result = mysql_query("SELECT `idVar` FROM products NATURAL JOIN variants WHERE `idShopify`='$idShopify'",$con);
$num_rows = mysql_num_rows($result);

if ($num_rows>$var_count) {

    while($row = mysql_fetch_array($result))
        {

            $clear = 0;

            foreach ($jsonArr['variants'] as $rows) {

                if ($rows['id']==$row['idVar']) {
                    $clear++;
                }

            }

            if ($clear==0) {

                $idVar = $row['idVar'];
                $sql = "DELETE FROM `variants` WHERE `idVar`='$idVar'";

                if (!mysql_query($sql,$con)) {
                    die('Error: ' . mysql_error());
                }

            }

        }

}

Това не е елегантно, но работи. Чувствайте се свободни да предлагате подобрения на кода.

person Valladão    schedule 22.04.2013