Ежедневное обновление инвентаря через удаленный файл FTP - PullRequest
0 голосов
/ 16 декабря 2011

Прошло 2 дня, и я наткнулся на множество учебных пособий, видеороликов, расширений, в которых объясняется, как делать ежедневные обновления для моих продуктов, но ни один из них не работает.

У меня есть веб-сайт, на котором около 3000 товаров с атрибутами и все. Мой поставщик обновляет файл инвентаризации ежедневно, а обновленный файл инвентаризации хранится на удаленном FTP-сервере, к которому у меня есть доступ.

Мне нужно следующее:

  1. Ежедневное обновление инвентаря, цены, количество и т. Д.
  2. Удалить элементы с количеством 0
  3. Добавление новых предметов в соответствии с обновленным файлом инвентаря

Я уверен, что у кого-то есть ответ на мои вопросы. Поэтому, пожалуйста, вернись ко мне как можно скорее.

Ответы [ 2 ]

0 голосов
/ 18 декабря 2011

Здесь я поделюсь только обновлением инвентаря (но это не очень хороший способ). Вы должны создать файл с разделителями табуляции следующим образом:

SKU QTY
978 34
633 0

Затем вы можете создать задание cron для запуска этого скрипта.

<?php
error_reporting(E_ALL);
ini_set('display_errors', '1');
set_time_limit(0);
ini_set('memory_limit','1024M');

include('app/Mage.php');
Mage::App('default');

//get magento db connection for query
$db_query = Mage::getSingleton('core/resource')->getConnection('core_read');

//get magento db connection for update, add, delete sql statements
$db_update = Mage::getSingleton('core/resource')->getConnection('core_write');

//mail receipent
$to = 'youremail@yoursite.com';

if ($handle = opendir('./var/export'))
{
    while (false !== ($file = readdir($handle)))
    {
        $sku_success = '';
        if ($file != '.' && $file != '..')
        {
            $filename = './var/export/'.$file;
            $handle_file = fopen($filename,'r');
            $counter = 1;
            while (($data = fgetcsv($handle_file, 1000, '\t'))!== FALSE) //read tab delimited
            {
                if($counter!=1)
                {
                    $sku= $data[0];
                    $qty = $data[1];

                    $exists = $db_query->query("SELECT COUNT(sku) cnt FROM catalog_product_entity WHERE sku = '$sku' LIMIT 1");
                    $found = (($exists->fetchObject()->cnt) > 0) ? true : false;

                    if ($found == true) //product found, update
                    {
                        $entity_id = getEntityIdBySku($db_query, $sku);
                        updateStockQty ($db_update, $entity_id, $qty);
                        echo 'product $sku inventory updated?';
                        $sku_success.= $sku;
                    } else {
                        //sku not found, notify by email
                        $body = "SKU#:".$sku." of ".$file." with a qty of ".$qty." was not found in the the inventory";
                        sendMsg("SKU#:".$sku." not found!",$to,$body);
                    }

                }
                $counter++;
            }

            fclose($handle_file);

            $body = "<strong>SKU?S IMPORTED</strong>".$sku_success."<br/>";
            sendMsg($file." successfully imported!",$to,$body);

        }
    }
    closedir($handle);
}

function getEntityIdBySku($db_connection, $sku) //get entity id by its sku
{
    $entity_row = $db_connection->query("SELECT entity_id FROM catalog_product_entity p_e WHERE p_e.sku = '$sku'")->fetchObject();
    $entity_id  = $entity_row->entity_id;
    return $entity_id;
}

function updateStockQty($db_connection, $entity_id, $qty) //updates the stock quantity
{
     $db_connection->query("UPDATE cataloginventory_stock_item s_i, cataloginventory_stock_status s_s
         SET   s_i.qty = '$qty', s_i.is_in_stock = IF('$qty'>0, 1,0),
               s_s.qty = '$qty', s_s.stock_status = IF('$qty'>0, 1,0)
         WHERE s_i.product_id = '$entity_id' AND s_i.product_id = s_s.product_id ");
}

function sendMsg($subject, $to, $body)//sends email
{
    $headers  = 'MIME-Version: 1.0' . '\n';
    $headers .= 'Content-type: text/html; charset=iso-8859-1'. '\n';
    $headers .= 'To: '.$to. '\n';
    $headers .= 'From: webmaster@yoursite.com'. '\n';

    if (mail($to, $subject, $body,$headers))
    {
        echo('Message sent!');
    } else {
        echo('Message failed.');
    }

}
?>  

Сценарий предоставлен Deepcodeonline

0 голосов
/ 16 декабря 2011

Fisrt, от "Удалить предметы, у которых есть количество 0", я думаю, что вы хотите установить товары как "нет в наличии", когда инвентарь уменьшен до 0. Это обрабатывается автоматически Magento после обновления инвентаря.

Встроенная функция импорта / экспорта должна соответствовать вашим требованиям.

Еще несколько уроков, если вы не возражаете:
Учебник. Использование профилей импорта / экспорта Magento
Как добавлять / редактировать / удалять продукты с помощью инструмента импорта / экспорта

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...