Переопределить функции ядра

Добрый день. Есть необходимость переопределить методы классов ядра (xPDO, modResource) так, чтобы изменения не затирались при обновлении. Как это лучше сделать?
Владимир
25 мая 2017, 10:12
modx.pro
1 007
0

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

Гриборий
25 мая 2017, 13:25
0
Создать свой класс, расширяющий modResource.
    Владимир
    25 мая 2017, 13:48
    0
    Нужно переопределить, а не расширить. Все объекты текущего класса должны работать с новой функцией. Т.е. если это modResource, то новая функция переопределена для всех
    $modx->getObject('modResource');
    во всем коде.
    Волков Николай
    25 мая 2017, 18:18
    0
    Если не секрет: Чего вы пытаетесь добиться от переопределения и чем не устраивает оригинал?
      Владимир
      25 мая 2017, 18:29
      0
      Есть проект с несколькими корневыми разделами и большим количеством документов. Для каждого раздела должны быть свои контент-менеджеры. Чтобы правильно распределить права между менеджерами, нужно каждому ресурсу задать группу ресурсов, а это долго и неудобно. Удобнее поместить в группу только родительский раздел, пометив его tv-параметром «Наследовать права».

      Собственно это я и сделал, переписав метод findPolicy в modResource.
        Волков Николай
        25 мая 2017, 19:10
        +2
        Какой же молодец! Как же я люблю подобные извращения, вызванные не желанием открыть и прочитать пару умных книг.
          Волков Николай
          25 мая 2017, 20:14
          +1
          Если включить голову и задуматься о том, как происходит загрузка ресурса, то не сложно догадаться, что сначала идет проверка прав на загрузку из БД данных для ресурса, а дальше идет проверка прав на их просмотр. Ну и если эти права есть, то только после этого вообще должна начаться загрузка ТВ у ресурса, по ходу которой для каждой ТВ будет производиться аналогичные проверки прав на просмотр и т.д.

          В вашем случае все наоборот ТВ -> РЕСУРС ->ТВ. И это не верно, т.к. у недоступного для пользователя ресурса значения ТВ тоже будут недоступны и следовательно при вашем «алгоритме» все через задницу. Словно сундук на замке, ключ от которого лежит внутри этого сундука.
            Владимир
            25 мая 2017, 21:30
            +2
            Чтобы не быть голословным, приведите пожалуйста ссылки на умные книги, где описанная задача с правами решена.
            Есть очень конкретный запрос от пользователя — переносить в группу один ресурс, а не ресурс и все его дочерние элементы. И пользователя не интересуют особенности проверки прав в MODX.
            Алгоритм работает, проверку прав на ТВ я обошел. Изначальный вопрос алгоритма вообще не касался. Но если у вас есть решение элегантнее, то опять же — поделитесь.
              Василий Наумкин
              26 мая 2017, 06:48
              +1
              Я бы написал плагин на сохранение ресурса, с проверкой его группы и переносом в неё потомков.
                Волков Николай
                28 мая 2017, 03:24
                0
                Позволю себе только добавить ссылку на умную книгу:

                bobsguides.com/user-specific-pages.html
                  Владимир
                  29 мая 2017, 10:27
                  0
                  В данной книге поставленная задача не решается.
                  Волков Николай
                  28 мая 2017, 03:41
                  0
                  Да и не забудьте сначала вернуть к первоначальному виду класс modResource.
                    Воеводский Михаил
                    29 мая 2017, 10:30
                    0
                    Небольшое дополнение — при сохранении ресурса проверять группу родителя (-ей) и переносить в соответствующую. Чтобы механизм работал не только при сохранении родителей.
            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
            12