После сохранения идентификатора Youtube я хотел бы получить некоторые данные API и записать их в базу данных. Но моя функция никогда не вызывается. Что я пробовал до сих пор:
ext_localconf.php
\TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Extbase\\SignalSlot\\Dispatcher')->connect(
'TYPO3\\CMS\\Extbase\\Persistence\\Generic\\Backend',
'afterInsertObject',
'VENDOR\\MyExtension\\Slots\\SaveVideo',
'getVideoData'
);
Классы / Слоты / SaveVideo.php
namespace VENDOR\MyExtension\Slots;
class SaveVideo {
public function getVideoData($object) {
echo "Yeaha";
var_dump($object);
}
}
Когда вы редактируете записи в бэкэнде, вы делаете это через TCE (TYPO3 Core Engine), также известный как TCEForm и TCEMain.
TCEForm генерирует форму из TCA (таблицы конфигурации таблицы), где вы можете редактировать и создавать новые записи.
TCEMain занимается обработкой данных и хранит их в базе данных. Он также заботится о таких командах, как перемещение, копирование, удаление, восстановление, локализация и версия. TCEMain имеет новое имя, DataHandler
, DataHandler
класс можно найти здесь:
typo3/sysext/core/Classes/DataHandling/DataHandler.php
Вы можете прочитать больше о ТВК здесь
DataHandler
В классе есть много хуков, где вы можете манипулировать данными до их сохранения в бэкэнде. Попробуйте найти $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']
и вы найдете что-то вроде ниже.
if (is_array($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processDatamapClass'])) {
Мы можем использовать это, чтобы зарегистрировать наш хук в ext_localconf.php
, Имейте в виду, что есть много доступных типов хуков, но это processDatamapClass
мы заинтересованы в.
В тебе ext_localconf.php
добавлять:
$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processDatamapClass'][] = 'VendorName\\ExtentionName\\Hooks\\ProcessDatamapClass';
Создать файл extension_name/Classes/Hooks/ProcessDatamapClass.php
и на этом контенте.
<?php
namespace VendorName\ExtentionName\Hooks;
class ProcessDatamapClass {
public function processDatamap_postProcessFieldArray($status, $table, $id, &$fieldArray, $obj) {
if($table == 'tx_extentionname_domain_model_yourtable') {
// Your code goes here!
// Note that $fieldArray is a reference so you can now modify the fields
// before they are stored in the database
}
}
}
Этот код теперь будет запускаться каждый раз, когда вы редактируете или создаете запись в бэкэнде. Поэтому важно инкапсулировать ваш код только для вашего типа записи / имени таблицы!
Я надеюсь, что это помогло вам. Вы можете прочитать больше о крюках здесь.
Других решений пока нет …