0

Extension Builder を使用して、TYPO3 v4.5 で拡張機能を作成しました。現在、作成/更新機能を持たないテーブルがいくつかあります。これは、あまり頻繁に変更されないためです (月に 1 回のみ)。それらを変更するには、TYPO3 でリスト ビューを使用したいと考えています。

それは機能します。レコードを作成および更新できます。しかし、他のレコードと関連しているレコードがある場合は、簡単に削除できます。もう一方のレコードには無効な値が含まれています。

例えば:

Books
_________________________
| Name        | AuthorID |
-------------------------
|Harry Potter | 1        |
-------------------------

Author
_________________________
| ID | Name              |
-------------------------
| 1  | Rowling           |
-------------------------

Rowling を削除すると、AuthorID フィールドに「無効な値」が表示されます。これを防ぐことはできますか?

編集: わかりました、これを防ぐ方法を見つけました: 拡張機能の TCE で predb フックを使用する必要があります。しかし、このコード (実験用のみ) は、レコードを削除すると機能しません。値が 1 の「deleted」という名前の配列要素を取得すると思ったのですが、表示されません。他のデータ (情報を変更したり、新しいレコードを作成した場合) が表示されます。

    /**
     * @param string $status
     * @param string $table
     * @param int $id
     * @param array $fieldArray
     * @param tce_main $tcemain
     */
    function processDatamap_postProcessFieldArray($status, $table, $id, &$fieldArray, &$tcemain) {
        $fp = fopen('../../typo3conf/ext/test/hooks/output.txt', 'w');
        for ($x = 0; $x < sizeof($fieldArray); ++$x)
        {
             fwrite($fp, "key: ".key($fieldArray)."\tvalue: ".current($fieldArray)."\n");
             next($fieldArray);
        }
        fclose($fp);
    }

EDIT2: 最初の回答のコメントのように、 status == delete を使用して、typ3 がレコードを削除するかどうかを確認できます。しかし、削除された属性のデータを変更できない場合 (fieldArray にないため)、どうすればこれを防ぐことができますか? 手がかりはありますか?

回答ありがとうございます。

4

1 に答える 1

0

リポジトリで削除メソッドを上書きするだけで、他のオブジェクトへの参照があるかどうかを確認できます。

于 2013-03-18T12:46:14.177 に答える