logshub/ecommerce-synch

此包的最新版本(1.1.3)没有可用的许可证信息。

1.1.3 2019-05-29 10:11 UTC

This package is auto-updated.

Last update: 2024-09-29 05:42:16 UTC


README

Schema

这不是任何电子商务平台的插件。这是一个独立的应用程序,它将商店数据库中的数据(通过特定平台模块)处理到其他系统中,例如LogsHub.com搜索服务。

支持的电子商务平台

  • Magento 1 (1.6.2.0 - 1.9.4.1)
  • Magento 2 (2.2 - 2.3.0)
  • WooCommerce (5.1.1)
  • PrestaShop (1.6.1.10 - 1.7.5.1)
  • OpenCart (2.1.0.2 - X)
  • osCommerce (2.3.4.1 - 2.4.2)
  • Sylius (1.4.3)

其他版本可能也适用,但尚未测试。

它是如何工作的

Cron 执行同步命令。它读取配置文件,确定输入模块。它执行其 SQL SELECT 语句并将结果保存到 CSV 文件中(产品和类别)。输出模块将 CSV 数据推送到远程系统,例如 LogsHub.com 搜索服务。

要求

安装(简单)

这种方法对小和中型商店来说是可以接受的。它更容易设置,但稍微不太优化,因为 CSV 文件将由 PHP 代码而不是数据库本身生成。

  1. composer require logshub/ecommerce-synch
  2. cp ecommerce-synch/config.example.ini ecommerce-synch/config.ini
  3. 设置你的 ecommerce-synch/config.ini:logshub 凭证、输入模块和数据库连接。设置 generate_csv_by_database = 0(简单配置)。
  4. 在 crontab 中添加: php vendor/bin/ecommerce-synch synch -c config.ini。频率取决于配置(见 check_update_dates)。

示例

cd /var/www/
mkdir ecommerce-synch
cd ecommerce-synch/
composer require logshub/ecommerce-synch
cp vendor/logshub/ecommerce-synch/config.example.ini config.ini
# setup credentials + input module
nano config.ini
# test synchronization
php /var/www/ecommerce-synch/vendor/bin/ecommerce-synch synch -c /var/www/ecommerce-synch/config.ini
# setup cron
crontab -e
# paste similar to the following:
5 * * * * php /var/www/ecommerce-synch/vendor/bin/ecommerce-synch synch -c /var/www/ecommerce-synch/config.ini > /tmp/ecommerce-synch.log

安装(实验性,高级)

这是一种更高级的设置,但更优化,因为 CSV 文件将由数据库本身而不是 PHP 代码生成。

  1. 确保您在具有数据库的同一服务器上运行此代码 - 需要访问 /var/lib/mysql-files/
  2. 您的 DB 用户必须在数据库中具有 FILE 权限(见下文)。
  3. 使用此异常处理“简单”安装步骤: generate_csv_by_database = 1

AD 2

GRANT FILE ON *.* TO myuser;
FLUSH PRIVILEGES;

如何创建输入模块?

可能存在您的数据库结构略有不同于标准结构的情况。您可以创建自己的模块,以匹配您的数据库结构。

composer require logshub/ecommerce-synch
# setup files like below...
composer dump-autoload

示例项目结构

├── composer.json
├── modules.php
└── src
    └── Module
        └── Input
            └── MyStoreCom.php

composer.json 的内容

{
    "require": {
        "logshub/ecommerce-synch": "dev-master"
    },
    "autoload": {
        "files": [
            "modules.php"
        ],
        "psr-4": {
            "MyStore\\": "src"
        }
    }
}

modules.php 的内容,该文件由 composer 自动加载。

<?php
use Logshub\EcommerceSynch\Module\Registrar;

Registrar::registerInput(new \MyStore\Module\Input\MyStoreCom());

src/Module/Input/MyStoreCom.php 文件的内容,其中包含您的自定义模块。

<?php
namespace MyStore\Module\Input;

class MyStoreCom extends \Logshub\EcommerceSynch\Module\Input\ModuleAbstract
{
    /**
     * @return Name that 
     */
    public function getName()
    {
        return 'my-store.com';
    }

    public function getProductsSql(\DateTime $time = null)
    {
        $sql = "SELECT 'id', 'name', 'url', 'url_image', 'price', 'price_old', 'currency', 'description', 'categories', 'sku'";
        // UNION
        // SELECT p.id, p.name, p.url, p.url_image, p.price, p.price_old, p.currency, p.description, p.categories, p.sku FROM product AS p WHERE p.enabled = 1

        // if (!empty($time)) {
        //     $sql .= " AND p.updated_at >= '".$time->format('Y-m-d H:i:s')."' ";
        // }

        return $sql;
    }

    public function getCategoriesSql(\DateTime $time = null)
    {
        $sql = "SELECT 'id', 'name', 'url', 'url_image'";
        // UNION
        // SELECT c.id, c.name, c.url, c.url_image FROM categories AS c WHERE c.enabled = 1

        // if (!empty($time)) {
        //     $sql .= " AND c.updated_at >= '".$time->format('Y-m-d H:i:s')."' ";
        // }

        return $sql;
    }

    public function getCurrentIdsSql()
    {
        return 'SELECT 1';
        // SELECT p.id FROM product AS p WHERE p.enabled = 1
        // UNION
        // SELECT c.id FROM categories AS c WHERE c.enabled = 1
    }
}

现在,您可以在 config.ini 文件中配置 input.module 以使用您的自定义模块(从 MyStoreCom::getName)。

[input]
module = "my-store.com"

如何在同步之前更改数据?

在您的自定义模块中创建 getProductCsvRowCallback 方法。请参阅 src/Module/Input/OpenCart.php 文件中的示例: OpenCart::getProductCsvRowCallbackOpenCart::onCsvRow

故障排除

  • 最后更新的时间计算不正确?请确保 PHP 和数据库侧的时区相同

TODO

  • 清除旧 CSV 文件(新命令)
  • 数据库转储的回调

要做的输入模块