Jump to main content Jump to doc navigation

Этот урок является частью серии:

Это небольшой бонусный материал, помогающий определить некоторые вещи, что можно сделать, расширяя стандартные процессоры.

Имена классов в MODX 3.x

При создании или обновлении CRC метод MODX\Revolution\Processors\Resource\Create::getInstance() ищет класс {class_key}CreateProcessor. Процессор обновления ищет {class_key}UpdateProcessor. Эти классы должны расширять основные процессоры ресурсов.

Файлы 2.x core/model/modx/processors/resource/create.class.php и update.class.php удалены. Не подключайте их через require_once.

Старый класс Новый класс
modResourceCreateProcessor \MODX\Revolution\Processors\Resource\Create
modResourceUpdateProcessor \MODX\Revolution\Processors\Resource\Update

core/include/deprecated.php даёт псевдонимы старых имён до 3.3. Для кода только под 3.0+ расширяйте классы с пространствами имён:

use MODX\Revolution\Processors\Resource\Create;
use MODX\Revolution\Processors\Resource\Update;

class CopyrightedResourceCreateProcessor extends Create
{
}

class CopyrightedResourceUpdateProcessor extends Update
{
}

См. процессоры в заметках об обновлении до 3.0.

Расширение процессоров для нашего CRC

Расширить процессоры для нашего CopyrightedResource довольно просто. В MODX 2.x загрузите ваш файл copyrightedresource.class.php, содержащий ваш основной класс, и в верхней части поместите следующий код:

require_once MODX_CORE_PATH.'model/modx/modprocessor.class.php';
require_once MODX_CORE_PATH.'model/modx/processors/resource/create.class.php';
require_once MODX_CORE_PATH.'model/modx/processors/resource/update.class.php';

Это говорит MODX загружать некоторые базовые классы, которые нам понадобятся. Поскольку MODX видит наш файл основного класса, и этот класс будет включен при загрузке MODX, нам просто может потребоваться больше файлов оттуда. Внизу того же файла, после вашего класса CopyrightedResource, поместите следующий код:

class CopyrightedResourceCreateProcessor extends modResourceCreateProcessor {
}
class CopyrightedResourceUpdateProcessor extends modResourceUpdateProcessor {
}

В 3.x эти строки require_once не нужны. Расширяйте \MODX\Revolution\Processors\Resource\Create и Update, как показано выше.

Теперь мы переопределили процессоры для нашего класса; MODX будет автоматически использовать эти классы в качестве класса процессора при создании или обновлении нашего CRC. Затем мы можем переопределить методы, чтобы обеспечить пользовательскую функциональность для нашего класса CopyrightedResource. Например, вот заглушка для нашего класса CopyrightedResource и процессора обновлений. Она показывает некоторые методы, которые вы можете переопределить:

class CopyrightedResourceUpdateProcessor extends modResourceUpdateProcessor {
   /**
    * Выполнить любую обработку до того, как поля установлены
    * @return boolean
    */
   public function beforeSet() {
       $beforeSet = parent::beforeSet();
       /* включить всегда опцию кэширования принудительно для всех страниц нашего  CRC */
       $this->setProperty('cacheable',true);
       return $beforeSet;
   }
   /**
    * Выполнить любую обработку до сохранения ресурса, но после установки полей.
    * @return boolean
    */
   public function beforeSave() {
       $beforeSave = parent::beforeSave();
       if ($this->object->get('longtitle') == 'Send an Error') {
           $this->addFieldError('longtitle','Specify a different longtitle!');
       }
       /* принудительно сделать объекты CopyrightedResource не-директориями */
       $this->object->set('isfolder',false);
       return $beforeSave;
   }
   /**
    * Выполнить любой код после обработки
    * @return boolean
    */
   public function afterSave() {
       $afterSave = parent::afterSave();
       $this->modx->log(modX::LOG_LEVEL_DEBUG,'Saving a Copyrighted Page!');
       return $afterSave;
   }
}

Это просто тривиальные примеры, но, надеюсь, вы поняли идею. Если вы обращали пристальное внимание на наши примеры на этих страницах, вы, возможно, заметили, что мы установили некоторые свойства в классе CopyrightedResource (class_key), а другие - в CopyrightedResourceUpdateProcessor (cacheable, isfolder). Это может сбить вас с толку относительно того, где вы должны изменять поведение - в дочернем классе ресурса? В классе контроллера? Или быть может в процессоре?

Если атрибут является чем-то, что может управляться графическим интерфейсом, вам придется выполнить некоторые настройки в процессорах.

Дополнительные атрибуты

Есть некоторые атрибуты, которых нет в таблице modx_site_content. См. комментарии в файле modresource.class.php для получения списка атрибутов. Вы можете установить их в своем классе ресурсов с помощью метода set, например:

$this->set('show_in_tree',false);
$this->set('hide_children_in_tree',true);

Вы можете настроить значок, используемый в ресурсе MODX, создав системный параметр, названный в виде вашего пользовательского класса ресурсов: mgr_tree_icon_ + strtolower($class_key). Установите его значение в используемом классе CSS.

Заключение

И это всё! Очевидно, что с CRC существует множество возможностей. Вы действительно можете сходить с ума при настройке, которую вы можете применять к ним, а также по их логике обработки и рендеринга. Развлекайтесь!

Support the team building MODX with a monthly donation.

The budget raised through OpenCollective is transparent, including payouts, and any contributor can apply to be paid for their work on MODX.

Backers

  • modmore
  • STERC
  • Digital Penguin
  • Jens Wittmann – Gestaltung & Entwicklung
  • CrewMark
  • Fabian Christen
  • Sepia River Studios
  • Dannevang Digital
  • Alex
  • A. Moreno
  • Chris Fickling
  • Stéphane Jäggi
  • Murray Wood
  • Anton Tarasov
  • deJaya
  • JT Skaggs
  • Lefthandmedia
  • eydolan
  • Following Sea
  • Guido Gallenkamp
  • YJ
  • Raffy
  • Snow Creative
  • Nick Clark
  • Guest
  • Helen
  • krisznet
  • Yanni
  • Richard

Budget

$204 per month—let's make that $500!

Learn more