Вызов сниппета из сниппета и параметры
        Привет! Помогите пожалуйста разобраться, сам не могу осилить.
Есть вот такой сниппет:
Вот эта строка не работает
$type = 1;
то тоже работает
Почему-то параметр &type=`1` из вызова не передается.
    
    
                                                                                
            Есть вот такой сниппет:
<?php
$values = array();
$ids = $modx->runSnippet('pdoResources', array(
	 'parents' => $parents,
	 'limit' => 0,
	 'returnIds' => 1,
	 'includeTVs' => 'certificateBuildingType',
	 'tvFilters' => 'certificateBuildingType=='. $type
));
$resources = explode(',', $ids);
foreach($resources as $id){
	 $resource = $modx->getObject('modResource', $id);
	 $tv = $resource->getTVValue($tvname);
	 if(is_numeric($tv)) $values[] = $tv;
}
$out = array_sum($values); 
return $out;Вот эта строка не работает
'tvFilters' => 'certificateBuildingType=='. $typeВызываю так:[[!countArea?&parents=`5`&tvname=`certificateArea`&type=`1`]]Если напрямую написать'tvFilters' => 'certificateBuildingType=='.'1'То работает. Если в самом начале написать:$type = 1;
то тоже работает
Почему-то параметр &type=`1` из вызова не передается.
Комментарии: 13
$modx->log(level, string) в помощь            
                Чот вот так 
$modx->log(1, print_r($array, 1),'HTML');
пробовал в начале конструкции вставлять, ничего не выводится дополнительно к тому что должно.
А так когда не срабатывает в целом, страница не загружается и ругается таким образом:
                    $modx->log(1, print_r($array, 1),'HTML');
пробовал в начале конструкции вставлять, ничего не выводится дополнительно к тому что должно.
А так когда не срабатывает в целом, страница не загружается и ругается таким образом:
Fatal error: Uncaught Error: Call to a member function getTVValue() on null in C:\bla-bla\core\cache\includes\elements\modsnippet\34.include.cache.php:15 Stack trace: #0 C:\bla-bla\core\model\modx\modscript.class.php(76): include() #1 C:\bla-bla\core\model\modx\modparser.class.php(537): modScript->process(NULL) #2 C:\bla-bla\core\components\pdotools\model\pdotools\pdoparser.class.php(273): modParser->processTag(Array, true) #3 C:\bla-bla\core\model\modx\modparser.class.php(251): pdoParser->processTag(Array, true) #4 C:\bla-bla\core\components\pdotools\model\pdotools\pdoparser.class.php(65): modParser->processElementTags('', '<!DOCTYPE html>...', true, false, '[[', ']]', Array, 9) #5 C:\bla-bla\core\model\modx\modresource.class.php(546): pdoParser->processElementTags('', '<!DOCTYPE html>...', true, false, '[[', ']]', Array, 10) #6 C:\bla-bla\core\model\modx\modresou in C:\bla-bla\core\cache\includes\elements\modsnippet\34.include.cache.php on line 15
                А какое количество ресурсов возвращает первый сниппет? Максимально. Просто интересно оценить размер, так сказать, ущерба.            
                    
                У меня там всего около 5-6 тестовых ресурсов, у них у всех есть поле в котором находится цифра. Плагин эти цифры просто складывает и выводит сумму значений всех полей            
                    
                Если вы имели ввиду на сколько много будет ресурсов, поля в которых надо пересчитать, то на первое время не более 100 штук            
                    
                Попробуйте так передать, может в базе ищется, как строка.
                    'tvFilters' => 'certificateBuildingType=='. intval($type)Может быстрее будет, если сделать такой запрос, вместо перебора:SELECT SUM(value) as sum FROM `modx_site_tmplvar_contentvalues` WHERE tmplvarid='2'            
                Неа, так тоже не сработало. Вот такая конструкция работает:
                    <?php
$values = array();
$type = "1";
$ids = $modx->runSnippet('pdoResources', array(
	 'parents' => $parents,
	 'limit' => 0,
	 'returnIds' => 1,
	 'includeTVs' => 'certificateBuildingType',
	 'tvFilters' => 'certificateBuildingType=='.$type
));
$resources = explode(',', $ids);
foreach($resources as $id){
	 $resource = $modx->getObject('modResource', $id);
	 $tv = $resource->getTVValue($tvname);
	 if(is_numeric($tv)) $values[] = $tv;
}
$out = array_sum($values); 
return $out;То есть я так понимаю без разницы в каком виде передается цифра. Что интересно, значение $parents которое берется из вызова сниппета передается нормально, а вот с $type почему-то так же не работает. Это ломает мне мозг.            
                Попробуй передавать не type, а какую-то другую переменную.
                    $modx->log(1, $type);            
                А что выводит?
                    print_r($scriptProperties);            <?php
$values = array();
$type = "1";
$ids = $modx->runSnippet('pdoResources', array(
	 'parents' => $parents,
	 'limit' => 0,
	 'returnIds' => 1,
	 'includeTVs' => 'certificateBuildingType',
	 'tvFilters' => 'certificateBuildingType=='.$type
));
$resources = explode(',', $ids);
foreach($resources as $id){
	 $resource = $modx->getObject('modResource', $id);
	 $tv = $resource->getTVValue($tvname);
	 if(is_numeric($tv)) $values[] = $tv;
}
$out = array_sum($values); 
print_r($scriptProperties);
return $out;Мне кажется я не правильно им воспользовался. Если так вставлять, то просто перестает считать и вместо цифры выводит NaN. Я чайник (facepalm)            
                А так?
                    <?php
$values = array();
$vtype = $modx->getOption('type', $scriptProperties, 123, true);
$ids = $modx->runSnippet('pdoResources', array(
	 'parents' => $parents,
	 'limit' => 0,
	 'returnIds' => 1,
	 'includeTVs' => 'certificateBuildingType',
	 'tvFilters' => 'certificateBuildingType==' . $vtype
));
$resources = explode(',', $ids);
foreach($resources as $id){
	 $resource = $modx->getObject('modResource', $id);
	 $tv = $resource->getTVValue($tvname);
	 if(is_numeric($tv)) $values[] = $tv;
}
$out = array_sum($values); 
return $out;            
                123 — значение по умолчанию, если параметра нет. Можно и без этого, просто:
                    $vtype = $modx->getOption('type', $scriptProperties);Или вообще может такое закостылить:$type = $type;:D            
                Спасибо! Сработал первый вариант :)            
                    
                            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.