2016-04-05 12 views
0

Durum: Bir ana kaynağın ($ parentID) içindeki kaynak sayısını (veya TV sayısını), TV ($ TVID) boş değil olarak saymalıyım.Tarih kaynağı olan kaynak sayısı nasıl sayılır Ebeveyn kaynağında boş değil?

Ben

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

çalışan bu kodu ve pasajı görüşmesi:

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

ama tüm kaynaklar bu id ile tüm-boş değil-TV'ler sayabilir ve ben Bunu, $ parentID değerine indirgemek gerekiyor. Yani temelde bir pasajı şöyle çağrıyı gerekir: Ben çok basit olmasını bekliyoruz

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

ama ben yeterince iyi bir programcı zamanı, sunucu yükünü prosessing, veritabanı yükleri göre en iyi şekilde yapılması ve almak için yakında.

En çok değerlenecek yaklaşık 3-4000 kaynak bulunacaktır.

cevap

2

Böyle bir şey kullanabilirsiniz:

<?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; 

Bu (tek seviye) ebeveyn $ parentId olan tüm kaynaklar sayar:

<?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; 

Veya diğer taraftan tabloları katılmak Şablon Değişkeni boş olmayan bir dizeyle doldurulduğunda. Varsayılan şablon değişken değerini kullanan Kaynaklar sayılmaz.

kod vb birden fazla seviyede

yılında Kaynaklar saymak,/yayınlanmamış Kaynaklar silinmiş sorgulamak için genişletilmelidir Ama kod uzatmak çalışmadan önce, daha iyi bir GetResources veya pdoResources çağrıyı pasajı kullanmalıdır . Bunun için inşa edilmişler ve yukarıdaki istisnalarla uğraşmak zorunda değilsiniz. Ve bir yer tutucuyu bulunan Kaynakların sayısıyla doldururlar.

Bu GetResources ile çalışmalıdır:

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

veliler ve tvName gerçek değerlerle değiştirilmesi gerekir.

+0

Fantastik! Teşekkürler. getResources çalışıyor. Şimdi tek şey sayım sonucunu eşit sayı menü zamanlarını kendinin sonucu olarak göstermesidir. Snippet aramam: '[[! GetResources? & limit = '0' ve ebeveynler =' 3' & tpl = 'countTpl' & includeTVs =' 1' & processTVs = '1' & tvPrefix =' 've hideContainers =' 1' & tvFilters = 'pickedUp! =' & totalVar = 'totalnotempty']]' –

+0

Üzgünüm ama ikinci cümlenin anlamıyorum. – Jako

+0

Şu anda getResources çağrısı sonucu 63'tür. Ancak sonuç 63 kez (63 63 63 63 ..... gibi) gösterilir. Aramayı geri gönderme belgesinden şablona çıkarmayı denedim, ancak çıktı aynı. –

İlgili konular