Обычная форма отправляет post.
Как я делал обработку форм сниппетом + фильтрация данных для дитто.
Создаем сниппет и прописываем в начале шаблона:
<?php
// zagonjaem s formy v sessiju
if (isset($_POST['typedom'])) { $_SESSION['typedom'] = $_POST['typedom']; } else { $_SESSION['typedom'] = $_SESSION['typedom'];}
if (isset($_POST['city'])) {$_SESSION['city'] = $_POST['city'];} else { $_SESSION['city'] = $_SESSION['city'];}
if (isset($_POST['room'])) { $_SESSION['room'] = $_POST['room'];} else { $_SESSION['room'] = $_SESSION['room'];}
?>
далее выводим через дитто фильтр. Но т.к. у меня видимо конфликт ditto и phx использовал подстановку в дитто через &documents=`[[vibor]]`
Сниппет vibor с помощью 1 запроса к базе создает список выбранных фильтром документов.
<?php
$table = $modx->getFullTableName("site_content");
$table2 = $modx->getFullTableName("site_tmplvar_contentvalues");
$table3 = $modx->getFullTableName("site_tmplvar_templates");
$city = $_SESSION['city'];
$room = $_SESSION['room'];
$typedom = $_SESSION['typedom'];
$sqlcity = empty($_POST['city']) ? " " : "and id in (select contentid from $table2 where tmplvarid=20 and value='$city') ";
$sqlroom = empty($_POST['room']) ? " " : "and id in (select contentid from $table2 where tmplvarid=28 and value='$room') ";
$sqltypedom = empty($_POST['typedom']) ? " " : "and id in (select contentid from $table2 where tmplvarid=32 and value='$typedom') ";
// sostavlenie zaprosa
$where = "template=4 $sqlcity $sqlroom $sqltypedom";
$dbQuery = "SELECT id FROM $table WHERE $where";
// vivod id
$rs = $modx->db->query($dbQuery);
$row = $modx->db->getColumn("id",$rs);
$res = implode(",", $row);
return $res;
?>
tmplvarid=номер tv параметра в базе (n).
Итого, получаем меньше поползновений дитто в базу.
В фильтре уже от лени
испоьзую phx. На примере:
<select name="typedom">
<option [*phx:if=`[*phx:session=`typedom`*]`:is=``:then=` value="" SELECTED`:else=`value=""`*] >любой</option>
<option [*phx:if=`[*phx:session=`typedom`*]`:is=`Вилла`:then=` value="Вилла" SELECTED`:else=`value="Вилла"`*] >Вилла</option>
<option [*phx:if=`[*phx:session=`typedom`*]`:is=`Квартира`:then=` value="Квартира" SELECTED`:else=`value="Квартира"`*] >Квартира</option>
<option [*phx:if=`[*phx:session=`typedom`*]`:is=`Бунгало`:then=` value="Бунгало" SELECTED`:else=`value="Бунгало"`*] >Бунгало</option>
</select>
Получаю зафиксированную сессией строку селектора.
Не идеально, но работает.
UPD: phx:session
<?php
return $_SESSION[$options];
?>