مشكلة في ذاكرة التخزين المؤقت لعنصر واجهة المستخدم في Magento2 - لا يتم إعادة تحميل الأسعار

magento.stackexchange https://magento.stackexchange.com/questions/115720

سؤال

لدي عنصر واجهة مستخدم لقائمة المنتجات تم إدراجه في منطقة المحتوى بالصفحة الأولى لمتجر Magento 2.يتم إدراج القطعة باستخدام الكود التالي:

{{widget type="Magento\CatalogWidget\Block\Product\ProductsList" products_count="12" template="product/widget/content/grid.phtml" conditions_encoded="a:2:[i:1;a:4:[s:4:`type`;s:50:`Magento|CatalogWidget|Model|Rule|Condition|Combine`;s:10:`aggregator`;s:3:`all`;s:5:`value`;s:1:`1`;s:9:`new_child`;s:0:``;]s:4:`1--1`;a:4:[s:4:`type`;s:50:`Magento|CatalogWidget|Model|Rule|Condition|Product`;s:9:`attribute`;s:12:`category_ids`;s:8:`operator`;s:2:`==`;s:5:`value`;s:2:`19`;]]"}}

عند تحويل الموقع إلى وضع الإنتاج، لا يتم إعادة تحميل أسعار المنتجات عند تغيير العملات.تعمل ميزة إعادة تحميل السعر في وضع المطور وأيضًا على صفحات الفئات العادية.يتم إعادة تحميل الأسعار بعد تحديث ذاكرة التخزين المؤقت BLOCK_HTML في الواجهة الخلفية ولكن سيتم بعد ذلك تخزين العملة المختارة عند عرض الصفحة الأولى.ضبط ذاكرة التخزين المؤقت لعناصر واجهة المستخدم TTL على القيمة الخالية ليس له أي تأثير.

لقد حاولت أيضًا إضافة الأداة عبر تخطيط XML باستخدام هذا الرمز:

<referenceContainer name="content.bottom">
    <block class="Magento\CatalogWidget\Block\Product\ProductsList" template="product/widget/content/grid2.phtml" cacheable="false"><!--   -->
        <arguments>
             <argument name="products_count" xsi:type="number">12</argument>
             <argument name="conditions_encoded" xsi:type="string">a:2:[i:1;a:4:[s:4:`type`;s:50:`Magento|CatalogWidget|Model|Rule|Condition|Combine`;s:10:`aggregator`;s:3:`all`;s:5:`value`;s:1:`1`;s:9:`new_child`;s:0:``;]s:4:`1--1`;a:4:[s:4:`type`;s:50:`Magento|CatalogWidget|Model|Rule|Condition|Product`;s:9:`attribute`;s:12:`category_ids`;s:8:`operator`;s:2:`==`;s:5:`value`;s:2:`19`;]]</argument>
        </arguments>
    </block>
</referenceContainer>

لقد حاولت أيضًا الإضافة $this->_isScopePrivate = true; ل Magento\CatalogWidget\Block\Product\ProductsList::__construct() والذي من المفترض أن يفرض تحميل Ajax، لكنه لم ينجح.

اقتراحات حول كيفية التغلب على هذا، أي شخص؟

هل كانت مفيدة؟

المحلول

اكتشفه:لقد أدت إضافة وسيطة Cache_lifetime لـ xsi:type null إلى حل المشكلة.لذا، إذا أردت في أي وقت إضافة عنصر واجهة مستخدم عبر Layout.xml وتريد أن تكون مستقلة عن ذاكرة التخزين المؤقت، فقم بذلك:

<referenceContainer name="content.bottom">
    <block class="Magento\CatalogWidget\Block\Product\ProductsList" template="product/widget/content/grid2.phtml">
        <arguments>
            <argument name="products_count" xsi:type="number">12</argument>
            <argument name="conditions_encoded" xsi:type="string">a:2:[i:1;a:4:[s:4:`type`;s:50:`Magento|CatalogWidget|Model|Rule|Condition|Combine`;s:10:`aggregator`;s:3:`all`;s:5:`value`;s:1:`1`;s:9:`new_child`;s:0:``;]s:4:`1--1`;a:4:[s:4:`type`;s:50:`Magento|CatalogWidget|Model|Rule|Condition|Product`;s:9:`attribute`;s:12:`category_ids`;s:8:`operator`;s:2:`==`;s:5:`value`;s:2:`19`;]]</argument>
            <argument name="cache_lifetime" xsi:nil="true" xsi:type="null">null</argument>
        </arguments>
    </block>
</referenceContainer>

نصائح أخرى

لست متأكدًا مما إذا كانت هذه ميزة تمت إضافتها منذ طرح هذا السؤال، ولكن هناك "عمر ذاكرة التخزين المؤقت (بالثواني)" في المعلمات عندما تقوم بإنشاء الأداة كمسؤول.

إذا كان لديك عملات متعددة، فيبدو أن هذا يتطلب الإعداد على 0 حيث يستمر يومًا واحدًا افتراضيًا.

يبدو من السخيف أن الأداة لا تحتوي على رمز لتحديد ما إذا كانت ذاكرة التخزين المؤقت اليومية أو عدم وجود ذاكرة تخزين مؤقت هي الإعداد الافتراضي المعقول - ستحتاج فقط إلى حساب العملات المستخدمة لمعرفة ذلك.

يمكنك أيضًا تجربة Cache_lifetime = "1" في الكتلة الخاصة بك، حيث يتم استدعاء عنصر واجهة المستخدم.شيء مثل أدناه،

{{widget type="Magento\Catalog\Block\Product\Widget\NewWidget" cache_lifetime="1" display_type="all_products" products_count="8" template="Magento_Catalog::product/widget/new/content/new_grid.phtml"}}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى magento.stackexchange
scroll top