Как подключить в MODX свой компонент к SeoFilter?

Александр Здравствуйте! Проблема в следующем, был расширен класс mFilter2, и создана отдельная таблица для фильтрации тв параметров, сделано всё было по руководству описанному Вами: https://itchief.ru/questions/591 огромное спасибо, за это подробное и отличное решение. Но возникла второстепенная проблема так как значения находятся в новой таблице, SeoFilter не может с ними нормально работать, и без помощи, решить эту проблему не получается. Написал автору компонента, он предложил такое решение, расширить класс подсчётов и при добавлении поля в сеофильтре указывать его: extendResource Создать новый класс подсчётов по адресу core/components/seofilter/custom/count/customcount.class.php с содержимым:
<?php

class customCount extends sfCountHandler {
    
    public function getExtendResourceConditions($value = '', $field = array(),$includeWhere = 1) {
        $conditions = array();
        $conditions['join'] = array(
            'extendResource'=> array('class' => 'extendResource', 'on' => 'extendResource.resource = modResource.id')
        );
 
         if($includeWhere) {
            $conditions = array_merge($conditions, $this->getModResourceConditions($value, $field));
        }

        return $conditions;
    }
    
}
И прописать в системную настройку seofilter_count_handler_class значение customCount Но не заработало: Далее было предложено:
<?php

class customCount extends sfCountHandler {
    
    public function __construct(modX &$modx, array $config = array()) {
           parent::contsruct($modx,$config)
           $this->modx->addPackage('extendResource' ,$this->modx->getOption('core_path').'components/extendresource/model/');
    }
    
    public function getExtendResourceConditions($value = '', $field = array(),$includeWhere = 1) {
        $conditions = array();
        $conditions['join'] = array(
            'extendResource'=> array('class' => 'extendResource', 'on' => 'extendResource.resource = modResource.id')
        );
 
         if($includeWhere) {
            $conditions = array_merge($conditions, $this->getModResourceConditions($value, $field));
        }

        return $conditions;
    }
    
}
При таком вызове сайт не грузиться выходит ошибка:
Parse error: syntax error, unexpected '$this' (T_VARIABLE) in C:\core\components\seofilter\custom\count\customcount.class.php on line 7
Если убераю:
$this->
получаю:
Parse error: syntax error, unexpected '$modx' (T_VARIABLE) in C:\core\components\seofilter\custom\count\customcount.class.php on line 7
Александр возможно Вы увидите в чём проблема? Может нужно делать аналогично тому как был расширен класс mFilter2, тогда как правильно расписать схему и остальное?
Изображения:

Комментарии: 7

Александр Мальцев
Александр Мальцев
Привет!
Нет точки с запятой в конце:
parent::contsruct($modx,$config);
Убирать это не нужно:
$this->
Александр
Александр
Выходят такие ошибки:
Fatal error: Uncaught Error: Call to undefined method sfCountHandler::contsruct() in C:\core\components\seofilter\custom\count\customcount.class.php:6 Stack trace: #0 C:\core\components\seofilter\model\seofilter\sfmenu.class.php(659): customCount->__construct(Object(modX), Array) #1 C:\core\components\seofilter\model\seofilter\sfmenu.class.php(672): sfMenu->loadHandler() #2 C:\core\components\seofilter\model\seofilter\sfmenu.class.php(193): sfMenu->countChildren(Array) #3 C:\core\cache\includes\elements\modsnippet\84.include.cache.php(46): sfMenu->getTree('', '42') #4 C:\core\model\modx\modscript.class.php(76): include('C:\\OpenServer\\d...') #5 C:\core\model\modx\modparser.class.php(537): modScript->process(NULL) #6 C:\core\components\pdotools\model\pdotools\pdoparser.class.php(273): modParser->processTag(Array, true in C:\core\components\seofilter\custom\count\customcount.class.php on line 6
Александр Мальцев
Александр Мальцев
Ошибка в этой строчке:
parent::contsruct($modx,$config);
Наверно должно быть так:
parent::__construct($modx,$config);
Александр
Александр
Александр, при таком раскладе, сайт грузиться но компонент не работает, аналогично тому как на скриншоте, ошибок сейчас нет, так же точно происходит, если я первый вариант скрипта ставлю
Александр
Александр
Александр, Добрый вечер! Честно говоря так и не получается решить проблему с работой сеофильтра, не как не заводиться старичок:)

Получил ответ от автора:
Можете вообще убрать весь блок конструктора.
Я говорил проверить без подключения компонента — он возможно уже будет подключен, если нет,
можно через системную настройку, принудительно грузить его в память, как минишоп2 грузится.
Настройка в ключе содержит что то вроде packages или extensions.


Блок с конструктором, если я его правильно понял то я убирал:
public function __construct(modX &$modx, array $config = array()) {
           parent::contsruct($modx,$config)
           $this->modx->addPackage('extendResource' ,$this->modx->getOption('core_path').'components/extendresource/model/');
Честно говоря моло что понятно из этого, подскажите пожалуйста, каким образом реализовать то что он предложил?
Александр Мальцев
Александр Мальцев
Это про системный параметр extension_packages.
Нужно его найти и добавить в него расширение extendresource:
{"1":{"collections":{"path":"[[++core_path]]components/collections/model/"}},"2":{"tickets":{"path":"[[++core_path]]components/tickets/model/"}},"3":{"extendresource":{"path":"[[++core_path]]components/extendresource/model/"}}}
Находится настройка extension_packages в разделе core -> «Система и сервер».
Александр
Александр
Спасибо.