stolen some code from getResources and created a function:
function sortTV($sort, &$c, $dir = 'ASC', $sortbyTVType = '')
{
$c->leftJoin('modTemplateVar', 'tvDefault', array("tvDefault.name" => $sort));
$c->leftJoin('modTemplateVarResource', 'tvSort', array("tvSort.contentid = modResource.id", "tvSort.tmplvarid = tvDefault.id"));
if (empty($sortbyTVType)) $sortbyTVType = 'string';
if ($this->modx->getOption('dbtype') === 'mysql') {
switch ($sortbyTVType) {
case 'integer':
$c->select("CAST(IFNULL(tvSort.value, tvDefault.default_text) AS SIGNED INTEGER) AS sortTV");
break;
case 'decimal':
$c->select("CAST(IFNULL(tvSort.value, tvDefault.default_text) AS DECIMAL) AS sortTV");
break;
case 'datetime':
$c->select("CAST(IFNULL(tvSort.value, tvDefault.default_text) AS DATETIME) AS sortTV");
break;
case 'string':
default:
$c->select("IFNULL(tvSort.value, tvDefault.default_text) AS sortTV");
break;
}
}
$c->sortby("sortTV", $dir);
return true;
}
use it:
sortTV('MyDateTv', $criteria);
[ed. note: Bruno17 last edited this post 14 years, 6 months ago.]