পণ্য সম্পর্কিত পৃষ্ঠায় ত্রুটি যখন আপনার সম্পর্কিত পণ্য থাকে এবং পূর্ণ পৃষ্ঠার ক্যাশে চালু থাকে


16

আমি সম্পর্কিত পণ্য আছে এমন কিছু পণ্যগুলিতে এই ত্রুটিটি পেয়েছি:

Warning: Invalid argument supplied for foreach() in vendor/magento/module-catalog/Block/Product/ProductList/Related.php on line 129

এই পৃষ্ঠাটি কেবল তখনই ঘটে যখন পূর্ণ পৃষ্ঠা ক্যাশে চালু থাকে। দুর্ভাগ্যক্রমে এটি অক্ষম করা কোনও বিকল্প নয় কারণ গতির পার্থক্য বিশাল (পৃষ্ঠা ক্যাশে সহ 2 সেকেন্ডেরও বেশি দ্রুত)।

আমি আমার জানা সমস্ত কিছুই চেষ্টা করেছি: আমাদের থিম, কাস্টম মডিউলগুলি অপসারণ করা etc.

পরিবেশ: উত্পাদন, ২.১.০, বার্নিশ।

এটি সম্পূর্ণ স্ট্যাক ট্রেস:

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";}

কোন ধারণা কোথায় তাকান?

129 ইন লাইনে vendor/magento/module-catalog/Block/Product/ProductList/Related.php $this->getItems()শূন্য:

  /**
     * 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;
    } 

ধন্যবাদ!


আপনি কি আপনার মডিউলে সম্পর্কিত.এফপি পুনর্লিখন করেছেন?
রাকেশ জেসাদিয়া

@ রাকেশ নং। শুধু সব কিছু গ্রেপ। ম্যাজেন্টো এক এবং পরীক্ষা ছাড়া কোনও সম্পর্কিত শ্রেণি নেই।
ক্লাদিউ ক্রেঙ্গা

1
মনে হচ্ছে এই ত্রুটিটি কেবল তখনই ঘটে যখন ক্যাশে চালু থাকে
স্টেভি জি

1
সুতরাং আপনি যখন একটি কলাম লেআউট থেকে 2 টি কলাম লেআউট থেকে একক কলাম বিন্যাসে পণ্য দেখার সুযোগ পাবেন তখন এটি এই ত্রুটি ঘটায়
স্টিভি জি

আপনার উত্তর থাকলে দয়া করে আপনার প্রশ্নের উত্তর দিন
স্টিভি জি

উত্তর:


2

একই ক্লাসে ( vendor/magento/module-catalog/Block/Product/ProductList/Related.php) নীচে দেখানো মত একটি পদ্ধতি আছে। এই স্থানে আইটেম সংগ্রহটি সেট করা আছে এবং তারপরে আপনি কল করছেন getItems () পদ্ধতিতে ব্যবহৃত হবে। এখানে ডিবাগ করুন এবং আইটেম সংগ্রহটি নিশ্চিত করুন কিছু ফলাফল পাচ্ছে। আপনি দেখতে পাচ্ছেন যে এই কোডে কিছু ফিল্টার প্রয়োগ করা হচ্ছে, সুতরাং এমন সম্ভাবনা রয়েছে যে পণ্যগুলি সেই ফিল্টারগুলির মধ্য দিয়ে যাচ্ছে না।

/**
     * @return $this
     */
    protected function _prepareData()
    {
        $product = $this->_coreRegistry->registry('product');
        /* @var $product \Magento\Catalog\Model\Product */

        $this->_itemCollection = $product->getRelatedProductCollection()->addAttributeToSelect(
            'required_options'
        )->setPositionOrder()->addStoreFilter();

        if ($this->moduleManager->isEnabled('Magento_Checkout')) {
            $this->_addProductAttributesAndPrices($this->_itemCollection);
        }
        $this->_itemCollection->setVisibility($this->_catalogProductVisibility->getVisibleInCatalogIds());

        $this->_itemCollection->load();

        foreach ($this->_itemCollection as $product) {
            $product->setDoNotUseCategoryId(true);
        }

        return $this;
    }

1

মাত্র ২.১..7 খ্রিস্টাব্দে এই বাগটি চাপুন।

আমি 90% নিশ্চিত এটি কারণ কারণ getIdentities () "প্রায়শই" বলা হয় _পূর্বকোহটিএমটিএল () এর আগে। এর অর্থ _প্রেপারডেটা () কখনই বলা হয় না তাই _item Colલેક્શન খালি থাকে। এটি কিছুটা অর্থবহ করে তোলে কারণ এইচটিএমএল তৈরি করার আগে ক্যাশে কী জানতে চায় (এবং যেমনটি উল্লিখিত getIdentites () ক্যাশে সম্পর্কিত)।

সুতরাং getIdentities _ _paredata () কল করতে হবে

public function getIdentities()
{
    $this->_prepareData();

এবং _প্রিয়ারডেটা () দুবার চালানো থেকে নিজেকে রক্ষা করতে হবে।

protected function _prepareData()
{
    if($this->_itemCollection)
        return $this;

তাহলে সব ঠিক আছে।

সম্পাদনা: সবেমাত্র এই বন্ধ হওয়া বাগ রিপোর্টটি পাওয়া গেছে https://github.com/magento/magento2/issues/5897 ভবিষ্যতের প্রকাশে স্থির করা উচিত।


0

আপনি যা চেষ্টা করতে পারেন তা হ'ল নিম্নলিখিতটি আপনার টেম্পলেট লেআউট ফাইলটিতে যুক্ত করুন যেখানে এই লেআউট ব্লকটি সংজ্ঞায়িত করা হয়েছে:

<action method="unsetData"><key>cache_lifetime</key></action>
<action method="unsetData"><key>cache_tags</key></action>

এটি এর মতো ব্লকের শীর্ষে যুক্ত করুন:

<module_index_index>
     <action method="unsetData"><key>cache_lifetime</key></action>
     <action method="unsetData"><key>cache_tags</key></action>
     // the actions that are defined
</module_index_index>

উপরের কোডটির অর্থ আপনি এই লেআউট ব্লকটি ক্যাশে করছেন না।

যদি এটি কাজ করে তবে এর অর্থ হ'ল ক্যাশিং আপনাকে ডেটা রাখার অনুমতি দেয় বা এটি অন্য কোনও কিছু খালি করে ওভাররাইট করা হয়? (এখানে অনুমান করা)


-4

এই কোড চেষ্টা করুন:

$model = Mage::getModel('catalog/product');
$product = $model->load($product_id);

// Get all related product ids of $product.
$allRelatedProductIds = $product->getRelatedProductIds();

foreach ($allRelatedProductIds as $id) {
            $relatedProduct = $model->load($id);

            // get Product's name
            echo $relatedProduct->getName();

            // get product's short description
            echo $relatedProduct->getShortDescription();

            // get Product's Long Description
            echo $relatedProduct->getDescription();

            // get Product's Regular Price
            echo $relatedProduct->getPrice();

            // get Product's Special price
            echo $relatedProduct->getSpecialPrice();

            // get Product's Url
            echo $relatedProduct->getProductUrl();

            // get Product's image Url
            echo $relatedProduct->getImageUrl();

        }


-6

আমরা এই সমস্যা মধ্যে দৌড়ে। পণ্যটি (সম্পর্কিত পণ্য নয়) মজুত রয়েছে কিনা তা পরীক্ষা করে দেখুন। পণ্যটি স্টকে রেখে দেওয়া আমাদের জন্য সমস্যাটি সমাধান করে।


এটি সমস্যার সমাধান না করলেও, সমস্যাটি এড়িয়ে চলে
স্টেভি জি

এটি কোনও সমাধান নয়
হারি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.