Algirdas

Algirdas

Был в сети 07 февраля 2023, 18:06
Заказы не принимаю
<?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();
$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 почему-то так же не работает. Это ломает мне мозг.
Чот вот так
$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
Спасибо! Всё сработало. Чуть дописал сниппет для возможности фильтрации и снова затык

<?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';
то тоже работает

Я так понимаю дело в синтаксисе, но я его победить так и не смог, что только не перепробовал. Знаний не хватает, примеры похожие не нашел ((
Спасибо, так и сделал по вашему совету. Откатил на 5.7
Я и до этого пробовал откат, но у меня modx посыпался. Оказалось надо было дамп сливать и на новую версию заливать ))
Вообще есть смысл стремиться к MySQL 8?
Установил плагин, ничего не настраивал. Вкладка локализация -> добавить перевод, ловлю вот такую ошибку:

[2021-07-28 13:34:23] (ERROR @ C:\OpenServer\domains\kgbc.loc\core\xpdo\om\xpdoobject.class.php : 240)
Error 42000 executing statement: 
Array
(
    [0] => 42000
    [1] => 1064
    [2] => You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ASC, category ASC' at line 1
)

MODX Revolution 2.8.3-pl
MySQL-8.0-Win-10
OpenServer 5.4.0
Проблема в том, что это не мой код, я его взял на просторах интернета. Сам я писать вообще не умею. И в оригинале там так и было:

$tv = $resource->getTVValue($tvname);
Но в таком случае у меня выдает ошибку:

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:11 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 11
Почему-то не работает вообще. Вызываю вот так:

[[!msProducts?
    &parents=`14`
    &toSeparatePlaceholders=`test`
    &tpl=`tpl.productBox`
    ]]
На странице ничего не выводится. Стоит только убрать &toSeparatePlaceholders=`test` — все выводится (содержимое tpl.productBox). Пытался вызывать &tpl=`` чтобы все плейсхолдеры посмотреть — тоже тишина естественно.

Еще и ошибка непонятная появляется когда делаю вызовы msproducts и getImageList выше на странице:

(ERROR @ /var/www/vhosts/site.com/httpdocs/core/xpdo/om/xpdoquery.class.php : 764) Encountered empty IN condition with key id
Не знаю что именно ее выдает, но если оставить только статичный html то ее нет.