... | ... |
@@ -6,6 +6,13 @@ |
6 | 6 |
<source>Bitte geben Sie nur Zahlen im Währungsformat (z.B. 10,99 oder 33) an.</source> |
7 | 7 |
</trans-unit> |
8 | 8 |
|
9 |
+ <trans-unit id="MSC.re_room"> |
|
10 |
+ <source>Zimmer</source> |
|
11 |
+ </trans-unit> |
|
12 |
+ <trans-unit id="MSC.re_rooms"> |
|
13 |
+ <source>Zimmer</source> |
|
14 |
+ </trans-unit> |
|
15 |
+ |
|
9 | 16 |
<trans-unit id="MSC.re_energyConsumption"> |
10 | 17 |
<source>Energieverbrauch nach</source> |
11 | 18 |
</trans-unit> |
... | ... |
@@ -13,12 +13,17 @@ |
13 | 13 |
<div class="content-background-wrapper-fg"> |
14 | 14 |
<div class="content-grid"> |
15 | 15 |
<div class="fragments"> |
16 |
- <form class="assets-list-filter" hx-get="{{ pageUrl is defined ? pageUrl : '' }}" hx-push-url="true" hx-headers='{"VR-Ajax": "ReAssetsList"}' hx-trigger="change, submit" hx-target="closest .assets-list-wrapper" class="filter"> |
|
17 |
- <div class="filter-wrapper"> |
|
18 |
- <select name="filter_zimmer"> |
|
19 |
- <option value="">Anzahl Zimmer</option> |
|
20 |
- </select> |
|
21 |
- </div> |
|
16 |
+ <form class="assets-list-filter" hx-get="{{ pageUrl is defined ? pageUrl : '' }}" hx-push-url="true" hx-headers='{"VR-Ajax": "ReAssetsList"}' hx-trigger="change, submit" hx-target="closest .module-vr-re-assets-list" hx-target="" class="filter"> |
|
17 |
+ {% if filterOptions.rooms is defined %} |
|
18 |
+ <div class="filter-wrapper"> |
|
19 |
+ <select name="filter_zimmer"> |
|
20 |
+ <option value="">Anzahl Zimmer</option> |
|
21 |
+ {% for option in filterOptions.rooms %} |
|
22 |
+ <option value="{{ option.value }}"{% if filter.rooms is defined and filter.rooms == option.value %} selected{% endif %}>{{ option.label }}</option> |
|
23 |
+ {% endfor %} |
|
24 |
+ </select> |
|
25 |
+ </div> |
|
26 |
+ {% endif %} |
|
22 | 27 |
</form> |
23 | 28 |
</div> |
24 | 29 |
</div> |
... | ... |
@@ -71,4 +76,8 @@ |
71 | 76 |
{% endfor %} |
72 | 77 |
</div> |
73 | 78 |
{% endif %} |
79 |
+ |
|
80 |
+ {% block overlay %} |
|
81 |
+ <div class="assets-list-overlay"></div> |
|
82 |
+ {% endblock %} |
|
74 | 83 |
{% endblock %} |
... | ... |
@@ -10,6 +10,7 @@ |
10 | 10 |
namespace vonRotenberg\RealEstateListingBundle\Controller\FrontendModule; |
11 | 11 |
|
12 | 12 |
use Contao\CoreBundle\DependencyInjection\Attribute\AsFrontendModule; |
13 |
+use Contao\CoreBundle\Exception\ResponseException; |
|
13 | 14 |
use Contao\CoreBundle\Image\Studio\Studio; |
14 | 15 |
use Contao\CoreBundle\Twig\FragmentTemplate; |
15 | 16 |
use Contao\ModuleModel; |
... | ... |
@@ -18,15 +19,28 @@ use Contao\StringUtil; |
18 | 19 |
use Contao\System; |
19 | 20 |
use Symfony\Component\HttpFoundation\Request; |
20 | 21 |
use Symfony\Component\HttpFoundation\Response; |
22 |
+use Symfony\Contracts\Translation\TranslatorInterface; |
|
21 | 23 |
|
22 | 24 |
#[AsFrontendModule(RealEstateAssetsListController::TYPE, category: 'miscellaneous')] |
23 | 25 |
class RealEstateAssetsListController extends RealEstateAssetsModuleController |
24 | 26 |
{ |
25 | 27 |
public const TYPE = 'vr_re_assets_list'; |
26 | 28 |
|
29 |
+ /** |
|
30 |
+ * @var TranslatorInterface |
|
31 |
+ */ |
|
32 |
+ protected $translator; |
|
33 |
+ |
|
34 |
+ public function __construct(TranslatorInterface $translator) |
|
35 |
+ { |
|
36 |
+ $this->translator = $translator; |
|
37 |
+ } |
|
38 |
+ |
|
39 |
+ |
|
27 | 40 |
protected function getResponse(FragmentTemplate $template, ModuleModel $model, Request $request): Response |
28 | 41 |
{ |
29 | 42 |
$arrGroups = []; |
43 |
+ $arrFilterOptions = []; |
|
30 | 44 |
|
31 | 45 |
$jumpTo = PageModel::findByPk($model->jumpTo); |
32 | 46 |
$urlGenerator = System::getContainer()->get('contao.routing.content_url_generator'); |
... | ... |
@@ -37,6 +51,7 @@ class RealEstateAssetsListController extends RealEstateAssetsModuleController |
37 | 51 |
return $template->getResponse(); |
38 | 52 |
} |
39 | 53 |
|
54 |
+ // Figure Builder |
|
40 | 55 |
$figureBuilder = System::getContainer() |
41 | 56 |
->get('contao.image.studio') |
42 | 57 |
->createFigureBuilder() |
... | ... |
@@ -49,7 +64,6 @@ class RealEstateAssetsListController extends RealEstateAssetsModuleController |
49 | 64 |
'teaserFigure' => $this->getImageFigures($asset->gallerySRC, $figureBuilder, $asset->orderSRC, 1), |
50 | 65 |
'detailsUrl' => $jumpTo !== null ? $urlGenerator->generate($jumpTo, ['parameters'=>'/items/'.$asset->id]) : null |
51 | 66 |
]); |
52 |
- dump($arrItem); |
|
53 | 67 |
|
54 | 68 |
// Grouping |
55 | 69 |
if ($model->vr_re_grouped) |
... | ... |
@@ -68,9 +82,25 @@ class RealEstateAssetsListController extends RealEstateAssetsModuleController |
68 | 82 |
$arrGroups['nogroup']['items'][] = $arrItem; |
69 | 83 |
} |
70 | 84 |
|
85 |
+ // Filter options |
|
86 |
+ if (!empty($asset->numberOfRooms)) |
|
87 |
+ { |
|
88 |
+ $arrFilterOptions['rooms'][] = ['value'=>$asset->numberOfRooms, 'label'=>$asset->numberOfRooms . ' ' . ($asset->numberOfRooms > 1 ? $this->translator->trans('MSC.re_rooms', [], 'contao_default') : $this->translator->trans('MSC.re_room', [], 'contao_default'))]; |
|
89 |
+ } |
|
90 |
+ |
|
71 | 91 |
} |
72 | 92 |
|
93 |
+ $arrFilterOptions = array_unique($arrFilterOptions); |
|
94 |
+ |
|
95 |
+ $template->set('filterOptions',$arrFilterOptions); |
|
73 | 96 |
$template->set('groups',$arrGroups); |
97 |
+ |
|
98 |
+ // Handle ajax |
|
99 |
+ if ($request->headers->get('VR-Ajax') == 'ReAssetsList') |
|
100 |
+ { |
|
101 |
+ throw new ResponseException($template->getResponse()); |
|
102 |
+ } |
|
103 |
+ |
|
74 | 104 |
return $template->getResponse(); |
75 | 105 |
} |
76 | 106 |
|