バックエンドで拡張機能を編集するときに、TCEフィールドに出力される前に、データベース出力を変更できるフックを探しています。
class.t3lib_tceforms.phpでgetSingleField_preProcessを試しましたが、拡張機能に関連するデータが含まれていませんでした。
バックエンドで拡張機能を編集するときに、TCEフィールドに出力される前に、データベース出力を変更できるフックを探しています。
class.t3lib_tceforms.phpでgetSingleField_preProcessを試しましたが、拡張機能に関連するデータが含まれていませんでした。
getSingleField_preProcess
あなたが望むもののための正しいフックでなければなりません。問題は、関数が自分のテーブルだけでなく、すべてのテーブルのレコードに対して呼び出されることだと思います。レンダリングされるテーブルに基づいて、処理を実行するタイミングを区別する必要があります。テーブルの名前がメソッドに渡されますgetSingleField_preProcess()
。
ext_localconf.phpはフックを登録する必要があります:
$GLOBALS ['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tceforms.php']['getSingleFieldClass'][] = 'tx_yourextension_be';
...ここで、tx_yourextension_beは、バックエンド処理用に指定されたクラスの名前です。このクラスには、次のgetSingleField_preProcess()
メソッドが含まれている必要があります。
public function getSingleField_preProcess($table, $field, &$row, $altName, $palette, $extra, $pal, &$pObj) {
// ...processing...
}
ご覧のとおり、いくつかの変数がメソッドに渡されます。$table
処理されたレコードが属するテーブルの名前が含まれます。$field
レンダリングされるフィールドの名前です。$row
操作できるレコード全体が含まれています。
TCEmain
おそらくフックを使いたい
function processDatamap_preProcessFieldArray(array &$incomingFieldArray, $table, $id, t3lib_TCEmain &$reference) {
if ($table == 'tx_yourext_table') {
$a = $incomingFieldArray['field_a'];
$b = $incomingFieldArray['field_b'];
$incomingFieldArray['field_c'] = $a . ' ' . $b;
}
}
または
function processDatamap_afterDatabaseOperations($status, $table, $id, $fieldArray, &$reference) {
if ($table == 'tx_yourext_table') {
if ($status == 'update') {
$this->doSomethingWithRecordAfterUpdate($id);
}
}
}
もちろんext_localconf.php
、例として、拡張機能のフックインを登録する必要があります。
$GLOBALS ['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processDatamapClass']['yourext']
= 'EXT:yourext/class.tx_yourext_tcemain.php:tx_yourext_tcemain';