Jump to main content Jump to doc navigation

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

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

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

Расширить процессоры для нашего CopyrightedResource довольно просто. Загрузите ваш файл 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 {
}

Теперь мы переопределили процессоры для нашего класса; 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
  • modmore
  • Jens Wittmann – Gestaltung & Entwicklung
  • Raffy
  • eydolan
  • Digital Penguin
  • Fabian Christen
  • Dannevang Digital
  • deJaya
  • Following Sea
  • Sepia River Studios
  • Anton Tarasov
  • Lefthandmedia
  • Nick Clark
  • Chris Fickling
  • Murray Wood
  • YJ
  • CrewMark
  • Richard

Budget

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

Learn more