modx:在代码段中重写getResources查询

时间:2013-07-01 00:11:19

标签: php modx

我对MODX很新,并且一直致力于与MODX对话的接口。 现在我得到以下查询:

[[!getCache?
    &element=`getResources`
    &cacheExpires=`9000`
    &parents=`679,663,641,799,590`
    &depth=`0`
    &tpl=`related-article-in-page-listing`
    &limit=`6`
    &includeTVs=`0`
    &includeContent=`0`
    &showHidden=`1`
    &tvFilters=`Related Artist==[[*Related Artist]]`
    &toPlaceholder=`new`
    &resources=`-[[*id]]`
]]

我想翻译成一个片段,以便我可以通过runSnippet()方法使用API​​调用它。

我已经走到这一步了:

<?php
$output = '';
$id = !empty($id) ? $id : 0;

$modx= new modX();
$modx->initialize('mgr');

$query = $modx->newQuery('modResource');
$query->where(array(
   'parent' => 679,
   'published' => 1,
   'Related Artists.value:=' => 603 // this will be replaced with $id when I get it to work...
));
$query->limit(5);
$titles = $modx->getCollection('modResource',$query);


foreach ($titles as $k) {
    $output.= '<li>'.$k->get('pagetitle').'</li>'; // let's just get the titles first
}

return '<ul>'.$output.'</ul>';

这不会返回任何内容,我想我不清楚上面的查询在MySQL术语中实际调用了什么。 正如我所知道的那样,它会查找具有679,663,641,799或590作为父级的条目,并且电视[[*相关艺术家]]看起来像一个大概被称为“相关艺术家”的完全匹配?!

这里有任何帮助,因为我已经与书和在线帮助争吵了几天了;) 谢谢

3 个答案:

答案 0 :(得分:4)

如果您想使用runSnippet从您自己的代码中执行getResources,您可以这样做:

$id = $modx->getOption('id', $scriptProperties, $modx->resource->get('id'));
$related = $modx->getOption('related', $scriptProperties, ''); 

$params = array(
    'parents' => '679,663,641,799,590',
    'depth' => 0,
    'tpl' => 'related-article-in-page-listing',
    'limit' => 6,
    'includeTVs' => 0,
    'includeContent' => 0,
    'showHidden' => 1,
    'tvFilters' => "Related Artist==$related",
    'toPlaceholder' => 'new',
    'resources' => "-$id",
);
$output = $modx->runSnippet('getResources', $params);

请注意,$output将是一个字符串。

http://rtfm.modx.com/display/revolution20/modX.runSnippet http://rtfm.modx.com/display/revolution20/Snippets

答案 1 :(得分:1)

我明白了:

$query = $modx->newQuery('modResource');
$query->leftJoin('modTemplateVarResource', 'tv_value', 'tv_value.contentid = modResource.id');
$query->where(array(
    'modResource.parent:IN' => array(663,679,641,799,590),
    'modResource.published' => 1,
    'tv_value.tmplvarid' => 13,
    'tv_value.value' => $ID // this has been replaced with a dynamic $id but was "603" in my question
));
$query->limit(10);
$titles = $modx->getCollection('modResource',$query);

(13是我的电视ID)

所以我现在了解联接​​在xPDO中是如何工作的;) 我希望有一天能帮助别人

答案 2 :(得分:0)

在“_”上替换模板变量Related Artist的名称(不是标题)中的空格,因为它可能导致各种混淆。