logshub / ecommerce-synch
此包的最新版本(1.1.3)没有可用的许可证信息。
1.1.3
2019-05-29 10:11 UTC
Requires
- logshub/search-client-php: ^1.3
- monolog/monolog: ^1.24
- symfony/console: ^4.2
- symfony/process: ^4.2
Requires (Dev)
- phpunit/phpunit: ^8.1
README
这不是任何电子商务平台的插件。这是一个独立的应用程序,它将商店数据库中的数据(通过特定平台模块)处理到其他系统中,例如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 搜索服务。
要求
- PHP 7 (PDO, pdo_mysql)
- Composer - https://composer.php.ac.cn/
安装(简单)
这种方法对小和中型商店来说是可以接受的。它更容易设置,但稍微不太优化,因为 CSV 文件将由 PHP 代码而不是数据库本身生成。
composer require logshub/ecommerce-synchcp ecommerce-synch/config.example.ini ecommerce-synch/config.ini- 设置你的
ecommerce-synch/config.ini:logshub 凭证、输入模块和数据库连接。设置generate_csv_by_database = 0(简单配置)。 - 在 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 代码生成。
- 确保您在具有数据库的同一服务器上运行此代码 - 需要访问
/var/lib/mysql-files/。 - 您的 DB 用户必须在数据库中具有
FILE权限(见下文)。 - 使用此异常处理“简单”安装步骤:
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::getProductCsvRowCallback、OpenCart::onCsvRow。
故障排除
- 最后更新的时间计算不正确?请确保 PHP 和数据库侧的时区相同
TODO
- 清除旧 CSV 文件(新命令)
- 数据库转储的回调
要做的输入模块
- ShopWare
- Ubercart - https://www.drupal.org/project/ubercart
- Spree - https://github.com/spree/spree
- PimCore - https://pimcore.com/en
