Вызов сниппета из сниппета и параметры
Привет! Помогите пожалуйста разобраться, сам не могу осилить.
Есть вот такой сниппет:
Вот эта строка не работает
$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
Спасибо! Сработал первый вариант :)
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.