Saya mendapatkan kesalahan ini pada beberapa produk yang memiliki produk terkait:
Warning: Invalid argument supplied for foreach() in vendor/magento/module-catalog/Block/Product/ProductList/Related.php on line 129
Masalah ini hanya terjadi ketika cache halaman penuh dihidupkan . Sayangnya menonaktifkannya bukan opsi karena perbedaan kecepatan sangat besar (lebih dari 2 detik lebih cepat dengan cache halaman).
Saya mencoba semua yang saya tahu: menghapus tema kami, modul khusus dll.
Lingkungan: produksi, 2.1.0, pernis.
Ini adalah jejak tumpukan lengkap:
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";}
Ada ide ke mana harus mencari?
Pada baris 129 in vendor/magento/module-catalog/Block/Product/ProductList/Related.php
$this->getItems()
adalah nol:
/**
* 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;
}
Terima kasih!
magento-2.1
full-page-cache
related-products
Claudiu Creanga
sumber
sumber
Jawaban:
Di Kelas yang sama (
vendor/magento/module-catalog/Block/Product/ProductList/Related.php
) ada metode seperti yang ditunjukkan di bawah ini. Di sinilah koleksi item diatur dan kemudian digunakan dalam metode getItems () yang Anda panggil. Debug di sini dan konfirmasikan bahwa koleksi item mendapatkan beberapa hasil. Seperti yang Anda lihat beberapa filter sedang diterapkan dalam kode ini, jadi ada kemungkinan produk tidak melewati filter tersebut.sumber
Tekan saja bug ini di 2.1.7 CE.
Saya 90% yakin ini karena getIdentities () "sering" dipanggil sebelum _beforeToHtml (). Ini berarti _prepareData () tidak pernah dipanggil sehingga _itemCollection kosong. Ini masuk akal karena cache ingin tahu whats what sebelum menghasilkan html (dan seperti dicatat getIdentites () berhubungan dengan cache).
Jadi getIdentities perlu menelepon _prepareData ()
dan _prepareData () perlu mempertahankan diri dari menjalankan dua kali.
Maka semuanya baik-baik saja.
Sunting: Baru saja menemukan laporan bug yang ditutup ini https://github.com/magento/magento2/issues/5897 Harus diperbaiki di rilis mendatang.
sumber
Apa yang dapat Anda coba adalah menambahkan yang berikut ini ke file tata letak template Anda di mana blok tata letak ini didefinisikan:
Tambahkan ke bagian atas blok seperti ini:
Kode di atas berarti Anda tidak melakukan caching blok tata letak ini.
Jika ini berhasil, artinya caching tidak memungkinkan Anda menyimpan data atau ditimpa oleh hal lain yang membuatnya kosong? (menebak di sini)
sumber
coba kode ini:
sumber
Kami mengalami masalah ini. Periksa apakah produk (bukan produk terkait) kehabisan stok. Menempatkan produk dalam stok memecahkan masalah bagi kami.
sumber