Thanks Bruno - I’m sure this will be helpful.
However, I’m actually trying to right a snippet and so would like to know to do this from PHP - not from a snippet.
My apologies - I left that part out.
<?php
$debug=1;
$sortby='pagetitle ASC';
$tvFilters[]='TV==X';
//$parents=array('11');
$contextResourceTbl = $modx->getTableName('modContextResource');
$context = empty($context) ? $modx->quote($modx->context->get('key')) : $modx->quote($context);
$queryarray['deleted']='0';
$queryarray['published']='1';
//$queryarray[]="`modResource`.`parent` IN (" . implode(',', $parents) . ")";
$queryarray[]="(`modResource`.`context_key` = {$context} OR EXISTS(SELECT 1 FROM {$contextResourceTbl} `ctx` WHERE `ctx`.`resource` = `modResource`.`id` AND `ctx`.`context_key` = {$context}))";
$criteria = $modx->newQuery('modResource', $queryarray);
if (empty($showHidden)) {
$criteria->andCondition(array('hidemenu' => '0'));
}
if (!empty($hideContainers)) {
$criteria->andCondition(array('isfolder' => '0'));
}
if (!empty($tvFilters)) {
$tmplVarTbl = $modx->getTableName('modTemplateVar');
$tmplVarResourceTbl = $modx->getTableName('modTemplateVarResource');
$conditions = array();
foreach ($tvFilters as $fGroup => $tvFilter) {
$filterGroup = count($tvFilters) > 1 ? $fGroup + 1 : 0;
$filters = explode(',', $tvFilter);
foreach ($filters as $filter) {
$f = explode('==', $filter);
if (count($f) == 2) {
$tvName = $modx->quote($f[0]);
$tvValue = $modx->quote($f[1]);
$conditions[$filterGroup][] = "EXISTS (SELECT 1 FROM {$tmplVarResourceTbl} `tvr` JOIN {$tmplVarTbl} `tv` ON `tvr`.`value` LIKE {$tvValue} AND `tv`.`name` = {$tvName} AND `tv`.`id` = `tvr`.`tmplvarid` WHERE `tvr`.`contentid` = `modResource`.`id`)";
} elseif (count($f) == 1) {
$tvValue = $modx->quote($f[0]);
$conditions[$filterGroup][] = "EXISTS (SELECT 1 FROM {$tmplVarResourceTbl} `tvr` JOIN {$tmplVarTbl} `tv` ON `tvr`.`value` LIKE {$tvValue} AND `tv`.`id` = `tvr`.`tmplvarid` WHERE `tvr`.`contentid` = `modResource`.`id`)";
}
}
}
if (!empty($conditions)) {
foreach ($conditions as $cGroup => $c) {
if ($cGroup > 0) {
$criteria->orCondition($c, null, $cGroup);
} else {
$criteria->andCondition($c);
}
}
}
}
$total = $modx->getCount('modResource', $criteria);
$modx->setPlaceholder($totalVar, $total);
$criteria->sortby($sortby, $sortdir);
if (!empty($limit)) $criteria->limit($limit, $offset);
$columns = $includeContent ? '*' : $modx->getSelectColumns('modResource', 'modResource', '', array('content'), true);
$criteria->select($columns);
if (!empty($debug)) {
$criteria->prepare();
echo $criteria->toSQL();
}
$collection = $modx->getCollection('modResource', $criteria);
So, how should I grab a bunch of IDs in Revo of resources that have a TV (checkbox) set to yes????
$value = 1;
$c = $modx->newQuery('modResource');
$c->innerJoin('modTemplateVarResource','TemplateVarResources');
$c->where(array(
'TemplateVarResources.tmplvarid' => 123,
'"'.$value.'" IN (TemplateVarResources.value)',
'modResource.deleted' => false,
));
$resources = $modx->getCollection('modResource',$c);
$value = 'red';
$c = $modx->newQuery('modResource');
$c->innerJoin('modTemplateVarResource','TemplateVarResources');
$c->where(array(
'TemplateVarResources.tmplvarid' => 123,
'TemplateVarResources.value:LIKE' => '%' . $value . '%',
'modResource.deleted' => 0,
'modResource.published' => 1,
));
$resources = $modx->getCollection('modResource',$c);||blue||green||red||orange-red||
$value = 'red';
$c = $modx->newQuery('modResource');
$c->innerJoin('modTemplateVarResource','TemplateVarResources');
$c->where(array(
'TemplateVarResources.tmplvarid' => 123,
'TemplateVarResources.value:LIKE' => '%||' . $value . '||%',
'modResource.deleted' => 0,
'modResource.published' => 1,
));
$resources = $modx->getCollection('modResource',$c);