Модуль с заданием cron для извлечения всех продуктов, для которых пользовательский атрибут имеет значение true
Я новичок в разработке модулей Magento, и мне нужна помощь в начале работы. Моя цель относительно проста: я хотел бы создать модуль, который извлекает все продукты с пользовательским атрибутом "amazon_ready", установленным в значение true, сохраняет их в файл, а затем устанавливает этот атрибут для всех этих продуктов обратно в значение false. Я бы хотел, чтобы это происходило каждые 24 часа.
До сих пор я настраивал простой модуль cron, используя найденный пример здесь.
<?php
namespace SuttersMill\AmazonCron\Cron;
use \Psr\Log\LoggerInterface;
class Test {
protected $logger;
public function __construct(LoggerInterface $logger)
{
$this->logger = $logger;
}
/**
* Write to system.log
*
* @return void
*/
public function execute()
{
$this->logger->info('Cron Works');
// Code to pull in product entities from datastore.
}
}
Как мне получить все продукты, для которых пользовательский атрибут имеет значение true? Любые указания в правильном направлении были бы чрезвычайно полезны.
1 answers
Вам нужно будет получить коллекцию продуктов и отфильтровать ее на основе вашего пользовательского атрибута. Вы также можете извлечь большинство (но не все) атрибутов из элементов коллекции фильтров.
Попробуйте выполнить следующий код;
<?php
namespace SuttersMill\AmazonCron\Cron;
use \Psr\Log\LoggerInterface;
class Test {
protected $logger;
protected $collectionFactory;
public function __construct(LoggerInterface $logger,\Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $collectionFactory)
{
$this->logger = $logger;
$this->collectionFactory = $collectionFactory;
}
/**
* Write to system.log
*
* @return void
*/
public function execute()
{
$this->logger->info('Cron Works');
// Code to pull in product entities from datastore.
$productCollection = $this->collectionFactory->create();
/** Apply filters here */
$filteredProducts = $productCollection->addAttributeToSelect('*')->addAttributeToFilter('attribute_code',attribute_value);
foreach($filteredProducts as $product){
$this->logger->info(' ' .$product->getName() . ' ' );
}
}
}
Выше следует напечатать название продуктов, которые вы хотите видеть в своих журналах, после того как вы замените код атрибута на код атрибута вашего пользовательского атрибута и значение атрибута на требуемое значение (true в вашем случае).
Не стесняйтесь задавать любые вопросы, если это необходимо.