Помогите с фильтрацией

Добрый день Всем! Помогите пожалуйста в modx я новичок и поэтому многих вопросов не знаю.
Вопрос в следующем: необходимо сделать фильтрацию на сайте. Изначально использовал и 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);
Только вот не пойму как вывести ресурсы? Ресурсы хранятся в контейнере и необходимо что бы человек попадая в контейнер ему выводились все ресурсы, а при фильтрации только определенные?
vlad
12 мая 2015, 08:12
modx.pro
1 135
0

Комментарии: 2

Василий Наумкин
12 мая 2015, 11:22
0
Тебя самого не напрягает, что код на странице выглядит не очень? Может, стоит использовать тег code для оформления, как об этом предупреждают на странице создания тикета?
    vlad
    12 мая 2015, 11:24
    0
    Щас спасибо — я просто первый раз!
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    2