Produktanzahl wird nicht aktualisiert

11

Es gibt 3 verschiedene Tabellen, in denen die Anzahl der angezeigten Produkte gespeichert ist

  • report_viewed_product_aggregated_daily
  • report_viewed_product_aggregated_monthly
  • report_viewed_product_aggregated_yearly

Wenn ich die aktuell angezeigte Anzahl eines Produkts abrufen möchte, kann ich sie aus einer dieser Tabellen abrufen. Das Problem ist jedoch, dass beim Öffnen des Produkts im Frontend keine dieser Tabellen Ergebnisse zu diesem Produkt anzeigt.

Ist es ein Magento-Problem?

Ich dachte, ich muss Magento cron so einstellen, dass diese Tabellen sofort aktualisiert werden, wenn der Benutzer das Produkt öffnet, aber es hat auch bei mir nicht funktioniert.

Muhammad Wasif
quelle
Keine Antwort erhalten :(
Muhammad Wasif
Zuerst wusste ich nicht, dass mein Ruf nach dem Start des Kopfgeldes abziehen wird: D
Muhammad Wasif

Antworten:

10

Diese Tabellen werden zur Laufzeit nicht aktualisiert

Sie müssen Refresh Statistics ausführen von:

Berichte -> Statistiken -> Statistiken aktualisieren

Wenn Sie es von cronjob ausführen möchten, folgen Sie diesem Link: /magento//a/243187/31910

Shoaib Munir
quelle
Das ist wirklich befriedigend. Vielen Dank für die Klarstellung :)
Muhammad Wasif
7

Gehen Sie zu Admin -> Reports -> Refresh Statistics, wählen Sie die Berichte aus, die Sie aktualisieren möchten, und klicken Sie dann auf die Schaltfläche "Senden".

Kehren Sie nach der Aktualisierung zum Bericht zurück, wählen Sie die erforderlichen Daten für und von aus und klicken Sie dann auf die Schaltfläche Berichte anzeigen.

Sie sollten den Bericht nach Bedarf sehen.

Wenn immer noch nichts vorhanden ist, müssen Sie möglicherweise in den report_viewed_product_*Tabellen nachsehen, ob dort tatsächlich Daten vorhanden sind.

Rk Rathod
quelle
+1 für Ihre Zeit und Mühe.
Muhammad Wasif
2

Nach der Antwort @Shoaib Munir & @Rk Rathod , aktualisieren Diese Tabellen würden nicht auf Laufzeit , so dass Sie ausführen müssen Refresh Statistik von Reports -> Statistics -> Refresh Statisticsjedem mal. Wenn Sie die Statistik jedoch nicht jedes Mal manuell aktualisieren möchten, können Sie cron dafür festlegen, damit die Statistik automatisch aktualisiert wird.

Zuerst müssen Sie das Argument reportTypes an Ihre Cron-Klasse übergeben, indem Sie di.xml wie unten verwenden (ich habe alle Argumente übergeben, die Sie gemäß Ihrer Anforderung übergeben können).

<type name="Vendor\Module\Cron\CronFile">
        <arguments>
            <argument name="reportTypes" xsi:type="array">
                <item name="sales" xsi:type="string">Magento\Sales\Model\ResourceModel\Report\Order</item>
                <item name="tax" xsi:type="string">Magento\Tax\Model\ResourceModel\Report\Tax</item>
                <item name="shipping" xsi:type="string">Magento\Sales\Model\ResourceModel\Report\Shipping</item>
                <item name="invoiced" xsi:type="string">Magento\Sales\Model\ResourceModel\Report\Invoiced</item>
                <item name="refunded" xsi:type="string">Magento\Sales\Model\ResourceModel\Report\Refunded</item>
                <item name="coupons" xsi:type="string">Magento\SalesRule\Model\ResourceModel\Report\Rule</item>
                <item name="bestsellers" xsi:type="string">Magento\Sales\Model\ResourceModel\Report\Bestsellers</item>
                <item name="viewed" xsi:type="string">Magento\Reports\Model\ResourceModel\Report\Product\Viewed</item>
            </argument>
        </arguments>
    </type>

Dann sollte in Ihrer Cron-Datei so sein.

<?php
namespace Vendor\Module\Cron;
use Magento\Reports\Model\ResourceModel\Refresh\Collection;

class CronFile extends Collection
{
    protected $logger;
    protected $reportTypes;

    public function __construct(
        \Magento\Framework\Data\Collection\EntityFactory $entityFactory,
        \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate,
        \Magento\Reports\Model\FlagFactory $reportsFlagFactory,
        \Psr\Log\LoggerInterface $logger,
        array $reportTypes
    ) {
        $this->logger = $logger;
        $this->reportTypes = $reportTypes;
        parent::__construct($entityFactory,$localeDate,$reportsFlagFactory);
    }
    /**
     * @return $this
     */
    public function execute()
    {
        $objectManager = \Magento\Framework\App\ObjectManager::getInstance();

        try {
            $codes = $this->loadData();

            foreach ($codes->_items as $codek=>$codev) {
                $objectManager->create($this->reportTypes[$codek])->aggregate();
            }
        } catch (\Magento\Framework\Exception\LocalizedException $e) {
            $this->logger->critical($e->getMessage());
        } catch (\Exception $e) {
           $this->logger->critical($e->getMessage());
        }
        return $this;
    }
}

Ich hoffe, es hilft!

Chirag Patel
quelle
+1 für Ihre Zeit und Mühe. Ich habe die erste Antwort von Shoaib Munir
Muhammad Wasif am
1
Vielen Dank für Ihre Wertschätzung :) +1 für Sie.
Chirag Patel