Jump to content

Хуки кода

Хуки кода позволяют расширить любой класс в Invision Community, или функционал установленного приложения. Вы можете создавать хуки кода в  Plugin Developer Center.

Как вы могли заметить, в коде классы при определении начинаются с подчеркивания, а вызывается без него. Например, в /system/Member/Member.php  определение следующее:

namespace IPS;
class _Member extends \IPS\Patterns\ActiveRecord

Уже в коде класс вызывается так \IPS\Member а не \IPS\_Member. При создании хука  определите класс который вы хотите расширить без подчеркивания. Когда вы редактируете код будет следующая надпись "extends _HOOK_CLASS_" –это из-за того что класс который он расширяет может варьироваться, если несколько хуков перегружают один и тот же класс.

Вы можете редактировать хуки как в Plugin Developer Center так и вручную, путем изменения файла, находящегося в /plugins/<ваш_плагин>/hooks. Использовать Plugin Developer Center удобнее так как все свойства и методы класса которые вы расширяете показаны в боковой панели и щелчок на любой из них вставит выражение в редактор.

Важные моменты которые нужно помнить при создании хуков:

  • Первая строчка в классе, который вы создаете, должна быть такой: //<?php – это если вы хотите править файл вручную в редакторе, чтобы подсветка синтаксиса работала верно, так или иначе  тэг <?php не должен применяться без комментариев.
  • Ваш хук определится как расширение _HOOK_CLASS_ - синтаксически это неверно, но это нельзя менять. Система сама изменит это на нужный класс который может изменяться в зависимости от того сколько на нем хуков.
  • Если ваш код создает PHP ошибку или выдает RuntimeException, ваш хук будет проигнорирован и система вернется к исходному классу. Если вы хотите намеренно создать исключение, добавьте объект соответствующего класса в исключение.
  • При переопределении метода НЕОБХОДИМО вызвать родительский метод. Идеально если вы вставите его в начало или конец метода. Это необходимо для работы нескольких хуков на один метод.
  • При переопределении метода, вам НЕ СЛЕДУЕТ копировать код оригинального метода в ваш хук. Необходимо убедиться, что ваш хук не будет конфликтовать с багфиксами или изменениями оригинального класса в будущих версиях. Кроме того, это противоречит условиям лицензии Invision Community на инъекции в него кастомного кода.



Messenger

    ×
    ×
    • Create New...

    Important Information

    By using our site you agree to our Privacy Policy