Ich erhalte diesen Fehler bei einigen Produkten mit ähnlichen Produkten:
Warning: Invalid argument supplied for foreach() in vendor/magento/module-catalog/Block/Product/ProductList/Related.php on line 129
Dieses Problem tritt nur auf, wenn der Ganzseiten-Cache aktiviert ist. Leider ist das Deaktivieren nicht möglich, da der Geschwindigkeitsunterschied sehr groß ist (mehr als 2 Sekunden schneller mit Seiten-Cache).
Ich habe alles versucht, was ich weiß: Entfernen unseres Themas, benutzerdefinierter Module usw.
Umwelt: Produktion, 2.1.0, Lack.
Dies ist der vollständige Stack-Trace:
a:4:{i:0;s:190:"Warning: Invalid argument supplied for foreach() in vendor/magento/module-catalog/Block/Product/ProductList/Related.php on line 129";i:1;s:5441:"#0 vendor/magento/module-catalog/Block/Product/ProductList/Related.php(129): Magento\Framework\App\ErrorHandler->handler(2, 'Invalid argumen...', '/home/11396-492...', 129, Array)
#1 var/generation/Magento/Catalog/Block/Product/ProductList/Related/Interceptor.php(37): Magento\Catalog\Block\Product\ProductList\Related->getIdentities()
#2 vendor/magento/module-page-cache/Model/Layout/LayoutPlugin.php(71): Magento\Catalog\Block\Product\ProductList\Related\Interceptor->getIdentities()
#3 vendor/magento/framework/Interception/Interceptor.php(152): Magento\PageCache\Model\Layout\LayoutPlugin->afterGetOutput(Object(Magento\Framework\View\Layout\Interceptor), ' <script>\n ...')
#4 var/generation/Magento/Framework/View/Layout/Interceptor.php(494): Magento\Framework\View\Layout\Interceptor->___callPlugins('getOutput', Array, Array)
#5 vendor/magento/framework/View/Result/Page.php(243): Magento\Framework\View\Layout\Interceptor->getOutput()
#6 vendor/magento/framework/View/Result/Layout.php(164): Magento\Framework\View\Result\Page->render(Object(Magento\Framework\App\Response\Http\Interceptor))
#7 vendor/magento/framework/Interception/Interceptor.php(74): Magento\Framework\View\Result\Layout->renderResult(Object(Magento\Framework\App\Response\Http\Interceptor))
#8 vendor/magento/framework/Interception/Chain/Chain.php(70): Magento\Framework\View\Result\Page\Interceptor->___callParent('renderResult', Array)
#9 vendor/magento/framework/Interception/Chain/Chain.php(63): Magento\Framework\Interception\Chain\Chain->invokeNext('Magento\\Framewo...', 'renderResult', Object(Magento\Framework\View\Result\Page\Interceptor), Array, 'result-varnish-...')
#10 vendor/magento/module-page-cache/Model/Controller/Result/VarnishPlugin.php(74): Magento\Framework\Interception\Chain\Chain->Magento\Framework\Interception\Chain\{closure}(Object(Magento\Framework\App\Response\Http\Interceptor))
#11 vendor/magento/framework/Interception/Chain/Chain.php(67): Magento\PageCache\Model\Controller\Result\VarnishPlugin->aroundRenderResult(Object(Magento\Framework\View\Result\Page\Interceptor), Object(Closure), Object(Magento\Framework\App\Response\Http\Interceptor))
#12 vendor/magento/framework/Interception/Chain/Chain.php(63): Magento\Framework\Interception\Chain\Chain->invokeNext('Magento\\Framewo...', 'renderResult', Object(Magento\Framework\View\Result\Page\Interceptor), Array, 'result-builtin-...')
#13 vendor/magento/module-page-cache/Model/Controller/Result/BuiltinPlugin.php(67): Magento\Framework\Interception\Chain\Chain->Magento\Framework\Interception\Chain\{closure}(Object(Magento\Framework\App\Response\Http\Interceptor))
#14 vendor/magento/framework/Interception/Chain/Chain.php(67): Magento\PageCache\Model\Controller\Result\BuiltinPlugin->aroundRenderResult(Object(Magento\Framework\View\Result\Page\Interceptor), Object(Closure), Object(Magento\Framework\App\Response\Http\Interceptor))
#15 vendor/magento/framework/Interception/Interceptor.php(138): Magento\Framework\Interception\Chain\Chain->invokeNext('Magento\\Framewo...', 'renderResult', Object(Magento\Framework\View\Result\Page\Interceptor), Array, 'aw_layerednav_r...')
#16 app/code/Aheadworks/Layerednav/Model/Plugin/Result.php(75): Magento\Framework\View\Result\Page\Interceptor->Magento\Framework\Interception\{closure}(Object(Magento\Framework\App\Response\Http\Interceptor))
#17 vendor/magento/framework/Interception/Interceptor.php(142): Aheadworks\Layerednav\Model\Plugin\Result->aroundRenderResult(Object(Magento\Framework\View\Result\Page\Interceptor), Object(Closure), Object(Magento\Framework\App\Response\Http\Interceptor))
#18 var/generation/Magento/Framework/View/Result/Page/Interceptor.php(130): Magento\Framework\View\Result\Page\Interceptor->___callPlugins('renderResult', Array, Array)
#19 vendor/magento/framework/App/Http.php(139): Magento\Framework\View\Result\Page\Interceptor->renderResult(Object(Magento\Framework\App\Response\Http\Interceptor))
#20 vendor/magento/framework/App/Bootstrap.php(258): Magento\Framework\App\Http->launch()
#21 index.php(39): Magento\Framework\App\Bootstrap->run(Object(Magento\Framework\App\Http))
#22 {main}";s:3:"url";s:15:"/pecan-pie.html";s:11:"script_name";s:10:"/index.php";}
Irgendwelche Ideen, wo Sie suchen?
In Zeile 129 vendor/magento/module-catalog/Block/Product/ProductList/Related.php
$this->getItems()
ist null:
/**
* Return identifiers for produced content
*
* @return array
*/
public function getIdentities()
{
$identities = [];
var_dump($this->getItems());
foreach ($this->getItems() as $item) {
$identities = array_merge($identities, $item->getIdentities());
}
return $identities;
}
Vielen Dank!
magento-2.1
full-page-cache
related-products
Claudiu Creanga
quelle
quelle
Antworten:
In derselben Klasse (
vendor/magento/module-catalog/Block/Product/ProductList/Related.php
) gibt es eine Methode wie unten gezeigt. Hier wird die Elementauflistung festgelegt und dann in der aufgerufenen Methode getItems () verwendet. Hier debuggen und bestätigen, dass die Artikelsammlung einige Ergebnisse liefert. Wie Sie sehen, werden in diesem Code einige Filter angewendet, sodass die Möglichkeit besteht, dass Produkte diese Filter nicht passieren.quelle
Schlagen Sie einfach diesen Fehler in 2.1.7 CE.
Ich bin zu 90% sicher, dass dies daran liegt, dass getIdentities () "oft" vor _beforeToHtml () aufgerufen wird. Dies bedeutet, dass _prepareData () niemals aufgerufen wird, sodass _itemCollection leer ist. Dies ist ein wenig sinnvoll, da der Cache wissen möchte, was passiert, bevor er den HTML-Code generiert (und wie erwähnt ist getIdentites () cachebezogen).
GetIdentities muss also _prepareData () aufrufen
und _prepareData () muss sich davor schützen, zweimal ausgeführt zu werden.
Dann ist alles in Ordnung.
Bearbeiten: Habe gerade diesen geschlossenen Fehlerbericht gefunden https://github.com/magento/magento2/issues/5897 Sollte in zukünftigen Versionen behoben sein.
quelle
Sie könnten versuchen, Ihrer Vorlagenlayoutdatei, in der dieser Layoutblock definiert ist, Folgendes hinzuzufügen:
Fügen Sie es wie folgt oben in den Block ein:
Der obige Code bedeutet, dass Sie diesen Layoutblock nicht zwischenspeichern.
Wenn dies funktioniert, bedeutet dies, dass Sie die Daten durch das Caching nicht behalten können, oder dass sie durch etwas anderes überschrieben werden, das sie leer macht? (hier raten)
quelle
Versuchen Sie diesen Code:
quelle
Wir sind auf dieses Problem gestoßen. Überprüfen Sie, ob das Produkt (nicht die verwandten Produkte) nicht vorrätig ist. Das Produkt auf Lager zu haben, löste das Problem für uns.
quelle