案例:我需要计算父资源($ 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个资源。
答案 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 必须替换为真实值。