Все проще есть же replace() if($tematic = (int)$this->getProperty('tematic')){
$query->innerJoin('modTemplateVarResource',
'tematic', "tematic.contentid = {$this->classKey}.id AND
tematic.tmplvarid = 14 AND find_in_set('{$tematic}', replace(tematic.value, '||', ',') )");
}
все верно. str_replace — это не функция mysql — отсюда и ошибка.Фукция innerJoin генерирует SQL-код. А туда нет доступа php. Я вижу пока только тот вариант, что описал — нужно наличие поля, в котором значения разделены запятой. Где-то тут на сайте я видел статью о плагине, который перехватывает сохранение документа и делает необходимые преобразования. Его можно взять за основу.
пробовал вот так прописать $c->innerJoin('modTemplateVarResource', "tematic", "tematic.contentid = {$this->classKey}.id AND tematic.tmplvarid = 14 AND find_in_set('{$tematic}', '{str_replace('||', ',', tematic.value)}' )"); На выходе получаю 2015-05-01 17:37:37] (ERROR @ /index.php)
modSiteWebGetlistProcessor
[2015-05-01 17:37:37] (ERROR @ /index.php)
Array
(
[0] => 42000
[1] => 1064
[2] => You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE ( modResource
.deleted
= 0 AND modResource
.hidemenu
= 0 AND modRe' at line 1 ) [2015-05-01 17:37:37] (ERROR @ /index.php) SELECT COUNT(DISTINCT
modResource.
id) FROM
modx_site_contentAS
modResourceJOIN
modx_shopmodx_products
ProductON
modResource.
id=
Product.
resource_idJOIN
modx_site_tmplvar_contentvalues
tematicON WHERE (
modResource.
deleted= 0 AND
modResource.
hidemenu= 0 AND
modResource.
published` = 1 )
в тонкостях mysql не так силен, как Николай :) find_in_set ищет подстроку с разделителями "," — и "||" тут не проходит. как вариант — завести еще одну tv, паписать плагин, который при сохранении документа просто переконвертирует список в строку с разделителем "," — и затем по этому полю уже использовать find_in_set www.codenet.ru/db/mysql/mystring4.php#find_in_set
в таблице список хранится в виде key1||key2||key3 или key1==val1||key2==val2||key3==val3 и тип вывода никак на это не влияет.
Сделал последним вариантом Все работает, есkи тип tv по умолчанию — вписываю 191,195 к примеру — работает.Но не пойму почему, когда я создаю тип tv множественный список ресурсов, добавляю тип вывода с разделителем через, — не работает. Проверял тв выводит аналогично 191,195. в чем может быть косяк