0

我想设置一个 cron 作业并从我将通过 ftp 上传/更新的特定 .csv 文件进行预定导入。

我想知道是否有一种简单的方法可以使用 linux 控制台命令为 X-Cart 5 设置产品导入?

4

1 回答 1

0

没有通过 linux 控制台进行导入的默认方法。但是您可以创建简单的控制台脚本并通过 cron 运行它。

代码示例(仅概念,不是您的案例的解决方案):

#!/usr/bin/env php
<?php

if ('cli' != PHP_SAPI) {
    exit (1);
}

require_once __DIR__ . DIRECTORY_SEPARATOR . 'top.inc.php';

XLite::getInstance()->run(true);

// Initialize importer
// See all possible options in classes/XLite/Logic/Import/Importer.php __construct()
$importer = new \XLite\Logic\Import\Importer(
    array(
        'warningsAccepted'      => true,
        'delimiter'             => ',',
        'ignoreFileChecking'    => true,
        'files'                 => array(
            '/full/path/to/xcart/var/import/products.csv',
            '/full/path/to/xcart/var/import/categories.csv'
        )
    )
);

// Verifiaction step
while ($importer->getStep()->valid()) {
    $importer->getStep()->current()->process();
    $importer->getStep()->next();
}

// Check warnings & errors after verification and save to log file
if($importer->hasWarnings()) {
    $warnings = \XLite\Core\Database::getRepo('XLite\Model\ImportLog')
        ->findBy(array('type' => \XLite\Model\ImportLog::TYPE_WARNING));

    \XLite\Logger::logCustom('import_warnings', var_export($warnings, true));

    //Clear warning messages
    \XLite\Core\Database::getRepo('XLite\Model\ImportLog')
        ->deleteByType(\XLite\Model\ImportLog::TYPE_WARNING);
}

if($importer->hasErrors()) {
    $errors = \XLite\Core\Database::getRepo('XLite\Model\ImportLog')
        ->findBy(array('type' => \XLite\Model\ImportLog::TYPE_ERROR));

    \XLite\Logger::logCustom('import_errors', var_export($errors, true));
}

// Import/proccess quick data for products/resize images
// This loop wont'b executed if ($importer->hasWarnings() == true && warningsAccepted == false)
// or ($importer->hasErrors() == true)
while ($importer->isNextStepAllowed()) {
    $importer->getOptions()->step = $importer->getOptions()->step + 1;
    $importer->getOptions()->position = 0;

    while ($importer->getStep()->valid()) {
      $importer->getStep()->current()->process();
      $importer->getStep()->next();
    }
}

您也可以在 X-Cart 5 中使用计划任务。要使用它,您应该创建自己的模块,其类女巫将扩展抽象类 classes/XLite/Core/Task/Base/Periodic.php

您可以在文件 classes/XLite/Module/CDev/XMLSitemap/Core/Task/GenerateSitemap.php 中找到代码示例

运行在 X-Cart 5 中注册的任务:php console.php --target=cron

于 2016-03-24T17:19:57.253 回答