[РЕШЕНО]Как создать свой собственный хук?

Главные вкладки

Аватар пользователя dashiwa dashiwa 11 октября 2015 в 21:36

Итак пытаюсь создать свой хук. Пока не получается, возможно кто подскажет.

https://www.drupal.org/node/2302845 здесь примеров нет, только описаны способы.

http://graker.ru/drupal/20_api_za_20_dnei/hooks_api - данный пример не работает,возможно потому что 6-ка.

Пока ковыряю блок апи чтобы понять как это работает.

Что-то мне подсказывает что на этот вопрос я отвечу сам себе.

Комментарии

Аватар пользователя drupby drupby 11 октября 2015 в 22:04

"drupby" wrote:
https://www.drupal.org/node/2302845 здесь примеров нет, только описаны способы.

как раз таки там и описаны все возможные варианты с примерами - читай внимательно и вникай
там четко описаны типы хуков и их использование

Аватар пользователя dashiwa dashiwa 16 октября 2015 в 13:47

Возможно и примитивно. Доков с примерами особо нет. Во многих примерах ошибки. Но я разобрал этот вопрос.
Теперь поймет каждый
Спасибо Другу(Xdebug)


Приведу боле конкретные примеры

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

    function mymodule_menu ()
    {
        $menu [ 'mymodule' ] = array
        (
            'title' => 'Some title' ,
            'page callback' => 'my_page_callback' ,
            'access callback' => TRUE ,
        );
        return $menu ;
    }

    function my_page_callback () {
     
        $content = array('Line 1');
     
        foreach (module_implements('custom_hook_name') as $module) {
            $function = $module . '_custom_hook_name';      
            $content = $function($content);
        }
     
        $output = '' ;
        foreach( $content as $c )
        {
            $output .= '<p>' . $c . '</p>' ;
        }
        return $output ;
    }

Основная логика нашего хука(базовой функции)

    $content = array('Line 1');
      $output = '' ;
        foreach( $content as $c )
        {
            $output .= '<p>' . $c . '</p>' ;
        }
        return $output ;

Здесь мы имеем какой-то массив со строкой, и ее выводим на экран.
Вот что мы видим

Some title

Line 1

Естественно мы можем написать любую логику,все что угодно.

Теперь расширим данную логику. Реализовав хук в своем модуле. (соттветственно мы вызовем базовую логику + добавим то что нужно нам)
Возможности вашего хука определенны в базовой функции, документацию принято описывать в файле mymodule.api.php

В данном случае мы будем использовать (Сбор результатов в массив) для передачи результата переменной по ссылке

     foreach (module_implements('custom_hook_name') as $module) {
            $function = $module . '_custom_hook_name';      
            $content = $function($content);
        }

В итоге мы получаем вызов функции mymodule_custom_hook_name($content)
С возвратом всех определленных нами значений


Теперь реализуем нах хук

    function mymodule_custom_hook_name($content)
    {
        $content[] = 'Line 2';
        $content[] = 'Another line';
        return $content;
    }

В результате получим такой вывод

Some title

Line 1

Line 2

Another line

P.S кнопка вставка кода в мозилле не работает