Skip to content

Commit 199ec7e

Browse files
authored
feat: introduce a new view model to had conditional displaying wether it is filtered
## feat: introduce a new view model to had conditional displaying wether the current entity is filtered
2 parents 3e775db + e7fdbed commit 199ec7e

File tree

3 files changed

+89
-3
lines changed

3 files changed

+89
-3
lines changed

ViewModel/IsEntityFiltered.php

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
<?php
2+
/**
3+
* NOTICE OF LICENSE
4+
*
5+
* This source file is subject to the Open Software License (OSL 3.0)
6+
* that is bundled with this package in the file LICENSE.txt.
7+
* It is also available through the world-wide-web at this URL:
8+
* https://opensource.org/licenses/OSL-3.0
9+
*
10+
* @category Amadeco
11+
* @package Amadeco_SmileCustomEntityLayeredNavigation
12+
* @copyright Copyright (c) Amadeco (https://www.amadeco.fr) - Ilan Parmentier
13+
* @license https://opensource.org/licenses/OSL-3.0 Open Software License (OSL 3.0)
14+
*/
15+
declare(strict_types=1);
16+
17+
namespace Amadeco\SmileCustomEntityLayeredNavigation\ViewModel;
18+
19+
use Magento\Framework\View\Element\Block\ArgumentInterface;
20+
use Magento\Framework\App\RequestInterface;
21+
use Magento\Catalog\Model\Layer;
22+
use Magento\Catalog\Model\Layer\Resolver;
23+
use Amadeco\SmileCustomEntityLayeredNavigation\Block\SetList as EntitiesPager;
24+
use Amadeco\SmileCustomEntityLayeredNavigation\Model\Layer as EntitiesLayer;
25+
use Amadeco\SmileCustomEntityLayeredNavigation\Model\Set\SetList\Toolbar as ToolbarModel;
26+
use Magento\Theme\Block\Html\Pager as ProductsPager;
27+
28+
class IsEntityFiltered implements ArgumentInterface
29+
{
30+
private Layer $catalogLayer;
31+
32+
/**
33+
* @param RequestInterface $request
34+
* @param Resolver $layerResolver
35+
* @param ProductsPager $productsPager
36+
* @param EntitiesPager $entitiesPager
37+
* @param EntitiesLayer $entitiesLayer
38+
*/
39+
public function __construct(
40+
private RequestInterface $request,
41+
private Resolver $layerResolver,
42+
private ProductsPager $productsPager,
43+
private EntitiesPager $entitiesPager,
44+
private EntitiesLayer $entitiesLayer
45+
) {
46+
$this->request = $request;
47+
$this->catalogLayer = $layerResolver->get();
48+
$this->productsPager = $productsPager;
49+
$this->entitiesPager = $entitiesPager;
50+
$this->entitiesLayer = $entitiesLayer;
51+
}
52+
53+
/**
54+
* Check whether the current entity is filtered
55+
*
56+
* @return bool
57+
*/
58+
public function isFiltered(): bool
59+
{
60+
$params = [
61+
ToolbarModel::PAGE_PARAM_NAME,
62+
ToolbarModel::ORDER_PARAM_NAME,
63+
ToolbarModel::DIRECTION_PARAM_NAME,
64+
ToolbarModel::MODE_PARAM_NAME,
65+
ToolbarModel::LIMIT_PARAM_NAME
66+
];
67+
68+
$requestParams = array_keys($this->request->getParams());
69+
$found = array_intersect($params, $requestParams);
70+
71+
return (
72+
count($found) > 0 ||
73+
count($this->catalogLayer->getState()->getFilters()) > 0 ||
74+
count($this->entitiesLayer->getState()->getFilters()) > 0
75+
);
76+
}
77+
}

view/frontend/layout/smile_custom_entity_set_view.xml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@
1919
<body>
2020
<referenceBlock name="smile_custom_entity_list_pager" remove="true" />
2121
<referenceBlock name="smile_custom_entity_set_view" template="Amadeco_SmileCustomEntityLayeredNavigation::set/view.phtml">
22+
<arguments>
23+
<argument name="is_entity_filtered_model" xsi:type="object">Amadeco\SmileCustomEntityLayeredNavigation\ViewModel\IsEntityFiltered</argument>
24+
</arguments>
2225
<container name="custom.entity.set.additional" as="set_additional" />
2326
<block class="Amadeco\SmileCustomEntityLayeredNavigation\Block\SetList" name="set.list" as="set_list" template="Amadeco_SmileCustomEntityLayeredNavigation::set/list.phtml" after="custom.entity.set.additional">
2427
<container name="set.list.additional" as="additional" />
@@ -31,4 +34,4 @@
3134
</block>
3235
</referenceBlock>
3336
</body>
34-
</page>
37+
</page>

view/frontend/templates/set/view.phtml

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,19 @@
1515

1616
/**
1717
* Attribute set frontend view block
18+
*
1819
* @var \Amadeco\SmileCustomEntity\Block\Set\View $block
20+
* @var \Amadeco\SmileCustomEntityLayeredNavigation\ViewModel\IsEntityFiltered $isEntityFilteredModel
1921
*/
22+
$isEntityFilteredModel = $block->getData('is_entity_filtered_model');
2023
?>
21-
<?php if ($block->isFilteredEntity() === false) : ?>
24+
<?php if (
25+
!$isEntityFilteredModel ||
26+
($isEntityFilteredModel && !$isEntityFilteredModel->isFiltered())
27+
): ?>
2228
<?= $block->getAdditionalHtml() ?>
2329
<?php endif ?>
2430

2531
<div class="page-products">
2632
<?= $block->getEntityListHtml() ?>
27-
</div>
33+
</div>

0 commit comments

Comments
 (0)