2

I am trying to set a layered navigation filter on the custom cms page. for that, I have created a 1 cms page name test with two-column with left bar. and inside it, I have called one template file

{{block class="Magento\Framework\View\Element\Template" template="Magento_Theme::html/test.phtml"}}

in the CMS layout update, I have placed this code

<referenceContainer name="sidebar.main">
 <block class="Magento\LayeredNavigation\Block\Navigation\Category" name="catalog.leftnav" before="-" template="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="layer/filter.phtml"/>
 </block>
</referenceContainer>

for calling product filter

inside the test.phtml file I have searched the products from the collection.

if(isset($_REQUEST["test"])) {
 $productCollection = $objectManager->create('Magento\Catalog\Model\ResourceModel\Product\CollectionFactory');
 $imageHelper = $objectManager->get('\Magento\Catalog\Helper\Image');
 $collection = $productCollection->create()
 ->addAttributeToSelect('*')
 ->addAttributeToFilter('status',\Magento\Catalog\Model\Product\Attribute\Source\Status::STATUS_ENABLED)
 ->addAttributeToFilter('visibility', \Magento\Catalog\Model\Product\Visibility::VISIBILITY_BOTH)
 ->addAttributeToFilter('test', $_REQUEST["test"]) 
 ->load();
 }

when I click on any of the filter options then my URL becomes

http://127.0.0.1/test?price=-1000&test=code

so can I get the filter request but it is a very tedious task to set a filter in collection manually.

And on the home page, I have set one search box for search products.

 <form id="testsearch" action="http://127.0.0.1/magento/test" >
 <div>Find Matching Part</div>
 <div>
 <input type="text" name="test">
 <button type="submit">SEARCH</button>
 </div>
 </form>

I know that this is not a standard way to do that but anyone can help me to set this filter in custom cms page.

Any help would be appreciated.

Thanks in advance..!

Sanjay Gohil
2,2061 gold badge15 silver badges29 bronze badges
asked Nov 27, 2019 at 15:59
3
  • 1
    I think it's easier if we build a custom router, create custom layout and template. Using cms page is hard in this case. Commented Nov 27, 2019 at 16:44
  • thank you @KhoaTruongDinh can you help me to set a product filter here.. Commented Nov 27, 2019 at 16:51
  • 1
    You get some reference from here : notabug.org/rtownley/… Commented Dec 3, 2019 at 6:25

2 Answers 2

1

I have use this code to resolve my issue.

 $productCollection = $objectManager->create('Magento\Catalog\Model\ResourceModel\Product\CollectionFactory');
 $imageHelper = $objectManager->get('\Magento\Catalog\Helper\Image');
 $collection = $productCollection->create()
 ->addAttributeToSelect('*')
 ->addAttributeToFilter('status',\Magento\Catalog\Model\Product\Attribute\Source\Status::STATUS_ENABLED)
 ->addAttributeToFilter('visibility', \Magento\Catalog\Model\Product\Visibility::VISIBILITY_BOTH);
 if (@$_REQUEST["cat"]) {
 $category = $objectManager->create('\Magento\Catalog\Model\CategoryFactory')->create()->load(@$_REQUEST["cat"]);
 $collection->addCategoryFilter($category);
 }if (@$_REQUEST["attr_code_1"]) {
 $collection->addFieldToFilter('attr_code_1', @$_REQUEST["attr_code_1"]); 
 }if (@$_REQUEST["attr_code_2"]) {
 $collection->addAttributeToFilter('attr_code_2', @$_REQUEST["attr_code_2"]);
 }if (@$_REQUEST["attr_code_3"]) {
 $collection->addAttributeToFilter('attr_code_3', @$_REQUEST["attr_code_3"]);
 }
 $collection->addAttributeToFilter('test', @$_REQUEST["@$_REQUEST["test"]"]); 
 $collection->load();

I also know that it is not the right way to do this but it works for me to resolve my issue.

If anyone have a better answer then provide here... the boundary is not closed...

answered Dec 8, 2019 at 17:32

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.