We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 3190
    • 12 Posts
    Проблема оказываеться в использовании плагина PHX, он парсит параметры ditto и выкусывает скобки "[]", если выключаю плагин то все работает. Есть ли возможность отключить PHX для определенной страницы сайта? Вариант с ditto кэшированным на не некэшированной странице, или же использование параметра &phx не помогает sad
    Вызов
    [[Ditto? &parents=`[*id*]` &tpl=`tpl_list_PODcategory` &id=`aa` &summarize=`32` &paginate=`1` &paginateAlwaysShowLinks=`1` &tplPaginatePrevious=`previous` &tplPaginateNext=`next` &sortBy=`tvissklad0,pub_date` &sortDir=`DESC` &filter=`tvprice0,@EVAL return($_GET[’a’]);,6` ]]
      • 3190
      • 12 Posts
      Quote from: iNdigo at Jan 23, 2008, 06:18 PM

      Пытаюсь сделать поиск, как описано тут - http://modx.ru/blog/409.
      .....
      Естественный вопрос - что делать?

      При использовании плагина PHx пример из блога работать не будет. Я решил эту проблему сделав extender (myFilter.extender.inc.php):
      в assets/snippets/ditto/extenders/myFilter.extender.inc.php
      <?php
      
      $filters["custom"]["myFilter"] = array("id","execFilter"); 
      
      function execFilter($id){
      	global $modx;
      	if (!(isset($_REQUEST['cena_ot']) or isset($_REQUEST['cena_do']) or isset($_REQUEST['height']))){
      	return 1;
      	}
      	$result=0;
      	for ($i=0; $i<8; $i++){
      		$tv[$i]=$modx->getTemplateVarOutput(array(('size'.$i),('price'.$i)),$id['id']);
      	}
      	$cena_ot = (isset($_REQUEST['cena_ot']) and $_REQUEST['cena_ot']!='' )?floatval($_REQUEST['cena_ot']):0;
      	$cena_do = (isset($_REQUEST['cena_do']) and $_REQUEST['cena_do']!='' )?floatval($_REQUEST['cena_do']):1000000;
      	if (isset($_REQUEST['height']) and $_REQUEST['height']!=''){
      		for ($i=0; $i<8; $i++){
      			$height = floatval($_REQUEST['height']);
      			if ($tv[$i]['price'.$i]!='' and floatval($tv[$i]['price'.$i])>=$cena_ot and floatval($tv[$i]['price'.$i])<=$cena_do and $height>=floatval($tv[$i]['size'.$i])) {$result=1; break;}
      		}
      		
      	}
      	else {
      		for ($i=0; $i<8; $i++){
      			if ($tv[$i]['price'.$i]!='' and floatval($tv[$i]['price'.$i])>=$cena_ot and floatval($tv[$i]['price'.$i])<=$cena_do) {$result=1; break;}
      		}		
      	}
      	return $result;
      }
      
      ?>


      в вызове ditto добавляю параметр &extenders=`myFilter`, и все работает. Полностью вызов выглядит так

      [[Ditto? &parents=`[*id*]` &id=`aa` &extenders=`request,myFilter` &tpl=`tpl_list_PODcategory` &summarize=`32` &paginate=`1` &paginateAlwaysShowLinks=`1` &tplPaginatePrevious=`previous` &tplPaginateNext=`next` &sortBy=`tvissklad0,pub_date` &sortDir=`DESC` ]]
      


      ditto фильтрует каждый документ по 16 TV
        • 24803
        • 61 Posts
        Всем привет разбираюсь с фильтром при использовании phx
        Есть сниппет формы поиска:

        <p class="error"></p>
        <form action="katalog-specztexniki.html" method="post" enctype="multipart/form-data">
        Тип спецсредства<br>
        [[tvout? &formname=`produkciya` &paramtv=`produkciya` &id_template=54]] <!Здесь сниппет для вывода DropDownList - select с именем produkciya и со значениями возможных параметров tv-->
        <br><br>
        Год<br>
        [[tvout? &formname=`year` &paramtv=`year` &id_template=54]]  <!Здесь сниппет для вывода DropDownList - select с именем year и со значениями возможных параметров tv-->
        <br><br>
         <label>Цена от: </label>
          <input name="cena_ot" type="text" size="15" maxlength="15" />
        <br><br>
         <label>Цена до: </label>
          <input name="cena_do" type="text" size="15" maxlength="15" />
        <br><br>
        <p><input type="submit" name="frmGo" value="Послать" /></p>
        </form>


        Далее модифицировал сниппет myFilter.extender.inc.php

        <?php
        
        $filters["custom"]["myFilter"] = array("id","execFilter"); 
        function execFilter($id){
        	global $modx;
        	if (!(isset($_REQUEST['cena_ot']) or isset($_REQUEST['cena_do']) or isset($_REQUEST['year']))){
        	return 1;
        	}
        	$result=0;
        //Получаем ТВ документа
        	$tvyear=$modx->getTemplateVarOutput('year',$id['id']);
        	$tvprice=$modx->getTemplateVarOutput('price',$id['id']);
        //Устанавливаем цену от и до
        	$cena_ot = (isset($_REQUEST['cena_ot']) and $_REQUEST['cena_ot']!='' )?floatval($_REQUEST['cena_ot']):0;
        	$cena_do = (isset($_REQUEST['cena_do']) and $_REQUEST['cena_do']!='' )?floatval($_REQUEST['cena_do']):1000000;
        	if (isset($_REQUEST['year']) and $_REQUEST['year']!='')	{
        		$year = floatval($_REQUEST['year']);
        		if ($tvprice!='' and floatval($tvprice)>=$cena_ot and floatval($tvprice)<=$cena_do and $year=floatval($tvyear)) {$result=1;}
        	}
        	else {
        		if ($tvprice!='' and floatval($tvprice)>=$cena_ot and floatval($tvprice)<=$cena_do) {$result=1;}
        	}		
        	return $result;
        }
        ?>
        


        Сделал пока дату и цену.
        так вот какую бы цену не бвыбрал - выводит полный список элементов (тоесть не фильтрует)
        Когда заполняешь цену от и до - то выводит "Записей не найдено.", хотя по идее должен выводить "Извините, Спецтехники по Вашему запросу не найдено."

        вызов ditto вот такой:

        [[Ditto? &tpl=`spectehnika` 
        &parents=`3` 
        &extenders=`request,myFilter`
        noResults=`Извините, Спецтехники по Вашему запросу не найдено.`]]


        Где я накосячил? подскажите пожалуйста!
          • 24803
          • 61 Posts
          Народ неужели никто не знает(?
            • 1788
            • 1,103 Posts
            Quote from: rellai at Jun 21, 2010, 01:00 PM

            Народ неужели никто не знает(?
            Замечено, если фильтр добавить после содания документа - он не работает.
            Т.е. дитто берет документ и ищет поле фильтра, а так как фильтра нет для взятого документы (например оно пустое) - фильтр не страбатывает.
            Пересохраните документы для фильтрации, должно помочь.
              • 24803
              • 61 Posts
              Понял почему выводит "Записей не найдено." - так как перед noResult забыл поставить &
              как поставил - теперь вообще после выборки ничего не отображается shocked

              Может в исходном примере в вызове дито прописан id="aa" - это имеет значение?

              Пересохранил фильтруемые элементы - все тоже самое...

              В чем еще проблема может быть...измучался(
                • 1788
                • 1,103 Posts
                Вообще с фильтраций в дитто бывают траблы.
                В ветке уроков есть мое решение без использования фильтра в дитто.
                  • 24803
                  • 61 Posts
                  А не подскажите ссылку?)
                  поискал не нашел....
                    • 1788
                    • 1,103 Posts
                    Quote from: rellai at Jun 21, 2010, 11:40 PM

                    А не подскажите ссылку?)
                    поискал не нашел....
                    http://modxcms.com/forums/index.php/topic,47285.0.html
                      • 24803
                      • 61 Posts
                      СПАСИБО за наводку) только немного непонятно все еще ) )
                      1) куда вставляем первый сниппет?

                      2) это используется для заполнения фильтра? если он был заполнен?
                      <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>


                      что делает этот код и куда вставлять?
                      <?php
                      return $_SESSION[$options];
                      ?>