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

    I use Bob Ray's book to find out how to make News on my site. On the page 566 there is News Summary tutorial to make one, but I didn´t get it work.

    I am working locally on MAMP and MODX Revolution 2.2.10-pl. I installed latest getResources snippet and follow all the instructions on the pages 566-567. I just wondering that my problem could be possible that I did´t get it work locally on MAMP? If someone knows that issue, would you please tell me what I should do. Next I´m going to try this on server, but it would be great to have it work on local environment too (develop the site).

    Anyway Bob Ray´s book is awesome and I just noticed that book is also on digital format, great work Bob!

    Thank you,
    Tom

    This question has been answered by hamada. See the first response.

      • 28042 ☆ A M B ☆
      • 24,524 Posts
      It will work anywhere if it's used correctly. I use MAMP myself.
        Studying MODX in the desert - http://sottwell.com
        Tips and Tricks from the MODX Forums and Slack Channels - http://modxcookbook.com
        Join the Slack Community - http://modx.org
        • 3749
        • 24,544 Posts
        Post your getResources tag here (highlight it and click on the <> Icon so the forum will show it properly). Also, tell us what you see when you view the page.
          Did I help you? Buy me a beer
          Get my Book: MODX:The Official Guide
          MODX info for everyone: http://bobsguides.com/modx.html
          My MODX Extras
          Bob's Guides is now hosted at A2 MODX Hosting
          • 39982
          • 28 Posts
          Hi, and thank you for your response.

          Sottwell, I thought that also it should be work fine with MAMP on local environment too, but there is something wrong, because I tried it also on live server.

          BobRay, when I load the page "News Container" it shows a blank page. Other pages show their Content area text when I click "View"

          I’m using MODX default BaseTemplate in the News Container and have the following inside the Content area
          [[!getResources? &tpl=`getResourcesTpl` &idx=`1` &includeContent=`1`]]


          News container has checked ”Hide From Menus” and ”Published”
          News Story 1, News Story 2, News Story 3, News Story 4 use all BaseTemplate for default and "Hide From Menus" and "Published" are checked.

          and the getResourcesTpl Chunk is
          <div class="grItem">Item [[+idx]]: [[+pagetitle]]
          <br />
          Author: [[+createdby:userinfo=`fullname`]]
          Date: [[+createdon:strtotime:date=`%A %B %d, %Y`]]
          <br />
          [[+introtext]] . . . <a href="[[~[[+id]]]]">Read More</a>
          </div><br />
          


          getResources Snippet tag
          <?php
          /**
           * getResources
           *
           * A general purpose Resource listing and summarization snippet for MODX 2.x.
           *
           * @author Jason Coward
           * @copyright Copyright 2010-2013, Jason Coward
           *
           * TEMPLATES
           *
           * tpl - Name of a chunk serving as a resource template
           * [NOTE: if not provided, properties are dumped to output for each resource]
           *
           * tplOdd - (Opt) Name of a chunk serving as resource template for resources with an odd idx value
           * (see idx property)
           * tplFirst - (Opt) Name of a chunk serving as resource template for the first resource (see first
           * property)
           * tplLast - (Opt) Name of a chunk serving as resource template for the last resource (see last
           * property)
           * tpl_{n} - (Opt) Name of a chunk serving as resource template for the nth resource
           *
           * tplCondition - (Opt) Defines a field of the resource to evaluate against keys defined in the
           * conditionalTpls property. Must be a resource field; does not work with Template Variables.
           * conditionalTpls - (Opt) A JSON object defining a map of field values and the associated tpl to
           * use when the field defined by tplCondition matches the value. [NOTE: tplOdd, tplFirst, tplLast,
           * and tpl_{n} will take precedence over any defined conditionalTpls]
           *
           * tplWrapper - (Opt) Name of a chunk serving as a wrapper template for the output
           * [NOTE: Does not work with toSeparatePlaceholders]
           *
           * SELECTION
           *
           * parents - Comma-delimited list of ids serving as parents
           *
           * context - (Opt) Comma-delimited list of context keys to limit results by; if empty, contexts for all specified
           * parents will be used (all contexts if 0 is specified) [default=]
           *
           * depth - (Opt) Integer value indicating depth to search for resources from each parent [default=10]
           *
           * tvFilters - (Opt) Delimited-list of TemplateVar values to filter resources by. Supports two
           * delimiters and two value search formats. The first delimiter || represents a logical OR and the
           * primary grouping mechanism.  Within each group you can provide a comma-delimited list of values.
           * These values can be either tied to a specific TemplateVar by name, e.g. myTV==value, or just the
           * value, indicating you are searching for the value in any TemplateVar tied to the Resource. An
           * example would be &tvFilters=`filter2==one,filter1==bar%||filter1==foo`
           * [NOTE: filtering by values uses a LIKE query and % is considered a wildcard.]
           * [NOTE: this only looks at the raw value set for specific Resource, i. e. there must be a value
           * specifically set for the Resource and it is not evaluated.]
           *
           * tvFiltersAndDelimiter - (Opt) Custom delimiter for logical AND, default ',', in case you want to
           * match a literal comma in the tvFilters. E.g. &tvFiltersAndDelimiter=`&&`
           * &tvFilters=`filter1==foo,bar&&filter2==baz` [default=,]
           *
           * tvFiltersOrDelimiter - (Opt) Custom delimiter for logical OR, default '||', in case you want to
           * match a literal '||' in the tvFilters. E.g. &tvFiltersOrDelimiter=`|OR|`
           * &tvFilters=`filter1==foo||bar|OR|filter2==baz` [default=||]
           *
           * where - (Opt) A JSON expression of criteria to build any additional where clauses from. An example would be
           * &where=`{{"alias:LIKE":"foo%", "OR:alias:LIKE":"%bar"},{"OR:pagetitle:=":"foobar", "AND:description:=":"raboof"}}`
           *
           * sortby - (Opt) Field to sort by or a JSON array, e.g. {"publishedon":"ASC","createdon":"DESC"} [default=publishedon]
           * sortbyTV - (opt) A Template Variable name to sort by (if supplied, this precedes the sortby value) [default=]
           * sortbyTVType - (Opt) A data type to CAST a TV Value to in order to sort on it properly [default=string]
           * sortbyAlias - (Opt) Query alias for sortby field [default=]
           * sortbyEscaped - (Opt) Escapes the field name(s) specified in sortby [default=0]
           * sortdir - (Opt) Order which to sort by [default=DESC]
           * sortdirTV - (Opt) Order which to sort by a TV [default=DESC]
           * limit - (Opt) Limits the number of resources returned [default=5]
           * offset - (Opt) An offset of resources returned by the criteria to skip [default=0]
           * dbCacheFlag - (Opt) Controls caching of db queries; 0|false = do not cache result set; 1 = cache result set
           * according to cache settings, any other integer value = number of seconds to cache result set [default=0]
           *
           * OPTIONS
           *
           * includeContent - (Opt) Indicates if the content of each resource should be returned in the
           * results [default=0]
           * includeTVs - (Opt) Indicates if TemplateVar values should be included in the properties available
           * to each resource template [default=0]
           * includeTVList - (Opt) Limits the TemplateVars that are included if includeTVs is true to those specified
           * by name in a comma-delimited list [default=]
           * prepareTVs - (Opt) Prepares media-source dependent TemplateVar values [default=1]
           * prepareTVList - (Opt) Limits the TVs that are prepared to those specified by name in a comma-delimited
           * list [default=]
           * processTVs - (Opt) Indicates if TemplateVar values should be rendered as they would on the
           * resource being summarized [default=0]
           * processTVList - (opt) Limits the TemplateVars that are processed if included to those specified
           * by name in a comma-delimited list [default=]
           * tvPrefix - (Opt) The prefix for TemplateVar properties [default=tv.]
           * idx - (Opt) You can define the starting idx of the resources, which is an property that is
           * incremented as each resource is rendered [default=1]
           * first - (Opt) Define the idx which represents the first resource (see tplFirst) [default=1]
           * last - (Opt) Define the idx which represents the last resource (see tplLast) [default=# of
           * resources being summarized + first - 1]
           * outputSeparator - (Opt) An optional string to separate each tpl instance [default="\n"]
           * wrapIfEmpty - (Opt) Indicates if the tplWrapper should be applied if the output is empty [default=0]
           *
           */
          $output = array();
          $outputSeparator = isset($outputSeparator) ? $outputSeparator : "\n";
          
          /* set default properties */
          $tpl = !empty($tpl) ? $tpl : '';
          $includeContent = !empty($includeContent) ? true : false;
          $includeTVs = !empty($includeTVs) ? true : false;
          $includeTVList = !empty($includeTVList) ? explode(',', $includeTVList) : array();
          $processTVs = !empty($processTVs) ? true : false;
          $processTVList = !empty($processTVList) ? explode(',', $processTVList) : array();
          $prepareTVs = !empty($prepareTVs) ? true : false;
          $prepareTVList = !empty($prepareTVList) ? explode(',', $prepareTVList) : array();
          $tvPrefix = isset($tvPrefix) ? $tvPrefix : 'tv.';
          $parents = (!empty($parents) || $parents === '0') ? explode(',', $parents) : array($modx->resource->get('id'));
          array_walk($parents, 'trim');
          $parents = array_unique($parents);
          $depth = isset($depth) ? (integer) $depth : 10;
          
          $tvFiltersOrDelimiter = isset($tvFiltersOrDelimiter) ? $tvFiltersOrDelimiter : '||';
          $tvFiltersAndDelimiter = isset($tvFiltersAndDelimiter) ? $tvFiltersAndDelimiter : ',';
          $tvFilters = !empty($tvFilters) ? explode($tvFiltersOrDelimiter, $tvFilters) : array();
          
          $where = !empty($where) ? $modx->fromJSON($where) : array();
          $showUnpublished = !empty($showUnpublished) ? true : false;
          $showDeleted = !empty($showDeleted) ? true : false;
          
          $sortby = isset($sortby) ? $sortby : 'publishedon';
          $sortbyTV = isset($sortbyTV) ? $sortbyTV : '';
          $sortbyAlias = isset($sortbyAlias) ? $sortbyAlias : 'modResource';
          $sortbyEscaped = !empty($sortbyEscaped) ? true : false;
          $sortdir = isset($sortdir) ? $sortdir : 'DESC';
          $sortdirTV = isset($sortdirTV) ? $sortdirTV : 'DESC';
          $limit = isset($limit) ? (integer) $limit : 5;
          $offset = isset($offset) ? (integer) $offset : 0;
          $totalVar = !empty($totalVar) ? $totalVar : 'total';
          
          $dbCacheFlag = !isset($dbCacheFlag) ? false : $dbCacheFlag;
          if (is_string($dbCacheFlag) || is_numeric($dbCacheFlag)) {
              if ($dbCacheFlag == '0') {
                  $dbCacheFlag = false;
              } elseif ($dbCacheFlag == '1') {
                  $dbCacheFlag = true;
              } else {
                  $dbCacheFlag = (integer) $dbCacheFlag;
              }
          }
          
          /* multiple context support */
          $contextArray = array();
          $contextSpecified = false;
          if (!empty($context)) {
              $contextArray = explode(',',$context);
              array_walk($contextArray, 'trim');
              $contexts = array();
              foreach ($contextArray as $ctx) {
                  $contexts[] = $modx->quote($ctx);
              }
              $context = implode(',',$contexts);
              $contextSpecified = true;
              unset($contexts,$ctx);
          } else {
              $context = $modx->quote($modx->context->get('key'));
          }
          
          $pcMap = array();
          $pcQuery = $modx->newQuery('modResource', array('id:IN' => $parents), $dbCacheFlag);
          $pcQuery->select(array('id', 'context_key'));
          if ($pcQuery->prepare() && $pcQuery->stmt->execute()) {
              foreach ($pcQuery->stmt->fetchAll(PDO::FETCH_ASSOC) as $pcRow) {
                  $pcMap[(integer) $pcRow['id']] = $pcRow['context_key'];
              }
          }
          
          $children = array();
          $parentArray = array();
          foreach ($parents as $parent) {
              $parent = (integer) $parent;
              if ($parent === 0) {
                  $pchildren = array();
                  if ($contextSpecified) {
                      foreach ($contextArray as $pCtx) {
                          if (!in_array($pCtx, $contextArray)) {
                              continue;
                          }
                          $options = $pCtx !== $modx->context->get('key') ? array('context' => $pCtx) : array();
                          $pcchildren = $modx->getChildIds($parent, $depth, $options);
                          if (!empty($pcchildren)) $pchildren = array_merge($pchildren, $pcchildren);
                      }
                  } else {
                      $cQuery = $modx->newQuery('modContext', array('key:!=' => 'mgr'));
                      $cQuery->select(array('key'));
                      if ($cQuery->prepare() && $cQuery->stmt->execute()) {
                          foreach ($cQuery->stmt->fetchAll(PDO::FETCH_COLUMN) as $pCtx) {
                              $options = $pCtx !== $modx->context->get('key') ? array('context' => $pCtx) : array();
                              $pcchildren = $modx->getChildIds($parent, $depth, $options);
                              if (!empty($pcchildren)) $pchildren = array_merge($pchildren, $pcchildren);
                          }
                      }
                  }
                  $parentArray[] = $parent;
              } else {
                  $pContext = array_key_exists($parent, $pcMap) ? $pcMap[$parent] : false;
                  if ($debug) $modx->log(modX::LOG_LEVEL_ERROR, "context for {$parent} is {$pContext}");
                  if ($pContext && $contextSpecified && !in_array($pContext, $contextArray, true)) {
                      $parent = next($parents);
                      continue;
                  }
                  $parentArray[] = $parent;
                  $options = !empty($pContext) && $pContext !== $modx->context->get('key') ? array('context' => $pContext) : array();
                  $pchildren = $modx->getChildIds($parent, $depth, $options);
              }
              if (!empty($pchildren)) $children = array_merge($children, $pchildren);
              $parent = next($parents);
          }
          $parents = array_merge($parentArray, $children);
          
          /* build query */
          $criteria = array("modResource.parent IN (" . implode(',', $parents) . ")");
          if ($contextSpecified) {
              $contextResourceTbl = $modx->getTableName('modContextResource');
              $criteria[] = "(modResource.context_key IN ({$context}) OR EXISTS(SELECT 1 FROM {$contextResourceTbl} ctx WHERE ctx.resource = modResource.id AND ctx.context_key IN ({$context})))";
          }
          if (empty($showDeleted)) {
              $criteria['deleted'] = '0';
          }
          if (empty($showUnpublished)) {
              $criteria['published'] = '1';
          }
          if (empty($showHidden)) {
              $criteria['hidemenu'] = '0';
          }
          if (!empty($hideContainers)) {
              $criteria['isfolder'] = '0';
          }
          $criteria = $modx->newQuery('modResource', $criteria);
          if (!empty($tvFilters)) {
              $tmplVarTbl = $modx->getTableName('modTemplateVar');
              $tmplVarResourceTbl = $modx->getTableName('modTemplateVarResource');
              $conditions = array();
              $operators = array(
                  '<=>' => '<=>',
                  '===' => '=',
                  '!==' => '!=',
                  '<>' => '<>',
                  '==' => 'LIKE',
                  '!=' => 'NOT LIKE',
                  '<<' => '<',
                  '<=' => '<=',
                  '=<' => '=<',
                  '>>' => '>',
                  '>=' => '>=',
                  '=>' => '=>'
              );
              foreach ($tvFilters as $fGroup => $tvFilter) {
                  $filterGroup = array();
                  $filters = explode($tvFiltersAndDelimiter, $tvFilter);
                  $multiple = count($filters) > 0;
                  foreach ($filters as $filter) {
                      $operator = '==';
                      $sqlOperator = 'LIKE';
                      foreach ($operators as $op => $opSymbol) {
                          if (strpos($filter, $op, 1) !== false) {
                              $operator = $op;
                              $sqlOperator = $opSymbol;
                              break;
                          }
                      }
                      $tvValueField = 'tvr.value';
                      $tvDefaultField = 'tv.default_text';
                      $f = explode($operator, $filter);
                      if (count($f) >= 2) {
                          if (count($f) > 2) {
                              $k = array_shift($f);
                              $b = join($operator, $f);
                              $f = array($k, $b);
                          }
                          $tvName = $modx->quote($f[0]);
                          if (is_numeric($f[1]) && !in_array($sqlOperator, array('LIKE', 'NOT LIKE'))) {
                              $tvValue = $f[1];
                              if ($f[1] == (integer)$f[1]) {
                                  $tvValueField = "CAST({$tvValueField} AS SIGNED INTEGER)";
                                  $tvDefaultField = "CAST({$tvDefaultField} AS SIGNED INTEGER)";
                              } else {
                                  $tvValueField = "CAST({$tvValueField} AS DECIMAL)";
                                  $tvDefaultField = "CAST({$tvDefaultField} AS DECIMAL)";
                              }
                          } else {
                              $tvValue = $modx->quote($f[1]);
                          }
                          if ($multiple) {
                              $filterGroup[] =
                                  "(EXISTS (SELECT 1 FROM {$tmplVarResourceTbl} tvr JOIN {$tmplVarTbl} tv ON {$tvValueField} {$sqlOperator} {$tvValue} AND tv.name = {$tvName} AND tv.id = tvr.tmplvarid WHERE tvr.contentid = modResource.id) " .
                                  "OR EXISTS (SELECT 1 FROM {$tmplVarTbl} tv WHERE tv.name = {$tvName} AND {$tvDefaultField} {$sqlOperator} {$tvValue} AND tv.id NOT IN (SELECT tmplvarid FROM {$tmplVarResourceTbl} WHERE contentid = modResource.id)) " .
                                  ")";
                          } else {
                              $filterGroup =
                                  "(EXISTS (SELECT 1 FROM {$tmplVarResourceTbl} tvr JOIN {$tmplVarTbl} tv ON {$tvValueField} {$sqlOperator} {$tvValue} AND tv.name = {$tvName} AND tv.id = tvr.tmplvarid WHERE tvr.contentid = modResource.id) " .
                                  "OR EXISTS (SELECT 1 FROM {$tmplVarTbl} tv WHERE tv.name = {$tvName} AND {$tvDefaultField} {$sqlOperator} {$tvValue} AND tv.id NOT IN (SELECT tmplvarid FROM {$tmplVarResourceTbl} WHERE contentid = modResource.id)) " .
                                  ")";
                          }
                      } elseif (count($f) == 1) {
                          $tvValue = $modx->quote($f[0]);
                          if ($multiple) {
                              $filterGroup[] = "EXISTS (SELECT 1 FROM {$tmplVarResourceTbl} tvr JOIN {$tmplVarTbl} tv ON {$tvValueField} {$sqlOperator} {$tvValue} AND tv.id = tvr.tmplvarid WHERE tvr.contentid = modResource.id)";
                          } else {
                              $filterGroup = "EXISTS (SELECT 1 FROM {$tmplVarResourceTbl} tvr JOIN {$tmplVarTbl} tv ON {$tvValueField} {$sqlOperator} {$tvValue} AND tv.id = tvr.tmplvarid WHERE tvr.contentid = modResource.id)";
                          }
                      }
                  }
                  $conditions[] = $filterGroup;
              }
              if (!empty($conditions)) {
                  $firstGroup = true;
                  foreach ($conditions as $cGroup => $c) {
                      if (is_array($c)) {
                          $first = true;
                          foreach ($c as $cond) {
                              if ($first && !$firstGroup) {
                                  $criteria->condition($criteria->query['where'][0][1], $cond, xPDOQuery::SQL_OR, null, $cGroup);
                              } else {
                                  $criteria->condition($criteria->query['where'][0][1], $cond, xPDOQuery::SQL_AND, null, $cGroup);
                              }
                              $first = false;
                          }
                      } else {
                          $criteria->condition($criteria->query['where'][0][1], $c, $firstGroup ? xPDOQuery::SQL_AND : xPDOQuery::SQL_OR, null, $cGroup);
                      }
                      $firstGroup = false;
                  }
              }
          }
          /* include/exclude resources, via &resources=`123,-456` prop */
          if (!empty($resources)) {
              $resourceConditions = array();
              $resources = explode(',',$resources);
              $include = array();
              $exclude = array();
              foreach ($resources as $resource) {
                  $resource = (int)$resource;
                  if ($resource == 0) continue;
                  if ($resource < 0) {
                      $exclude[] = abs($resource);
                  } else {
                      $include[] = $resource;
                  }
              }
              if (!empty($include)) {
                  $criteria->where(array('OR:modResource.id:IN' => $include), xPDOQuery::SQL_OR);
              }
              if (!empty($exclude)) {
                  $criteria->where(array('modResource.id:NOT IN' => $exclude), xPDOQuery::SQL_AND, null, 1);
              }
          }
          if (!empty($where)) {
              $criteria->where($where);
          }
          
          $total = $modx->getCount('modResource', $criteria);
          $modx->setPlaceholder($totalVar, $total);
          
          $fields = array_keys($modx->getFields('modResource'));
          if (empty($includeContent)) {
              $fields = array_diff($fields, array('content'));
          }
          $columns = $includeContent ? $modx->getSelectColumns('modResource', 'modResource') : $modx->getSelectColumns('modResource', 'modResource', '', array('content'), true);
          $criteria->select($columns);
          if (!empty($sortbyTV)) {
              $criteria->leftJoin('modTemplateVar', 'tvDefault', array(
                  "tvDefault.name" => $sortbyTV
              ));
              $criteria->leftJoin('modTemplateVarResource', 'tvSort', array(
                  "tvSort.contentid = modResource.id",
                  "tvSort.tmplvarid = tvDefault.id"
              ));
              if (empty($sortbyTVType)) $sortbyTVType = 'string';
              if ($modx->getOption('dbtype') === 'mysql') {
                  switch ($sortbyTVType) {
                      case 'integer':
                          $criteria->select("CAST(IFNULL(tvSort.value, tvDefault.default_text) AS SIGNED INTEGER) AS sortTV");
                          break;
                      case 'decimal':
                          $criteria->select("CAST(IFNULL(tvSort.value, tvDefault.default_text) AS DECIMAL) AS sortTV");
                          break;
                      case 'datetime':
                          $criteria->select("CAST(IFNULL(tvSort.value, tvDefault.default_text) AS DATETIME) AS sortTV");
                          break;
                      case 'string':
                      default:
                          $criteria->select("IFNULL(tvSort.value, tvDefault.default_text) AS sortTV");
                          break;
                  }
              } elseif ($modx->getOption('dbtype') === 'sqlsrv') {
                  switch ($sortbyTVType) {
                      case 'integer':
                          $criteria->select("CAST(ISNULL(tvSort.value, tvDefault.default_text) AS BIGINT) AS sortTV");
                          break;
                      case 'decimal':
                          $criteria->select("CAST(ISNULL(tvSort.value, tvDefault.default_text) AS DECIMAL) AS sortTV");
                          break;
                      case 'datetime':
                          $criteria->select("CAST(ISNULL(tvSort.value, tvDefault.default_text) AS DATETIME) AS sortTV");
                          break;
                      case 'string':
                      default:
                          $criteria->select("ISNULL(tvSort.value, tvDefault.default_text) AS sortTV");
                          break;
                  }
              }
              $criteria->sortby("sortTV", $sortdirTV);
          }
          if (!empty($sortby)) {
              if (strpos($sortby, '{') === 0) {
                  $sorts = $modx->fromJSON($sortby);
              } else {
                  $sorts = array($sortby => $sortdir);
              }
              if (is_array($sorts)) {
                  while (list($sort, $dir) = each($sorts)) {
                      if ($sortbyEscaped) $sort = $modx->escape($sort);
                      if (!empty($sortbyAlias)) $sort = $modx->escape($sortbyAlias) . ".{$sort}";
                      $criteria->sortby($sort, $dir);
                  }
              }
          }
          if (!empty($limit)) $criteria->limit($limit, $offset);
          
          if (!empty($debug)) {
              $criteria->prepare();
              $modx->log(modX::LOG_LEVEL_ERROR, $criteria->toSQL());
          }
          $collection = $modx->getCollection('modResource', $criteria, $dbCacheFlag);
          
          $idx = !empty($idx) || $idx === '0' ? (integer) $idx : 1;
          $first = empty($first) && $first !== '0' ? 1 : (integer) $first;
          $last = empty($last) ? (count($collection) + $idx - 1) : (integer) $last;
          
          /* include parseTpl */
          include_once $modx->getOption('getresources.core_path',null,$modx->getOption('core_path').'components/getresources/').'include.parsetpl.php';
          
          $templateVars = array();
          if (!empty($includeTVs) && !empty($includeTVList)) {
              $templateVars = $modx->getCollection('modTemplateVar', array('name:IN' => $includeTVList));
          }
          /** @var modResource $resource */
          foreach ($collection as $resourceId => $resource) {
              $tvs = array();
              if (!empty($includeTVs)) {
                  if (empty($includeTVList)) {
                      $templateVars = $resource->getMany('TemplateVars');
                  }
                  /** @var modTemplateVar $templateVar */
                  foreach ($templateVars as $tvId => $templateVar) {
                      if (!empty($includeTVList) && !in_array($templateVar->get('name'), $includeTVList)) continue;
                      if ($processTVs && (empty($processTVList) || in_array($templateVar->get('name'), $processTVList))) {
                          $tvs[$tvPrefix . $templateVar->get('name')] = $templateVar->renderOutput($resource->get('id'));
                      } else {
                          $value = $templateVar->getValue($resource->get('id'));
                          if ($prepareTVs && method_exists($templateVar, 'prepareOutput') && (empty($prepareTVList) || in_array($templateVar->get('name'), $prepareTVList))) {
                              $value = $templateVar->prepareOutput($value);
                          }
                          $tvs[$tvPrefix . $templateVar->get('name')] = $value;
                      }
                  }
              }
              $odd = ($idx & 1);
              $properties = array_merge(
                  $scriptProperties
                  ,array(
                      'idx' => $idx
                      ,'first' => $first
                      ,'last' => $last
                      ,'odd' => $odd
                  )
                  ,$includeContent ? $resource->toArray() : $resource->get($fields)
                  ,$tvs
              );
              $resourceTpl = false;
              if ($idx == $first && !empty($tplFirst)) {
                  $resourceTpl = parseTpl($tplFirst, $properties);
              }
              if ($idx == $last && empty($resourceTpl) && !empty($tplLast)) {
                  $resourceTpl = parseTpl($tplLast, $properties);
              }
              $tplidx = 'tpl_' . $idx;
              if (empty($resourceTpl) && !empty($$tplidx)) {
                  $resourceTpl = parseTpl($$tplidx, $properties);
              }
              if ($idx > 1 && empty($resourceTpl)) {
                  $divisors = getDivisors($idx);
                  if (!empty($divisors)) {
                      foreach ($divisors as $divisor) {
                          $tplnth = 'tpl_n' . $divisor;
                          if (!empty($$tplnth)) {
                              $resourceTpl = parseTpl($$tplnth, $properties);
                              if (!empty($resourceTpl)) {
                                  break;
                              }
                          }
                      }
                  }
              }
              if ($odd && empty($resourceTpl) && !empty($tplOdd)) {
                  $resourceTpl = parseTpl($tplOdd, $properties);
              }
              if (!empty($tplCondition) && !empty($conditionalTpls) && empty($resourceTpl)) {
                  $conTpls = $modx->fromJSON($conditionalTpls);
                  $subject = $properties[$tplCondition];
                  $tplOperator = !empty($tplOperator) ? $tplOperator : '=';
                  $tplOperator = strtolower($tplOperator);
                  $tplCon = '';
                  foreach ($conTpls as $operand => $conditionalTpl) {
                      switch ($tplOperator) {
                          case '!=':
                          case 'neq':
                          case 'not':
                          case 'isnot':
                          case 'isnt':
                          case 'unequal':
                          case 'notequal':
                              $tplCon = (($subject != $operand) ? $conditionalTpl : $tplCon);
                              break;
                          case '<':
                          case 'lt':
                          case 'less':
                          case 'lessthan':
                              $tplCon = (($subject < $operand) ? $conditionalTpl : $tplCon);
                              break;
                          case '>':
                          case 'gt':
                          case 'greater':
                          case 'greaterthan':
                              $tplCon = (($subject > $operand) ? $conditionalTpl : $tplCon);
                              break;
                          case '<=':
                          case 'lte':
                          case 'lessthanequals':
                          case 'lessthanorequalto':
                              $tplCon = (($subject <= $operand) ? $conditionalTpl : $tplCon);
                              break;
                          case '>=':
                          case 'gte':
                          case 'greaterthanequals':
                          case 'greaterthanequalto':
                              $tplCon = (($subject >= $operand) ? $conditionalTpl : $tplCon);
                              break;
                          case 'isempty':
                          case 'empty':
                              $tplCon = empty($subject) ? $conditionalTpl : $tplCon;
                              break;
                          case '!empty':
                          case 'notempty':
                          case 'isnotempty':
                              $tplCon = !empty($subject) && $subject != '' ? $conditionalTpl : $tplCon;
                              break;
                          case 'isnull':
                          case 'null':
                              $tplCon = $subject == null || strtolower($subject) == 'null' ? $conditionalTpl : $tplCon;
                              break;
                          case 'inarray':
                          case 'in_array':
                          case 'ia':
                              $operand = explode(',', $operand);
                              $tplCon = in_array($subject, $operand) ? $conditionalTpl : $tplCon;
                              break;
                          case 'between':
                          case 'range':
                          case '>=<':
                          case '><':
                              $operand = explode(',', $operand);
                              $tplCon = ($subject >= min($operand) && $subject <= max($operand)) ? $conditionalTpl : $tplCon;
                              break;
                          case '==':
                          case '=':
                          case 'eq':
                          case 'is':
                          case 'equal':
                          case 'equals':
                          case 'equalto':
                          default:
                              $tplCon = (($subject == $operand) ? $conditionalTpl : $tplCon);
                              break;
                      }
                  }
                  if (!empty($tplCon)) {
                      $resourceTpl = parseTpl($tplCon, $properties);
                  }
              }
              if (!empty($tpl) && empty($resourceTpl)) {
                  $resourceTpl = parseTpl($tpl, $properties);
              }
              if ($resourceTpl === false && !empty($debug)) {
                  $chunk = $modx->newObject('modChunk');
                  $chunk->setCacheable(false);
                  $output[]= $chunk->process(array(), '<pre>' . print_r($properties, true) .'</pre>');
              } else {
                  $output[]= $resourceTpl;
              }
              $idx++;
          }
          
          /* output */
          $toSeparatePlaceholders = $modx->getOption('toSeparatePlaceholders', $scriptProperties, false);
          if (!empty($toSeparatePlaceholders)) {
              $modx->setPlaceholders($output, $toSeparatePlaceholders);
              return '';
          }
          
          $output = implode($outputSeparator, $output);
          
          $tplWrapper = $modx->getOption('tplWrapper', $scriptProperties, false);
          $wrapIfEmpty = $modx->getOption('wrapIfEmpty', $scriptProperties, false);
          if (!empty($tplWrapper) && ($wrapIfEmpty || !empty($output))) {
              $output = parseTpl($tplWrapper, array_merge($scriptProperties, array('output' => $output)));
          }
          
          $toPlaceholder = $modx->getOption('toPlaceholder', $scriptProperties, false);
          if (!empty($toPlaceholder)) {
              $modx->setPlaceholder($toPlaceholder, $output);
              return '';
          }
          return $output;


          Thank you,
          Tom
          • discuss.answer
            • 42822
            • 21 Posts
            Try to add &showHidden=`1` to your tag,

            [[!getResources? &tpl=`getResourcesTpl` &idx=`1` &includeContent=`1` &showHidden=`1`]]


            Learn more about getResources under
            http://rtfm.modx.com/extras/revo/getresources
              • 39982
              • 28 Posts
              Hi! It was that, thank you very much.

              Tom