0

バックエンドで拡張機能を編集するときに、TCEフィールドに出力される前に、データベース出力を変更できるフックを探しています。

class.t3lib_tceforms.phpでgetSingleField_preProcessを試しましたが、拡張機能に関連するデータが含まれていませんでした。

4

2 に答える 2

2

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操作できるレコード全体が含まれています。

于 2012-07-02T09:33:04.843 に答える
1

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';
于 2012-07-02T09:12:19.767 に答える