We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 24629
    • 370 Posts
    Hi all,

    im trying to get a collection and sort the result on a TV which is a date.
    how do i do that. right now i have

    $criteria = $modx->newQuery('modResource');
    $criteria->where(array(
               'published' => 1,
               'deleted'=> 0,
               'template'=> 5
               ));
    $criteria->sortby('MyDateTv','ASC');
    
    $agendaBlocks  = $modx->getCollection('modResource',$criteria);
    
    


    but that doesnt work, obviously.
    How can i do this

    tnx
    Rdg
      • 4172
      • 5,888 Posts
      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.]
        -------------------------------

        you can buy me a beer, if you like MIGX

        http://webcmsolutions.de/migx.html

        Thanks!