prestashop - 从命令行更新 Prestashop 中的产品数量
问题描述
我在 Prestashop 1.7.6 中创建了一个模块,它通过两种方式更新产品库存:
在后台(模块的设置)它完美地工作
每天晚上从服务器的 cron 使用由这种命令行调用的声明服务:
php /var/www/MyPrestashopSite/bin/console mymodule:update updateProducts --no-debug
对于我创建的许多其他服务,我使用它可以完美运行,但是对于这个,我使用 Prestashop 中的“新”库存管理,当我使用 \StockAvailable 方法时,它总是调用上下文并触发错误StockManagementRepository 第 130 行:“确定活动语言需要上下文员工实例。” 此错误阻止我的模块在上下文之外更新产品库存。
在我的代码中,我尝试使用以下方法,以最简洁的方式获取和修改库存:
\StockAvailable::getQuantityAvailableByProduct(...)
\StockAvailable::setQuantity(...)
\StockAvailable::updateQuantity(...)
请注意,我强制 $shopId 为 1 以避免尽可能多地获取上下文。
你知道如何在 Prestashop 中以一种干净的方式更新库存(不仅仅是修改库存、产品属性和产品表)从 cron (脱离上下文并且没有员工连接),并且不调用 Prestashop 网络服务?
谢谢你。
解决方案
最简单的方法是为 cron 指定 FronTController 或 .php 文件并在其中进行更改。
如果是 .php 文件,您应该包含 PrestaShop 配置文件。例如,如果您的文件位于模块文件夹中:modules/mymodulename/cron/stock-update.php
<?php
require_once dirname(__FILE__) . '/../../../config/config.inc.php';
//do the stuff
并且感谢 config.inc.php,您也可以使用 Context 对象
$context = Context::getContext();
您甚至可以通过以下方式在上下文菜单中设置员工
$context = Context::getContext();
$context->employee = new Employee($idEmployee);
推荐阅读
- flutter - 为什么我的 Flutter BottomSheet 给我一个 GestureDetector 错误?
- python - 如何处理numpy中的random.choice
- java - 使用google sheet api java基于列对范围进行排序
- r - 更改 R 中的堆积条形图顺序
- python - 如何在python中对多个列表进行排序
- django - Django 正在删除并重新创建模型而不是重命名
- c# - 将 POCO 类引入现有解决方案
- python - Django server running but can't hit url
- spring-boot - 如果 Mono 为空,则创建未找到的 ServerResponse
- android - 我怎样才能对这些句子进行排序