Модуль с заданием 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? Любые указания в правильном направлении были бы чрезвычайно полезны.

Author: Ethan Rogers, 2018-08-17

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 в вашем случае).

Не стесняйтесь задавать любые вопросы, если это необходимо.

 0
Author: Vivek Kumar, 2018-08-17 16:34:52