We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 11188
    • 49 Posts
    Стоит передо мной задача, сделать фильтрацию по тв параметрам по типу:
    (a==1 OR a==2 OR a==3) AND (b==11 OR b==12 OR b==13) AND ...

    средствами tvFilters (судя по неудачным попыткам и коду самого сниппета) я могу сделать только:
    a==1 OR b==11


    подскажите, может кто сталкивался, как можно решить мою задачу?
      • 11188
      • 49 Posts
      вобщем выкрутился.
      в код getResource, после обработки tvFilters, где-то 187 строка, нужно добавить такой код:
      if($tvFilterComplex)
      {
        $tmplVarTbl = $modx->getTableName('modTemplateVar');
        $tmplVarResourceTbl = $modx->getTableName('modTemplateVarResource');
        $conditions = array();
        $filters = explode("||", $tvFilterComplex);
        foreach($filters as $filter)
        {
          list($tv_name, $tv_values) = explode("==", $filter);
          $tv_vals = explode(",", $tv_values);
          $arr = array();
          foreach ($tv_vals as $tv_val) $arr[] = "`tvr`.`value` LIKE '{$tv_val}'";
          
          $part = implode(" OR ", $arr);
          $conditions[][] = "EXISTS (SELECT 1 FROM {$tmplVarResourceTbl} `tvr` JOIN {$tmplVarTbl} `tv` ON ({$part}) AND `tv`.`name` = '{$tv_name}' AND `tv`.`id` = `tvr`.`tmplvarid` WHERE `tvr`.`contentid` = `modResource`.`id`)";
        }
        if (!empty($conditions)) {
          foreach ($conditions as $cGroup => $c) {
              $criteria->andCondition($c);
          }
        }
      }


      использовать такой параметр можно так:
      [[!getResource? &tvFilterComplex=`Размер==1,4||Цвет==2,3`]]

      выборка будет по тем документам у которых тв Размер равен 1 или 4, и тв Цвет равен 2 или 3.

      делал я эту штуку для фильтрации по типа яндекс маркета.

      надеюсь кому-то пригодится.
        • 21190
        • 6 Posts
        Спасибище огромнейшее! laugh