การนำทางแบบเลเยอร์สำหรับคอลเลกชันที่กำหนดเองในหน้ากำหนดเอง - magento2


12

ฉันกำลังหาข้อมูลการนำทางแบบเลเยอร์ใน magento2 เพื่อรับผลิตภัณฑ์แบบกำหนดเอง ฉันได้รับคอลเล็กชันที่กำหนดเองแล้วในเพจที่กำหนดเองจำเป็นต้องแสดงการนำทางแบบเลเยอร์ พยายามที่จะปรับแก้ปัญหา magento1 นี้แต่ไม่สามารถไปได้ไกล

ความคิดใด ๆ ที่ฉันสามารถทำได้ใน magento2 สิ่งที่ฉันทำไปแล้วมีดังต่อไปนี้:

ขยายแคตตาล็อก ListProduct block สำหรับรายการผลิตภัณฑ์ที่กำหนดเองในหน้ากำหนดเองของฉัน

class View extends \Magento\Catalog\Block\Product\ListProduct
{


    public function __construct(
    \Magento\Catalog\Block\Product\Context $context,
    \Magento\Framework\Data\Helper\PostHelper $postDataHelper,
    \Magento\Catalog\Model\Layer\Resolver $layerResolver,
    CategoryRepositoryInterface $categoryRepository,
    \Magento\Framework\Url\Helper\Data $urlHelper,
    array $data = [],
    \Custom\LayerNavigation\Model\Layer $testlayerobj
    ) {
        parent::__construct($context,$postDataHelper,$layerResolver,
        $categoryRepository,$urlHelper,$data);
        $this->_coreRegistry = $context->getRegistry();
        $this->_testlayer = $testlayerobj;
    }

    protected function _getProductCollection()
    {
        if ($this->_productCollection === null) {
          $this->_productCollection = $this->getLayer()->getProductCollection();
        }
        return $this->_productCollection;
     }

    public function getLayer()
    {

       $layer = $this->_coreRegistry->registry('current_layer');
       if ($layer) {
          return $layer;
        }
        return $this->_testlayer;
     }

}

ใช้บล็อกการค้นหาหลักสำหรับการนำทางแบบเลเยอร์ในไฟล์เลย์เอาต์

<referenceContainer name="sidebar.main">
        <block class="Magento\LayeredNavigation\Block\Navigation\Search" name="catalogsearch.leftnav" before="-" template="layer/view.phtml">
            <block class="Magento\LayeredNavigation\Block\Navigation\State" name="catalogsearch.navigation.state" as="state" />
            <block class="Magento\LayeredNavigation\Block\Navigation\FilterRenderer" name="catalogsearch.navigation.renderer" as="renderer" template="layer/filter.phtml"/>
        </block>
</referenceContainer>

Extended layer layer model เพื่อปรับเปลี่ยนการรวบรวม

class Layer extends \Magento\Catalog\Model\Layer
{
    public function __construct(
      optionStoreFactory  $optionstoreFactory,
      Attrhelper $attrhelper,
      productCollectionFactory $productCollectionFactory,
      AttributevalueFactory $attributevalueFactory,
      CategoryRepositoryInterface $categoryRepository,
      \Magento\Store\Model\StoreManagerInterface $storeManager,
      \Magento\Framework\App\Request\Http $request,
      \Magento\Framework\Registry $registry,
      \Magento\Catalog\Model\Layer\Search\CollectionFilter $filter,
      array $data = []
    ) {
       $this->optionstoreFactory       = $optionstoreFactory;
       $this->attributevalueFactory    = $attributevalueFactory;
       $this->_attrhelper              = $attrhelper;
       $this->request                  = $request;
       $this->productCollectionFactory = $productCollectionFactory;
       $this->categoryRepository = $categoryRepository;
       $this->_storeManager = $storeManager;
       $this->filter = $filter;
       $this->registry = $registry;
    }

    public function getProductCollection()
    {
        $attributevalue = $this->getAttributeValue(); //eg: Manufacturer Attribute details
        $attr_code = $attributevalue->getAttributeCode();
        $attr_option_value = $attributevalue->getOptionId();
        $collection = $this->productCollectionFactory->create();
        $store_id = $this->request->getParam('store_id');
        $collection->addAttributeToSelect('*')
               ->addAttributeToFilter($attr_code , ['finset'=>$attr_option_value ])
               ->addAttributeToFilter('visibility','4')
               ->setStore($store_id)
               ->addFieldToFilter('status', array('eq' => 1))
               ->setOrder('id', 'DESC');
        $this->prepareProductCollection($collection);
        return $collection;
    }

    public function prepareProductCollection($collection)
    {
        $this->filter->filter($collection, $this->getCurrentCategory());
       return $this;
    }

    public function getCurrentCategory()
    {
       $category = $this->registry->registry('current_category');
       if ($category) {
           $this->setData('current_category', $category);
       } else {
           $category = $this->categoryRepository->get($this->getCurrentStore()->getRootCategoryId());
       $this->setData('current_category', $category);
       }
      return $category;
    }

    public function getCurrentStore()
    {
        return $this->_storeManager->getStore();
    }

}

ณ ตอนนี้ฉันกำลังแสดงการนำทางเลเยอร์ แต่มันไม่ได้เฉพาะเจาะจงกับคอลเลกชันที่กำหนดเองของฉัน ตามการแก้ไขข้อบกพร่องของฉันคอลเลกชันจะถูกกรองตลอดทางจากหมวดหมู่รูต (ซึ่งมีแคตตาล็อกผลิตภัณฑ์ทั้งหมด) และตามที่มีการเรียกเลเยอร์


ข้อเสนอแนะใด ๆ ที่จะได้รับการชื่นชมมาก .. !
mp196

คุณพบวิธีแก้ปัญหาสำหรับมันหรือไม่? ถ้าเป็นเช่นนั้นโปรดแบ่งปันคำตอบของคุณ
Nalin Savaliya

พวกคุณคนใดที่เป็นผู้นำในเรื่องนี้ ??
aton1004

ฉันประสบความสำเร็จในการนำทางเลเยอร์บนหน้ากำหนดเองสำหรับคอลเลกชันที่กำหนดเองของฉัน ... ต้องใช้เวลาสักครู่ในการโพสต์โซลูชันที่นี่เพราะมันยาวมาก (อาจจะในหนึ่งหรือสองวันฉันจะโพสต์โซลูชั่น)
mp196

คำตอบ:


3

ฉันสามารถใช้การนำทางด้วยการเปลี่ยนแปลงด้านล่างฉันอาจไม่ถูกต้องอย่างสมบูรณ์ด้วยโซลูชันนี้ดังนั้นความคิดเห็นและข้อเสนอแนะยินดีต้อนรับมากที่สุด

1) เตรียม di.xml สำหรับส่วนหน้าดังนี้

<!-- Magento only includes 2 type of layer resolvers i.e Category and search whereas our custom page is neither a category page nor a search page so we need to add a new layer resolver on our custom page-->
<type name="Magento\Catalog\Model\Layer\Resolver">
    <arguments>
        <argument name="layersPool" xsi:type="array">
            <item name="category" xsi:type="string">Magento\Catalog\Model\Layer\Category</item>
            <item name="search" xsi:type="string">Magento\Catalog\Model\Layer\Search</item>
            <item name="customlayer" xsi:type="string">Custom\Navigation\Model\Layer</item>
        </argument>
    </arguments>
</type>

<!-- To prepare the filterlist for our custom collection which would be passed to the left navigation we need below virtual types for our custom page navigation -->
<virtualType name="customFilterList" type="Custom\Navigation\Model\Layer\FilterList">
    <arguments>
        <argument name="filterableAttributes" xsi:type="object">Custom\Navigation\Model\Layer\FilterableAttributeList</argument>
        <argument name="filters" xsi:type="array">
            <item name="attribute" xsi:type="string">Custom\Navigation\Model\Layer\Filter\Attribute</item>
            <item name="category" xsi:type="string">Custom\Navigation\Model\Layer\Filter\Category</item>
        </argument>
    </arguments>
</virtualType>

<!-- once the filter list virtual type is ready we can pass the same to our navigation , I have prepared the virtual type of the core navigation for my custom module and have passed the custom filter list to it -->
<virtualType name="Custom\Navigation\Block\Navigation\Custnavigation" type="Magento\LayeredNavigation\Block\Navigation">
    <arguments>
        <argument name="filterList" xsi:type="object">customFilterList</argument>
    </arguments>
</virtualType>

<!-- As we will be modifying the layer model collection we will need to extend the core model layer, Below virtual type will be required to extend the Catalog model layer else it will throw error for the context in construct method-->
<virtualType name="Custom\Navigation\Model\Layer\Context" type="Magento\Catalog\Model\Layer\Context">
    <arguments>
        <argument name="collectionProvider" xsi:type="object">Custom\Navigation\Model\Layer\ItemCollectionProvider</argument>
        <argument name="stateKey" xsi:type="object">Custom\Navigation\Model\Layer\StateKey</argument>
        <argument name="collectionFilter" xsi:type="object">Custom\Navigation\Model\Layer\CollectionFilter</argument>
    </arguments>
</virtualType>
<type name="Custom\Navigation\Model\Layer">
    <arguments>
        <argument name="context" xsi:type="object">Custom\Navigation\Model\Layer\Context</argument>
    </arguments>
</type>

2) ไฟล์โมเดลเลเยอร์: ขยายไฟล์เลเยอร์โมเดลด้วยโมเดลที่คุณกำหนดเองและแก้ไขการรวบรวม

namespace Custom\Navigation\Model;
class Layer extends \Magento\Catalog\Model\Layer
{

//Apart from the default construct argument you need to add your model from which your product collection is fetched.

    public function __construct(
        \Magento\Catalog\Model\Layer\ContextInterface $context,
        \Magento\Catalog\Model\Layer\StateFactory $layerStateFactory,
        AttributeCollectionFactory $attributeCollectionFactory,
        \Magento\Catalog\Model\ResourceModel\Product $catalogProduct,
        \Magento\Store\Model\StoreManagerInterface $storeManager,
        \Magento\Framework\Registry $registry,
        CategoryRepositoryInterface $categoryRepository,
        array $data = []
    ) {
    parent::__construct(
            $context,
            $layerStateFactory,
            $attributeCollectionFactory,
            $catalogProduct,
            $storeManager,
            $registry,
            $categoryRepository,
            $data
        );
    }

    public function getProductCollection()
    {

        /*Unique id is needed so that when product is loaded /filtered in the custom listing page it will be set in the
         $this->_productCollections array with unique key else you will not get the updated or proper collection.
        */

        if (isset($this->_productCollections['some_uinique_id'])) {
            $collection = $this->_productCollections['some_uinique_id'];
        } else {
            //$collection = Your logic to get your custom collection.
            $this->prepareProductCollection($collection);
            $this->_productCollections['some_unique_id'] = $collection;
        }

        return $collection;
    }

3) ฉันได้ขยายไฟล์ด้านล่างตามที่ใช้ใน di.xml (ได้เก็บไฟล์ไว้โดยการขยายไม่ได้สร้างอินสแตนซ์วิธีการสร้างเนื่องจากฉันไม่ต้องการการเปลี่ยนแปลงใด ๆ ในไฟล์เหล่านี้หากจำเป็นคุณสามารถแก้ไขฟังก์ชั่นเฉพาะในไฟล์เพิ่มเติมได้ ดังนั้น) ปัจจุบันวิธีที่ฉันใช้ไม่สามารถแก้ไขปัญหาตัวกรองหมวดหมู่ได้ แต่ยังรวมถึงตัวกรองหมวดหมู่หลักด้วยดังนั้นจึงต้องทำวิธีแก้ปัญหาเพื่อรวม faceteddata (วิธีแก้ปัญหาที่กล่าวถึงในจุดที่ 4)

- Custom\Navigation\Model\Layer\FilterList extends
           \Magento\Catalog\Model\Layer\FilterList



 - Custom\Navigation\Model\Layer\FilterableAttributeList extends
   \Magento\Catalog\Model\Layer\Category\FilterableAttributeList



 - Custom\Navigation\Model\Layer\Filter\Attribute extends
   \Magento\Catalog\Model\Layer\Filter\Attribute



 - Custom\Navigation\Model\Layer\Filter\Category extends
   \Magento\CatalogSearch\Model\Layer\Filter\Category (Why catalog
           search is used i have mentioned the same in 4th point)



 - Custom\Navigation\Model\Layer\ItemCollectionProvider extends
   \Magento\Catalog\Model\Layer\Category\ItemCollectionProvider



 - Custom\Navigation\Model\Layer\StateKey extends
   \Magento\Catalog\Model\Layer\Category\StateKey



 - Custom\Navigation\Model\Layer\CollectionFilter extends
   \Magento\Catalog\Model\Layer\Category\CollectionFilter

4) ต้องทำวิธีแก้ปัญหาสำหรับตัวกรองหมวดหมู่ในการนำทางแบบเลเยอร์เนื่องจากไม่แสดงตัวเลือกที่เกี่ยวกับตัวกรองคอลเลกชันหากมีผู้ใดพบวิธีการแก้ปัญหาโปรดทำการอัปเดต ด้านล่างเป็นรหัสที่ฉันใช้เพื่อแก้ไขข้อผิดพลาด faceteddata ที่ต้องเผชิญในขณะที่รวมหมวดหมู่ใน customfilterlist ของฉันเนื่องจากการใช้ patch นี้ตัวเลือกหมวดหมู่ไม่ได้แสดงในการนำทางของฉันตัวกรองที่เหลือเหมาะสมตามคอลเลกชันของฉัน

namespace Custom\Navigation\Model\Layer\Filter;

/**
 * Layer category filter
 */
class Category extends \Magento\CatalogSearch\Model\Layer\Filter\Category
{
     /**
      * @var \Magento\Framework\Escaper
      */
    private $escaper;

    /**
     * @var CategoryDataProvider
     */
    private $dataProvider;

    /**
     * @param \Magento\Catalog\Model\Layer\Filter\ItemFactory $filterItemFactory
     * @param \Magento\Store\Model\StoreManagerInterface $storeManager
     * @param \Magento\Catalog\Model\Layer $layer
     * @param \Magento\Catalog\Model\Layer\Filter\Item\DataBuilder $itemDataBuilder
     * @param \Magento\Catalog\Model\CategoryFactory $categoryFactory
     * @param \Magento\Framework\Escaper $escaper
     * @param CategoryManagerFactory $categoryManager
     * @param array $data
     */
    public function __construct(
        \Magento\Catalog\Model\Layer\Filter\ItemFactory $filterItemFactory,
        \Magento\Store\Model\StoreManagerInterface $storeManager,
        \Magento\Catalog\Model\Layer $layer,
        \Magento\Catalog\Model\Layer\Filter\Item\DataBuilder $itemDataBuilder,
        \Magento\Framework\Escaper $escaper,
        \Magento\Catalog\Model\Layer\Filter\DataProvider\CategoryFactory $categoryDataProviderFactory,
        array $data = []
    ) {
        parent::__construct(
            $filterItemFactory,
            $storeManager,
            $layer,
            $itemDataBuilder,
            $escaper,
            $categoryDataProviderFactory,
            $data
        );
        $this->_escaper = $escaper;
        $this->_requestVar = 'cat';
        $this->dataProvider = $categoryDataProviderFactory->create(['layer' => $this->getLayer()]);
    }

    /**
     * Get data array for building category filter items
     *
     * @return array
     */
    protected function _getItemsData()
    {
        /** @var \Magento\CatalogSearch\Model\ResourceModel\Fulltext\Collection $productCollection */
        $productCollection = $this->getLayer()->getProductCollection();

        $optionsFacetedData = '' ;// $productCollection->getFacetedData('category'); (Here i have set $optionsFacetedData as blank so that category option will not be included in layered navigation)
        $category = $this->dataProvider->getCategory();
        $categories = $category->getChildrenCategories();

        $collectionSize = $productCollection->getSize();

        if ($category->getIsActive()) {
            foreach ($categories as $category) {
                if ($category->getIsActive()
                    && isset($optionsFacetedData[$category->getId()])
                    && $this->isOptionReducesResults($optionsFacetedData[$category->getId()]['count'], $collectionSize)
                ) {
                    $this->itemDataBuilder->addItemData(
                        $this->escaper->escapeHtml($category->getName()),
                        $category->getId(),
                        $optionsFacetedData[$category->getId()]['count']
                    );
                }
            }
        }
        return $this->itemDataBuilder->build();
    }
}

5) เมื่อโหลดเพจที่กำหนดเองของคุณในวิธีการเรียกใช้งานคอนโทรลเลอร์คุณจำเป็นต้องตั้งค่าเลเยอร์ที่กำหนดเองซึ่งเราเพิ่มใน di.xml พร้อมกับหมวดหมู่และเลเยอร์การค้นหา

 - include the below argument in your controller construct method.

     "\Magento\Catalog\Model\Layer\Resolver $layerResolver",

 - inside execute method set your custom layer resolver for your module.

    $this->layerResolver->create('customlayer');

6) ในไฟล์ xml เลย์เอาต์ของคุณสำหรับหน้าเว็บที่กำหนดเองเพิ่มรหัสด้านล่างในส่วนของร่างกาย

<attribute name="class" value="page-with-filter"/>

<referenceContainer name="sidebar.main">
<!-- below is the virtual type of the core navigation we created -->
    <block class="Custom\Navigation\Block\Navigation\Custnavigation" name="custom.leftnav" before="-" template="Magento_LayeredNavigation::layer/view.phtml">
        <block class="Magento\LayeredNavigation\Block\Navigation\State" name="catalog.navigation.state" as="state" />
        <block class="Magento\LayeredNavigation\Block\Navigation\FilterRenderer" name="catalog.navigation.renderer" as="renderer" template="Magento_LayeredNavigation::layer/filter.phtml"/>
    </block>
</referenceContainer>

ฉันใช้รหัสของคุณกับชุดสะสมที่กำหนดเองใน magento 2.1.7 แต่ฉันได้รับหน้าว่าง ฉันคิดว่า Custom \ Navigation \ Block \ Navigation \ Custnavigation ไม่มีรหัสด้านบน คุณกรุณาให้รหัสเต็มแก่ฉันได้ไหม
Magecode

ไม่มีบล็อกดังกล่าวแทนฉันได้สร้างประเภทเสมือนคุณสามารถตรวจสอบรหัส di.xml และรหัสโพสต์ที่นี่เป็นรหัสเต็มเอง
mp196

ตกลงกรุณาช่วยส่งรหัสไปรษณีย์มาให้ฉันได้ไหม
Magecode

ขออภัยไม่สามารถส่งรหัสไปรษณีย์เนื่องจากรหัสตอบด้านบนเป็นเพียงส่วนเล็ก ๆ ของส่วนขยายแบบชำระเงินที่เราพัฒนาขึ้น
mp196

1
ตรวจสอบว่าคุณเพิ่ม $ this-> layerResolver = $ layerResolver หรือไม่ ในตัวสร้างของคุณสำหรับคลาสที่เพิ่มในตัวสร้างไฟล์ \ Magento \ Catalog \ Model \ Layer \ Resolver $ layerResolver
mp196

2

ฉันใช้ชุดผลิตภัณฑ์ที่กำหนดเองของฉันบนแถบนำทางและแถบเครื่องมือแบบเลเยอร์

ตัวอย่างเช่นฉันดึงคอลเลกชันของผลิตภัณฑ์เหล่านั้นที่มีราคาน้อยกว่า 100

ขั้นตอนที่ 1:เพิ่มข้อมูลโค้ดด้านล่าง

app / รหัส / ผู้ขาย / โมดูล / etc / di.xml

<?xml version="1.0"?>

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">

    <type name="Magento\Catalog\Model\Layer">
        <plugin name="custom_product_model_layer" type="Vendor\Module\Plugin\Layer" />
    </type>

    <type name="Magento\Catalog\Block\Product\ProductList\Toolbar">
        <plugin name="custom_product_toolbar" type="Vendor\Module\Plugin\Toolbar" />
    </type>

    <virtualType name="categoryFilterList" type="Magento\Catalog\Model\Layer\FilterList">
        <arguments>
            <argument name="filters" xsi:type="array">
                <item name="attribute" xsi:type="string">Magento\Catalog\Model\Layer\Filter\Attribute</item>
                <item name="price" xsi:type="string">Magento\Catalog\Model\Layer\Filter\Price</item>
                <item name="decimal" xsi:type="string">Magento\Catalog\Model\Layer\Filter\Decimal</item>
                <item name="category" xsi:type="string">Magento\Catalog\Model\Layer\Filter\Category</item>
            </argument>
        </arguments>
    </virtualType>

</config>

ขั้นตอนที่ 2:สร้างปลั๊กอินสำหรับการรวบรวมผลิตภัณฑ์

app / รหัส / ผู้ขาย / โมดูล / ปลั๊กอิน / Layer.php

<?php
namespace Vendor\Module\Plugin;
class Layer
{
  public function aroundGetProductCollection(
    \Magento\Catalog\Model\Layer $subject,
    \Closure $proceed
  ) {

    $result = $proceed();
    $result->addAttributeToFilter('price', array('lt' => 100));
    return $result;
  }
}

ขั้นตอนที่ 3:สร้างปลั๊กอินสำหรับแถบเครื่องมือ

app / รหัส / ผู้ขาย / โมดูล / ปลั๊กอิน / Toolbar.php

<?php
namespace Vendor\Module\Plugin;
class Toolbar
{

  protected $_objectManager;
  protected $request;

  public function __construct(
    \Magento\Framework\ObjectManagerInterface $objectmanager,
    \Magento\Framework\App\Request\Http $request
  ) {
    $this->_objectManager = $objectmanager;
    $this->request = $request;
  }

  public function aroundSetCollection(
    \Magento\Catalog\Block\Product\ProductList\Toolbar $subject,
    \Closure $proceed,
    $request
  ) {
    $result = $proceed($request);

    $this->_collection = $request;
    $category = $this->_objectManager->get('Magento\Framework\Registry')->registry('current_category');
    if($category)
    {
      $page = $this->request->getParam('p');
      if($page == '')
      {
        $page = 1;
      }
      $this->_collection->getCurPage();
      $this->_collection->setCurPage($page);  
    }
    //else
    //{
    //  $this->_collection->setCurPage($this->getCurrentPage());
    //}

    return $result;
  }

}

สวัสดีฉันใช้รหัสของคุณแล้วอัปเดตการรวบรวมผลิตภัณฑ์ Correclty แต่ไม่ได้อัปเดต FIlterList เช่นหมวดหมู่ราคาคุณสมบัติและจำนวนผลิตภัณฑ์ของพวกเขา คุณช่วยได้ไหมนี่เป็นเรื่องเร่งด่วนสำหรับฉัน @DineshYadav
Sujeet Pandit

โซลูชันของคุณทำงานได้อย่างสมบูรณ์แบบ ฉันได้เพิ่ม bells และ whistles พิเศษเพื่อฟังบางประเภทแล้วเขียนคอลเลกชันของพวกเขาใหม่ทั้งหมด
pixiemedia

@pixiemedia คุณสามารถโหวตคำตอบของฉันได้ถ้ามันเหมาะกับคุณ☺️
Dinesh Yadav

ฉันมีอยู่แล้ว;) พบปัญหาเล็ก ๆ โดยวิธี - ในรหัสปลั๊กอินส่วนสุดท้ายหลังจากที่อื่นสุดท้ายแบ่งผลการค้นหา แสดงความคิดเห็นว่า bit out
pixiemedia

หยุดทำงานใน M2.2 - ข้อผิดพลาด sql SQLSTATE [42S22]: ไม่พบคอลัมน์: 1054 คอลัมน์ที่ไม่รู้จัก 'e.min_price' ใน 'รายการเขตข้อมูล' - หาวิธีแก้ปัญหา
pixiemedia

0

ฉันสามารถใช้การนำทางแบบเลเยอร์ส่วนใหญ่ทำงานให้กับการรวบรวมผลิตภัณฑ์ที่กำหนดเองในหน้าเว็บที่กำหนดเอง ฉันได้อัปโหลดซอร์สโค้ดสำหรับโมดูลของฉันที่นี่ ปัญหาเดียวคือตัวกรองราคาไม่แสดงจำนวนผลิตภัณฑ์ที่ถูกต้อง ด้วยเหตุนี้ฉันจึงแก้ไขมุมมองการนำทางแบบเลเยอร์เพื่อซ่อนตัวกรองราคา แต่เนื่องจากฉันใช้ไฟล์มุมมองที่กำหนดเองด้วยเหตุผลบางประการตัวกรองในแถบด้านข้างจึงไม่สามารถยุบได้อีกต่อไป

หากใครสามารถแก้ไขปัญหานี้ได้โปรดส่งคำขอดึง ฉันยังพยายามหาวิธีใช้สิ่งนี้สำหรับหน้า CMS ที่สร้างผ่านแบ็กเอนด์ Magento 2 แทนที่จะเป็นหน้าที่สร้างขึ้นด้วยตนเองผ่าน xml

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.