mFilter2 и virtualPage - Cannot declare class myCustomFilter, because the name is already in use

Друзья, никто не сталкивался с такой проблемой: пытаюсь вывести на сайте каталог при помощи mFilter2, создал свои фильтры — все работает, но если вывожу его при помощи virtualPage — выдает следующую ошибку:

Fatal error: Cannot declare class myCustomFilter, because the name is already in use in /core/components/msearch2/custom/filters/my.class.php on line 156

В чем может быть проблема и как ее лечить? Спасибо.
Евгений
07 декабря 2018, 18:04
modx.pro
979
0

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

Евгений
17 января 2019, 14:41
0
Уже всю голову сломал, так и не нашел решения( Никто не сталкивался с такой проблемой или аналогичной? Куда хотя бы копать?
    Наумов Алексей
    17 января 2019, 15:07
    0
    Наверное фаш файл 2 раза подключается через include или require… ищите где и почему.

    Или меняйте не _once.
      Евгений
      18 января 2019, 10:44
      0
      Дело не в файле точно. Проблема возникает, как только указываешь в настройках mSearch2 пункт «mse2_filters_handler_class». Причем неважно какое значение туда ставишь и какой класс используется в файле /msearch2/custom/filters/*.class.php — результат один и тот же.

      Более того, пробовал конструкцию
      class myCustomFilter extends mse2FiltersHandler {}
      переносить в конец файла /msearch2/model/msearch2/filters.class.php — тоже самое.

      Как временное решение, все созданные фильтры пишу в конец секции
      class mse2FiltersHandler {}
      файла filters.class.php, без подключения доп. класса и расширения mse2FiltersHandler. При обновлении соответственно есть шанс, что все слетит, поэтому храню фильтры еще отдельно, чтобы их восстановить можно было.
        Наумов Алексей
        18 января 2019, 11:17
        +1
        У меня нет свежего кода mSearch2.

        Но в старом я за 2 минуты нашел код подключения файла кастомных фильтров в файле msearch2.class.php:

        public function loadCustomClasses($dir)
        {
        ...
        include $customPath . '/' . $file;
        ...
        }
        здесь используется include. В вашем случае он кажется 2 раза вызывается, и пытается еще раз объявить класс myCustomFilter, который уже объявлен.

        Ищите, почему 2 раза подключается!
          Евгений
          18 января 2019, 11:32
          0
          Спасибо! Буду разбираться, где вызов повторный идет, а пока временно поменял на include_once и все заработало.
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      5