что такое хуки php

Что такое хуки php

У каждого хука должен быть комментарий с описанием (например, точка входа, или что делает хук), а также с описанием параметров (только для PHP-хуков ).

Основные тезисы по хукам¶

Хуки нужны для расширения функций разработчиками. Поэтому передавайте в хук максимум параметров — лучше перестараться, чем недостараться.

В названии хука обязательно должно содержаться название функции.

Префиксы использовать нельзя. Можно использовать только суффиксы.

Если у вас сложная функция, и в ней много хуков, то именовать хуки можно примерно так:

Для хуков в классах: каждый хук должен содержать название класса, в котором он вызывается.

Для хуков в классах: каждый хук должен первым параметром передавать инстанс класса:

Как и куда добавлять хуки¶

Исходим из того, что в каждой функции должно быть минимум два хука:

Также могут быть дополнительные хуки:

extra hooks, как пример, можно посмотреть на функцию выбора товаров:

Некоторые хуки не соответствуют вышеозначенным стандартам, тогда ставим им комментарий такого вида:

Формат оформления хуков¶

Ниже приведены форматы для комментариев для базы хуков.

PHP-хуки и функции¶

Формат комментариев заимствован у PHPDocumentor. Такой формат комментариев должен применяться повсеместно ко всем функциям.

Для генерации документации используется программа Doxygen (вот руководство).

Основные правила и рекомендации по написанию комментариев:

Комментарий начинается с большой буквы, точка в конце не ставится.

Глагол для описания того, что делает функция, употребляется в 3 лице и единственном числе, т.е. “Получает данные пользователя” — “Gets user data”.

Названия и значения переменных, пути к файлам, названия файлов и прочие имена собственные следует выделять курсивным написанием (при помощи HTML-тега ).

Например: Function foo (in foo/bar/functions) accepts parameter $bar

По возможности старайтесь описать переменную так, чтобы было ясно, зачем она нужна именно этой функции.

Комментарий должен находится непосредственно перед хуком.

Источник

Хуки в PHP — расширение функций и контроллеров ядра

Общая информация

Многие функции и методы CS-Cart (Multi-Vendor) имеют специальные хуки.

Хуки позволяют модифицировать и расширять возможности платформы с помощью модуля.

С помощью хука можно:

Хуки расположены в функциях и методах ядра CS-Cart.

Общий принцип использования и работы с хуками:

Доступно очень много хуков:

Как выглядт и как использовать хук?

Хуки в PHP выглядят так:

Чтобы подключиться к хуку, вам необходимо:

Инициализировать подключение к хуку.

В данный файл добавьте функцию:

Если используте несколько хуков, передавайте названия хуков через запятую:

Создайте функцию, которая будет выполняться в хуке.

Функция должна иметь название вида: fn_[id_модуля]_[название_хука]($[параметры_хука_через_запятую])

В функции будут доступны все параметры передаваемые в хук.

Чтобы функция могла влиять на параметры (изменять снаружи), их необходимо передавать как ссылки ( &$param )

Живой пример

Предположим, что нам нужно добавить какую то новую информацию о товаре, если товара нет на складе.

Подключимся к последнему хуку и добавим нужную нам информацию с помощью модуля “Мои изменения”:

Добавим в него код:

Создадим функцию для подключения к хуку.

Создадим файл app/addons/my_changes/func.php

Добавим новую функцию, которая сработает в хуке:

Включим модуль “Мои изменения”.

Как проверить что оно работает?

Используйте функцию fn_print_r($product_data); до хука, после хука или внутри хука. Она распечатает на экран содержимое массива.

Как я могу использовать именно этот пример?

Создайте новую вкладку с SMARTY блоком для карточки товара. В данном SMARTY блоке вы можете использовать информацию из массива <$product_data>, в том числе вашу новую информацию, например, для каких либо условий.

Источник

Хуки в PHP — расширение функций и контроллеров ядра¶

Общая информация¶

Многие функции и методы CS-Cart имеют специальные хуки.

Хуки позволяют модифицировать и расширять возможности платформы с помощью модуля.

С помощью хука можно:

Хуки расположены в функциях и методах ядра CS-Cart.

Общий принцип использования и работы с хуками:

Доступно очень много хуков:

Как выглядит и как использовать хук?¶

Хуки в PHP выглядят так:

Чтобы подключиться к хуку, вам необходимо:

Инициализировать подключение к хуку.

В данный файл добавьте функцию:

Если используте несколько хуков, передавайте названия хуков через запятую:

Создайте функцию, которая будет выполняться в хуке.

Функция должна иметь название вида: fn_[id_модуля]_[название_хука]($[параметры_хука_через_запятую])

В функции будут доступны все параметры передаваемые в хук.

Чтобы функция могла влиять на параметры (изменять снаружи), их необходимо передавать как ссылки ( &$param )

Живой пример¶

Предположим, что нам нужно добавить какую то новую информацию о товаре, если товара нет на складе.

Подключимся к последнему хуку и добавим нужную нам информацию с помощью модуля “Мои изменения”:

Добавим в него код:

Создадим функцию для подключения к хуку.

Создадим файл app/addons/my_changes/func.php

Добавим новую функцию, которая сработает в хуке:

Включим модуль “Мои изменения”.

Как проверить что оно работает?

Используйте функцию fn_print_r($product_data); до хука, после хука или внутри хука. Она распечатает на экран содержимое массива.

Как я могу использовать именно этот пример?

Создайте новую вкладку с SMARTY блоком для карточки товара. В данном SMARTY блоке вы можете использовать информацию из массива <$product_data>, в том числе вашу новую информацию, например, для каких либо условий.

Разграничение редакций¶

Хуки, которыми будут расширяться редакции, необходимы, чтобы избежать услвоий по типу:

Нам нужно расширить данную функцию в Multi-Vendor. Таким образом, в файле /app/functions/fn.multivendor.php создаем функцию:

Код для определенной редакции¶

Или же использовать отрицание:

Первая часть кода означает, что этот код появится в перечисленных редакциях, вторая же часть — что код НЕ появится в этих редакциях

Хуки в PHP скриптах¶

Версионные теги так же используют фукнцию fn_allowed_for :

Источник

PHP система плагинов на основе хуков (hooks)

что такое хуки php. Смотреть фото что такое хуки php. Смотреть картинку что такое хуки php. Картинка про что такое хуки php. Фото что такое хуки php

Здравствуйте, уважаемые читатели блога LifeExample, сегодня предлагаю затронуть очень редкую тему, информации о которой в интернете, кране не хватает. Говорить мы будем о том, как самостоятельно сделать систему плагинов для своей CMS.

Однажды, я где-то читал мысль, что каждый уважающий себя php программист, обязан, хотя бы попробовать сделать свою CMS. И на самом деле очень много, моих знакомых разрабатывали свои домашние системы управления сайтом. Вот и я не стал исключением, и сделал собственную CMS, которая в последствии вылилась в обособленный проект MOGUTA.CMS.

MOGUTA.CMS теперь имеет все задатки, для того, чтобы попытаться покорить сердца начинающих предпринимателей, дав им возможность комфортно управлять своими интернет-магазинами. Именно поэтому у меня давно уже зрело желание создать систему плагинов для своей CMS, да такую чтобы она была легкой и удобной для работы пользователей и программистов.

Проработав некоторое время с движком WordPress, я не мог не оценить его механизм взаимодействия плагинов и ядра, который основан на системе хуков (Hooks – с англ. крючек, зацепка). Опираясь именно на эту концепцию системы плагинов, я решил разработать ее аналог в своей CMS.

PHP hooks – хуки и их концепция

Система хуков как нельзя лучше подходит для расширения функционала CMS, поскольку позволяет довольно гибко оперировать функциями движка, меняя их логику и поведение. Поскольку мне не довелось встретить толкового и обширного объяснения природы плагинов на основе хуков, я попробую изложить ее смысл, настолько — насколько сам его понимаю.

Предлагаю рассмотреть, что такое php hooks, и как их реализовать на простом примере.

В упрощенном виде, система хуков в PHP может выглядеть таким образом:

В общих чертах система хуков именно так и должна работать, но это далеко не все ее возможности. С помощью хуков в php можно полностью изменить тело функции, в которой был создан хук, а можно лишь повлиять на результат, перед тем как она его вернет, также можно передать в исходную функцию другие параметры. Все это позволяет сделать систему неимоверно гибкой.

Но за такую гибкость приходится платить производительностью системы в целом, поэтому перед реализацией в php системы хуков, советую хорошенько подготовиться теоретически.

Как реализовать Hooks

На самом деле система хуков намного сложнее, чем приведенная ниже, но на первом этапе знакомства будет вполне достаточно рассмотреть в миниатюре механизм взаимодействия плагинов и ядра.

В архиве находится три файла:

Давайте начнем разбираться с файла index.php

//Эмуляция запуска ядра системы
$core = new Core ( ) ;

В данном скрипте происходит:

Следующая строка, создает действие с именем ‘demoHook’

Откроем из архива файл plugin.php

//пользовательская функция выполняющаяся при определенном событии
function myFunction ( ) <
echo »
>>>Действия плагина ;
>

Запустив файлы архива, мы увидим такой результат:

что такое хуки php. Смотреть фото что такое хуки php. Смотреть картинку что такое хуки php. Картинка про что такое хуки php. Фото что такое хуки php

Как устроена система хуков

В выше приведенном примере использовалась библиотека для механизма крючков и зацепок, мы подключали ее строкой:

Давайте откроем этот файл и посмотрим, что же в нем хранится, и как все это работает.

/**
* Библиотека хуков, содержит интерфейсы PluginManager и Hook,
* а также класс PM и EventHook
* Класс PM предназначен для управления плагинами
* Класс Hook создает обработчик событий
*
* Автор: Авдеев Марк
* Ссылка на описание: http://lifeexampl.nichost.ru/php-primeryi-skriptov/php-sistema-plaginov-na-osnove-hukov-hooks.html
*/

// Клас PM (plugin Manager) управляет плагинами,
// регистрирует плагины и устанавливает их взаимодействие с системой.
class PM implements PluginManager <

//Вешает обработчик для заданного хука
class EventHook implements Hook <

Вся логика взаимодействия хуков с обработчиками основана на паттерне observer, также известного как «Издатель и Подписчик». Я не буду сейчас описывать суть данного шаблона проектирования, поскольку делал это ранее.

Смысл заключается в том, что все пользовательские функции регистрируются для соответствующих действий классом PM в качестве обработчиков событий-хуков (EventHook).

В результате, зарегистрированные на этапе подключения плагинов функции, могут влиять на поведения любого из стандартных системных методов, а это полностью удовлетворяет задачу плагинов.

Вывод

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

Ну а если вам все же интересно как можно развить данную заготовку до полноценной системы плагинов, рекомендую ознакомиться с моим движком MOGUTA.CMS, в котором механизм хуков учитывает все атрибуты настоящих плагинов такие как:

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

Надеюсь эта реализация системы хуков оказалась для вас настолько же интересной как и для меня.

Источник

Cotonti / Open Source PHP Content Management FrameworkContent Management Framework

Что такое Хуки или как управлять потоком исполнения системы

#1. Что такое Хуки?

Хук (от англ. hook) это специальное место в программе, вкотором может быть выполнен какой-либо сторонний скрипт (в данном случае соответствующая часть плагина или модуля), с тем чтобы изменить логику исполнения основной программы. Можно рассматривать этот механизм, как некоторое событие, которое должно быть обработано специальным кодом. В реальности Cotonti подключает соответствующий PHP файл, зарегистрированный как обработчик соответствующего события (хука). Рассмотрим программу в которой есть Хук:

Теперь предположим у нас есть обработчик данного хука, который имеет доступ ко всем переменным в данной областивидимости (в контексте вызова). Этот обработчик может выглядеть например так:

Во время выполнения Cotonti, код будет преобразован в следующую последовательность:

Таким образом, хуки это ваши помощники в деле расширения возможностей текущего кода. В Cotonti их существует достаточно большое количество, что позволяет изменить практически все.

#2. Какой хук выбрать?

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

#2.1. Основные хуки

Некоторые хуки в системе вызываются практически всегда и строго в определенном порядке относительно друг друга:

В зависимости от запрошенной страницы сайта и вызова того или иного обработчика (расширения) могут быть вызваны следующие хуки:

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

(Note: тег доступен для использования начиная с версии 0.9.6 )

#2.2. Правила именования

Поговорим немного о правилах именования хуков. Большинство имен хуков состоит из нескольких слов разделенных точкой. Например:

что такое хуки php. Смотреть фото что такое хуки php. Смотреть картинку что такое хуки php. Картинка про что такое хуки php. Фото что такое хуки php

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

#3. Программируем обработчик

Примерный шаблон файла-обработчика представлен ниже:

Ключ Tags используется для описания дополнительных тегов, назначаемых в процессе обработки. Этот ключ используется в качестве информационного — для отображения в админ-панеле списка дополнительных тегов и имен шаблонов в которых они используются.

Что же мы можем сделать используя обработчики? Да почти все что угодно! Вот несколько простеньких примеров:

Основной совет начинающим разработчикам расширений для Cotonti —начните с изучения кода. Если вы хотите знать как писать плагины — посмотрите на код некоторых из них (среди них есть очень простые и понятные даже для начинающих). Если вы хотите знать как изменить поведение той или иной части — найдите код, который за нее отвечает, посмотрите где определены ближайшие точки вызова хуков и проанализируйте что происходит в этом куске кода. Cotonti написан в простой и понятной форме и код исполняется достаточно линейно, поэтому можно быстро в нем разобраться. Как только вы разберете основной алгоритм выполнения, вы с легкостью сможете менять его. Для написания более сложных плагинов вам потребуется иметь дело с несколькими хуками и обработчиками, но это уже будет не намного сложней чем начать..

В некоторых случаях вам даже не надо поробно изучать код вызова для написания своего обработчика. Как пример, можно привети добавление нескольких новых тегов в шаблон заголовка страницы или вывести какую либо информацию из БД.

#4. Расширяем собственные модули

Под модулем здесь понимается любое расширение для Cotonti. После того, как вы изучили, как работать с хуками и писать для них свой обработчик — самое время позаботится о других разработчиках, которые, возможно, захотят дополнить ваше расширение. И самый просто вариант это добавить выхов хуков в местах наиболее вероятного расширения, точно так же как это делает ядро системы:

Заменяем строку ‘ myext.hook.name ‘ на имя нашего хука (помните описанные выше правила именования? ) и почти готово. Возможно вы заметито, что данный код можно записать в одну строку, но мы рекомендуем использовать именно приведенную (6-ти строчную) форму записиruct для того, чтобы он был выделен среди прочего кода, и стороннему разработчику было проще найти точку расширения.

Несколько более громоздким выглядит код в случае, когда надо вызывать обработчик на каждом шаге цикла:

Суть кода вынести вызов функции cot_getextplugins() из цикла для ускорения выполнения скрипта.

#4.1. Списки вызова хуков

В зависимости от запрошенного на сайте URL обработка данных для вывода страницы может идти несколько разными путяни. Ниже приведен упорядоченный список вызова основных хуков, для хороктерных случаев::

Примечание: элементы списка помеченные знаком «(*)" означают, многократный последовательный взов хука. Хуки помещенные в квадратные скобки «[]" подразумевают возможный вызов, т.к. их список и конкретные имена зависят от верси ядра и набора установленных расширений. Хуки отмеченные жирным шрифтом являются системными и описаны выше.above).

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *