Помогите с фильтрацией
Вопрос в следующем: необходимо сделать фильтрацию на сайте. Изначально использовал и tag manager2 и mfilter поначалу все выводило и я естественно был доволен как слон. Но через некоторое время перестало выводить сам фильтр. решил написать свой снипет, но тут возникла загвоздка.
1) Вот мой самописный код:
$type_advert = $_POST['type_advert'];
$priceye=$_POST['priceye'];
$districts = $_POST['districts'];
//Берем данные ресурсов с БД
$sql = "SELECT id, pagetitle, description, content FROM modx_site_content where template=5" ;
$q = $modx->prepare($sql);
$q->execute(array(0));
$arr = $q->fetchAll(PDO::FETCH_ASSOC);
//print_r($arr);
//Берем данные TV с БД
$sql2 = "SELECT tmplvarid, contentid, value FROM modx_site_tmplvar_contentvalues WHERE tmplvarid IN (10, 8, 22)" ;
$q2 = $modx->prepare($sql2);
$q2->execute(array(0));
$arr2 = $q2->fetchAll(PDO::FETCH_ASSOC);
//print_r($arr2);
//Обработка данных
$array=array();
foreach ($arr as $k=> $value){
foreach($arr2 as $val){
if($value['id']==$val['contentid']){
$ney=array($val["tmplvarid"]=>$val["value"]) ;
echo "<pre>";
array_push($arr[$k], $ney) ;
// var_dump($arr[$k], $ney);
}
}
}
//вывод результатов
//echo $arr=$type_advert.' '.$priceye.' '.$districts;
foreach ($arr as $value){
//print_r($value);
//var_dump($arr);
}
Но он выводит все результаты, а мне необходимо выводит только те результаты которые попадают под фильтр2) Не много покопавшись нашел «Шорткоды на modx» (кстати кому интересно вот ссыллка mycode.in.ua/modx/shortcodes.html), так вот сам код:
//Принимает POST
$type_advert = '1 комнатные квартиры';
$priceye=$_POST['priceye'];
$districts = 'Алексеевка';
$pagetitles = array();
$query = $modx->newQuery('modTemplateVarResource', array('tmplvarid' => 10, 'value:LIKE' => $type_advert));
//$query = $modx->newQuery('modTemplateVarResource', array('tmplvarid' => 8, 'value:LIKE' => $districts));
$query->innerJoin('modResource', 'r', 'r.id = modTemplateVarResource.contentid');
$query->select('r.pagetitle');
$query->sortby('r.pagetitle','ASC');
$query->limit(10);
if ($query->prepare() && $query->stmt->execute()) {
$res = $query->stmt->fetchAll(PDO::FETCH_ASSOC);
foreach($res as $r){
$pagetitles[] = $r['pagetitle'];
}
}
var_dump($pagetitles);
Вопрос в шледующем как задать второе условие ну типа что то такого:$query = $modx->newQuery('modTemplateVarResource', array('tmplvarid' => 10, 'value:LIKE' => $type_advert) and ('tmplvarid' => 8, 'value:LIKE' => $districts));
Сам POST выглядит вот так:
<div class="content">
<div class="filter">
<form action="" method="post">
<select name="type_advert" placeholder="кол-во комнат">
<option value="1 комната">1 комната</option>
<option value="2 комнаты">2 комнаты</option>
<option value="3 комнаты">3 комнаты</option>
<option value="4 комнаты и больше">4 комнаты и больше</option>
<option value="Гостинки">Гостинки</option>
</select>
<label for="priceye">Цена ($)</label>
<input id="price_min" type="text" placeholder="От">
<input id="price_max" type="text" placeholder="До">
<select name="districts" placeholder="Район">
<option value="Алексеевка">Алексеевка</option>
<option value="Аэропорт">Аэропорт</option>
<option value="Восточный">Восточный</option>
<option value="Гагарина (нач.)">Гагарина (нач.)</option>
<option value="Госпром">Госпром</option>
<option value="Жуковского">Жуковского</option>
<option value="Журавлевка">Журавлевка</option>
<option value="З-д Шевченко">З-д Шевченко</option>
<option value="Залютино">Залютино</option>
<option value="Ивановка">Ивановка</option>
<option value="Конный рынок">Конный рынок</option>
<option value="Красный Луч">Красный Луч</option>
<option value="Лысая Гора">Лысая Гора</option>
<option value="Москалевка">Москалевка</option>
<option value="Н.Бавария">Н.Бавария</option>
<option value="Немышля">Немышля</option>
<option value="Новые Дома">Новые Дома</option>
<option value="Одесская">Одесская</option>
<option value="Основа">Основа</option>
<option value="Павлово Поле">Павлово Поле</option>
<option value="Павловка">Павловка</option>
<option value="Песочин">Песочин</option>
<option value="Пятихатки">Пятихатки</option>
<option value="Роганский">Роганский</option>
<option value="Салтовка">Салтовка</option>
<option value="Сев.Салтовка">Сев.Салтовка</option>
<option value="Сортировка">Сортировка</option>
<option value="Холодная Гора">Холодная Гора</option>
<option value="ХТЗ">ХТЗ</option>
<option value="Центр">Центр</option>
<option value="Шишковка">Шишковка</option>
<option value="Южный Вокзал и Центральный Рынок">Южный Вокзал и Центральный Рынок</option>
<option value="Харьковская обл.">Харьковская обл.</option>
</select>
<button type="submit">Подобрать</button>
</form>
</div>
Спасибо заранее!Так вроде разобрался мало ли может кому и пригодиться:
Снипет выглядит следующем образом:
//Принимает POST
$type_advert = $_POST['type_advert'];
$priceye=$_POST['priceye'];
$districts = $_POST['districts'];
$type_advert_id = 10;
$priceye_id = 22;
$districts_id = 8;
//Берем данные ресурсов с БД
$sql = "SELECT id, pagetitle, description, content FROM modx_site_content where template=5" ;
$q = $modx->prepare($sql);
$q->execute(array(0));
$arr = $q->fetchAll(PDO::FETCH_ASSOC);
//print_r($arr);
//Берем данные TV с БД
$sql2 = "SELECT tmplvarid, contentid, value FROM modx_site_tmplvar_contentvalues WHERE tmplvarid IN ($type_advert_id, $priceye_id, $districts_id)" ;
$q2 = $modx->prepare($sql2);
$q2->execute(array(0));
$arr2 = $q2->fetchAll(PDO::FETCH_ASSOC);
//print_r($arr2);
//Обработка данных
$array=array();
foreach ($arr as $k=> $value){
foreach($arr2 as $val){
if($value['id']==$val['contentid']){
$ney=array($val["tmplvarid"]=>$val["value"]) ;
array_push($arr[$k], $ney) ;
}
}
}
//вывод результатов
//echo $arr=$type_advert.' '.$priceye.' '.$districts;
foreach ($arr as $value){
//var_dump($k);
//print_r($value);
}
foreach ($arr as $kv_key => $kv)
{
for($i=0; isset($kv[$i]) ; $i++ ){
foreach ($kv[$i] as $key => $value) {
switch ($key) {
case 8:
if($value != $districts) {unset($arr[$kv_key]);}
break;
case 10:
if($value != $type_advert) {unset($arr[$kv_key]);}
break;
case 22:
if( $price_max && $price_min){
if($value > $price_max || $value < $price_min ) {unset($arr[$kv_key]);}
}
break;
}
}
}
}
//var_dump($arr);
Только вот не пойму как вывести ресурсы? Ресурсы хранятся в контейнере и необходимо что бы человек попадая в контейнер ему выводились все ресурсы, а при фильтрации только определенные? Комментарии: 2
Тебя самого не напрягает, что код на странице выглядит не очень? Может, стоит использовать тег code для оформления, как об этом предупреждают на странице создания тикета?
Щас спасибо — я просто первый раз!
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.