如何计算父资源中日期TV不为空的资源数量?

时间:2016-04-05 09:59:13

标签: modx-revolution

案例:我需要计算父资源($ parentID)中资源(或电视数量)的数量,电视($ tvID)不是空的。

我的代码正常工作

$total = $modx->getCount('modTemplateVarResource', array('tmplvarid' => $tvID, 'value' != $value));
return $total;

和代码段呼叫:

[[!tvValueCount? &value=`` &tvID=`1`]]

但它在所有资源中使用该ID计算所有 not-empty-tvs,我需要将其减少为$ parentID。所以基本上我需要一个这样的代码片段:

[[!tvValueCount? &value=`` &tvID=`xx` &parentID=`xx`]]

我希望它非常简单,但根据数据库负载,处理时间,服务器负载等情况,我不是一个足够好的程序员来完成它的最佳方式。

最多可以计算3-4,000个资源。

1 个答案:

答案 0 :(得分:2)

您可以使用以下内容:

<?php
$c = $modx->newQuery('modTemplateVarResource');
$c->leftJoin('modResource', 'Resource', array(
    'Resource.id = modTemplateVarResource.contentid'
));
$c->where(array(
    'modTemplateVarResource.tmplvarid' => $tvID,
    'modTemplateVarResource.value:!=' => '',
    'Resource.parent' => $parentID,
));
return $modx->getCount('modTemplateVarResource', $c);
return $total;

或者从另一方加入表格:

<?php
$c = $modx->newQuery('modResource');
$c->leftJoin('modTemplateVarResource', 'TemplateVarResources', array(
    'Resource.id = modTemplateVarResource.contentid'
));
$c->where(array(
    'modTemplateVarResource.tmplvarid' => $tvID,
    'modTemplateVarResource.value:!=' => '',
    'Resource.parent' => $parentID,
));
return $modx->getCount('modResource', $c);
return $total;

这将计算具有父$ parentID(仅一个级别)的所有资源,其中模板变量填充非空字符串。它不计算使用默认模板变量值的资源。

必须扩展代码以查询已删除/未发布的资源,以便在多个级别中计算资源等。

但在尝试扩展代码之前,最好使用getResources或pdoResources代码段调用。它们是为此而建造的,您不必为上述事件而烦恼。并且他们用找到的资源的数量填充占位符。

这应该适用于getResources:

[[getResources?
&parents=`parents`
&includeTVs=`tvName`
&tvFilters=`tvName!=`
&totalVar=`totalnotempty`
]]
[[+totalnotempty]]

父母 tvName 必须替换为真实值。