Extbase Hooks — выполнять код при создании записи

Я хочу создать стандартное расширение typo3, но когда я создаю запись (или изменяю ее), я хочу что-то вычислить (в моем случае я хочу вызвать Google Map API, чтобы получить координаты с заданного адреса).

Поэтому я ищу крючок или что-то в этом роде. Есть идеи?


person nbar    schedule 17.06.2016    source источник
comment
Вы имеете в виду после создания записи из вашего расширения extbase или любой записи контента в бэкэнде?   -  person The F    schedule 17.06.2016
comment
@TheF После создания записи контента в бэкэнде для моего расширения. (Как вы создаете любую запись контента, но только этот тип записи для моего расширения)   -  person nbar    schedule 17.06.2016


Ответы (3)


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

В вашем файле расширения ext_localconf.php

// Hook for cancellation
$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processDatamapClass'][] = 'EXT:femanager/class.tx_femanager_tcemainprocdm.php:tx_femanager_tcemainprocdm';

файл ловушки class.tx_femanager_tcemainprocdm.php, где вы можете выполнить свой скрипт

class tx_femanager_tcemainprocdm{

    function processDatamap_postProcessFieldArray ($status, $table, $id, &$fieldArray, &$reference){
        // $status also called action like delete
        // $table - table name of excute backend action
        // $id - record UID
        // $fieldArray - fields of your table

        if($table = 'your_extension_table_name'){
            // your script  
        }
    }
}
person Ghanshyam Gohel    schedule 18.06.2016

Возможно, этот ответ полезно для вас.

Зарегистрируйте свой класс как в расширении обработки данных. Этот «вызывается ПОСЛЕ того, как все команды карты команд» были выполнены. Возможно нужно поискать более подходящий.

Затем в зарегистрированном хуке, т. е. 'typo3conf/ext/your_ext/Classes/Hooks/AfterCreate.php', выполните расчет. Надеюсь, это направит вас на верный путь.

person The F    schedule 17.06.2016

В моем частном случае не нужно было вычислять координаты при сохранении записи. Поэтому я просто использовал listAction в контроллере, проверил, есть ли координаты, и, если нет, вызовите Google API (и отправьте электронное письмо, если Google API не возвращает координаты).

В другом случае, когда новая запись поступает из внешнего плагина, и мне нужно было что-то делать с этими данными, я использовал createAction в контроллере. (Я не уверен, что createAction также вызывается, когда запись создается из бэкэнда.)

person nbar    schedule 30.08.2016