0

我对 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 为父项的条目,而电视 [[*Related Artist]] 会查找可能称为“相关艺术家”的飞行物以进行精确匹配?!

任何帮助在这里表示感谢,因为我已经与这本书和在线帮助争论了几天;)谢谢

4

3 回答 3

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

于 2013-07-01T03:06:24.253 回答
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 中的连接是如何工作的;)我希望有一天这对其他人有所帮助

于 2013-07-26T06:08:30.040 回答
0

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

于 2013-07-01T12:45:15.270 回答