<?php
public function prepareQueryBeforeCount(xPDOQuery $c){
$c = parent::prepareQueryBeforeCount($c);
$alias = $c->getAlias();
$where = array();
if($tags = trim($this->getProperty('tags'))){
$tags_arr = explode(',', $tags);
$tags_arr = array_map('trim', $tags_arr);
$tags_arr = array_map(function($str){
global $modx;
$str = $modx->quote($str);
$str = "FIND_IN_SET({$str}, replace(tags_tv.value, '||', ','))";
return $str;
}, $tags_arr);
$find_in_set = implode(' OR ', $tags_arr);
$c->innerJoin('modTemplateVarResource', "tags_tv", "tags_tv.tmplvarid = 18 AND tags_tv.contentid = {$alias}.id AND ({$find_in_set})");
}
if($where){
$c->where($where);
}
return $c;
}
Как видно, здесь я передаваемую строку разбиваю по запятой в массив и набиваю в итоге вот в такую хитрую строку:
FIND_IN_SET('оптимизация', replace(tags_tv.value, '||', ',')) OR FIND_IN_SET('тормозит сайт', replace(tags_tv.value, '||', ',')) OR FIND_IN_SET('нагрузка на сервер', replace(tags_tv.value, '||', ','))