| ... | ... |
@@ -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 |
|