Я пытаюсь изменить этот фрагмент Modx, чтобы он принимал несколько значений, возвращаемых из db, а не по умолчанию.Проблема множественного предложения WHERE
tvTags, по умолчанию, предназначался только для одной переменной. Я немного изменил его, чтобы он взорвался в список переменных. Я хотел бы запросить базу данных для каждой из этих переменных и вернуть теги, связанные с каждым. Тем не менее, у меня возникают трудности, поскольку я довольно новичок в SQL и PHP.
Я подключился к $ region, и он работает, но я не уверен, как добавить дополнительные предложения WHERE для переменной $ countries.
Благодарим за помощь!
if (!function_exists('getTags')) {
function getTags($cIDs, $tvTags, $days) {
global $modx, $parent;
$docTags = array();
$baspath= $modx->config["base_path"] . "manager/includes";
include_once $baspath . "/tmplvars.format.inc.php";
include_once $baspath . "/tmplvars.commands.inc.php";
if ($days > 0) {
$pub_date = mktime() - $days*24*60*60;
} else {
$pub_date = 0;
}
list($region, $countries) = explode(",", $tvTags);
$tb1 = $modx->getFullTableName("site_tmplvar_contentvalues");
$tb2 = $modx->getFullTableName("site_tmplvars");
$tb_content = $modx->getFullTableName("site_content");
$query = "SELECT stv.name,stc.tmplvarid,stc.contentid,stv.type,stv.display,stv.display_params,stc.value";
$query .= " FROM ".$tb1." stc LEFT JOIN ".$tb2." stv ON stv.id=stc.tmplvarid ";
$query .= " LEFT JOIN $tb_content tb_content ON stc.contentid=tb_content.id ";
$query .= " WHERE stv.name='".$region."' AND stc.contentid IN (".implode($cIDs,",").") ";
$query .= " AND tb_content.pub_date >= '$pub_date' ";
$query .= " AND tb_content.published = 1 ";
$query .= " ORDER BY stc.contentid ASC;";
$rs = $modx->db->query($query);
$tot = $modx->db->getRecordCount($rs);
$resourceArray = array();
for($i=0;$i<$tot;$i++) {
$row = @$modx->fetchRow($rs);
$docTags[$row['contentid']]['tags'] = getTVDisplayFormat($row['name'], $row['value'], $row['display'], $row['display_params'], $row['type'],$row['contentid']);
}
if ($tot != count($cIDs)) {
$query = "SELECT name,type,display,display_params,default_text";
$query .= " FROM $tb2";
$query .= " WHERE name='".$region."' LIMIT 1";
$rs = $modx->db->query($query);
$row = @$modx->fetchRow($rs);
$defaultOutput = getTVDisplayFormat($row['name'], $row['default_text'], $row['display'], $row['display_params'], $row['type'],$row['contentid']);
foreach ($cIDs as $id) {
if (!isset($docTags[$id]['tags'])) {
$docTags[$id]['tags'] = $defaultOutput;
}
}
}
return $docTags;
}
}
Спасибо за ваш ответ! Похоже, что это не работает, хотя страны $ не являются массивом. Мне просто нужно запросить значение, содержащееся в области $ region, и вернуть связанные с ним теги, затем запросить значение, связанное с $ странами, и вернуть с ним теги. $ region = "region" и $ countries = "countries" Извините за путаницу. – Vecta
О, извините, проблем нет. То же решение без цикла, '$ query. =" OR stv.name = '{$ countries}', ";' –