---
title: "Frage zu Hooks"
url: "https://www.typo3.net/d/78498-frage-zu-hooks"
source: "typo3.net"
tags: ["Extensions","Entwicklung","Frage"]
created: "2008-06-16"
last_reply: "2008-06-16"
replies: 10
solved: false
page: 1
pages: 1
lang: "de"
---

# Frage zu Hooks

Extensions › Entwicklung · 10 Antworten · gestartet 2008-06-16

## Eröffnungsbeitrag

**schani** · 2008-06-16 · [Beitrag #1](https://www.typo3.net/d/78498-frage-zu-hooks/1)

Hallo,

ich habe eine eigene Extension. Dort werden Datensätze angelegt. Sobald ein neuer Datensatz gespeichert wird, soll nun eine page erstellt werden. Also im Verzeichnisbaum ein neuer Eintrag hinzukommen.

Soweit hab ich das mal umgesetzt:
In meiner ext_localconf.php habe ich dies eingetragen:

```php
$GLOBALS ['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processDatamapClass'][] = 'EXT:xxx_kunden/class.tx_xxx_kunden.php:tx_xxx_kunden_hook';

$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processDatamap_afterDatabaseOperations'][] = 'EXT:xxx_kunden/class.tx_xxx_kunden.php:tx_xxx_kunden_hook';
```

In der class.tx_xxx_kunden.php steht folgendes:

```php
<?php
class tx_xxx_kunden_hook {

  public function processDatamap_afterDatabaseOperations ($status,$table,$id,&$fieldArray,&$reference) {

			$tce = t3lib_div::makeInstance('t3lib_TCEmain');
			$tce->stripslashes_values = 0;   
			$hash = strtolower(md5(uniqid(rand(), true)));
			$data['pages']['NEW' . substr($hash, 0, 8-)] = array(
				'uid' => $page_uid,
				'title' => $fieldArray['title'],
				'hidden' => 0,
				'pid' => 26,  
				'doktype' => 254, 
				'perms_userid' => 2,
				'perms_groupid' => 2,
				'perms_user' => 31,
				'perms_group' => 27,
				'cruser_id' => 1,
					 
			);
			$tce->start($data, array());
			$tce->process_datamap();
			unset($data); 
			
			debug(func_get_args(),'TEST5');
					
    }
}
?>
```

Jetzt wird beim speichern eines Datensatzes meiner Extension, zwar ein das Hook angestoßen, aber es werden 1400 pages angelegt. Eigentlich sollte nur eines angelegt werden.

Könnt Ihr mir sagen was ich falsch mache?

Besten Dank für Hilfe

Christian

## Antworten

### [#2](https://www.typo3.net/d/78498-frage-zu-hooks/2) · steffenk · 2008-06-16

ja - der hook wird ja bei jeder Operation ausgeführt.
Du darfst dort nicht speichern, das macht TCE ja eh. Der Hook dient nur der manipulation der daten

if ($table == $mytable) {
  $fieldArray[whatever] = 'xyz';
}

mehr nicht.

### [#3](https://www.typo3.net/d/78498-frage-zu-hooks/3) · schani · 2008-06-16

Meinst Du in der Funktion?

Wo muss ich das den anwenden?
Wo wird da genau gespeichert?

Bitte um Hilfe

Christian

```php
#
public function processDatamap_afterDatabaseOperations ($status,$table,$id,&$fieldArray,&$reference) { 
                        $tce = t3lib_div::makeInstance('t3lib_TCEmain');
                        $tce->stripslashes_values = 0;   
                        $hash = strtolower(md5(uniqid(rand(), true)));
                        $data['pages']['NEW' . substr($hash, 0, 8-)] = array(
                                'uid' => $page_uid,
                                'title' => $fieldArray['title'],
                                'hidden' => 0,
                                'pid' => 26, 
                                'doktype' => 254,
                                'perms_userid' => 2,
                                'perms_groupid' => 2,
                                'perms_user' => 31,
                                'perms_group' => 27,
                                'cruser_id' => 1,
                                        
                        );
                        $tce->start($data, array());
                        $tce->process_datamap();
                        unset($data);
                       
                        debug(func_get_args(),'TEST5');
                                       
    }
}
```

### [#4](https://www.typo3.net/d/78498-frage-zu-hooks/4) · steffenk · 2008-06-16

ja klar in der Funktion.

Bei Dir wird bei jedem! Aufruf des hooks eine Seite angelegt, und das soll doch wohl nicht sein.

Was willst Du überhaupt erreichen, und vor allem in welcher Situation genau?

### [#5](https://www.typo3.net/d/78498-frage-zu-hooks/5) · schani · 2008-06-16

Ja genau, nur bin ich mir jetzt nicht klar wo ich die die Beschränkung reinmache. Ist die Funktion aber generell so richtig?

Reicht es wenn ich es um
$tce->start($data, array());
$tce->process_datamap();

mache?

Was passiert wenn der Datensatz schon mal gespeichert ist? Wird dann ein neuer angelegt, oder der alte überschreiben ?

Christian

### [#6](https://www.typo3.net/d/78498-frage-zu-hooks/6) · steffenk · 2008-06-16

also, da ich nicht weiss wann die Seite angelegt werden soll, kann ich auch nichts zur Beschränkung sagen
'uid' => $page_uid, ???
uid wird ermittelt, was Du aber setzen must ist pid für das Elternelement
$page_uid ist nirgends vorhanden

Und sicher, es wird immer eine neue angelegt, da musst Du Dich schon selber drum kümmern

t3lib_BEfunc::getSetUpdateSignal('updatePageTree');
sollte auch immer nach page-Anlegen aufgerufen werden.

### [#7](https://www.typo3.net/d/78498-frage-zu-hooks/7) · schani · 2008-06-16

Kann ich das steuern? Also wann die Seite angelegt werden soll?

Eigentlich sobald ich in meiner ext einen neuen Datensatz abspeichere. Dann hab ich eine eingene ID auf die ich verweisen kann.
Was ich nicht weis ist, wie das gesteuert wird.

Und wenn der Datensatz meiner ext nur editiert wird soll natürlich kein neuer pages Eintrag angelegt werden.

1. Anlegen speicher
2. nur Speichern

Das müsste ich ja dann in meiner ext_localconf.php festlegen, oder?

Christian

### [#8](https://www.typo3.net/d/78498-frage-zu-hooks/8) · steffenk · 2008-06-16

hatte ich doch schon geschrieben, werte $table aus

### [#9](https://www.typo3.net/d/78498-frage-zu-hooks/9) · schani · 2008-06-16

Kannst Du mir noch einen Tipp geben?

Warum kann ich denn in der Funktion keinen debug($table,'Table') setzen?

Christian

### [#10](https://www.typo3.net/d/78498-frage-zu-hooks/10) · steffenk · 2008-06-16

wenn das über Ajax aufgerufen wird, gibts keine Ausgaben, da der Header anders ist.
Ich helfe mir dann mit so einer Ausgabe:

```php
file_put_contents('c:\t3log.txt',print_r($var,true));
```

### [#11](https://www.typo3.net/d/78498-frage-zu-hooks/11) · schani · 2008-06-16

Super Danke,

jetzt sehe ich etwas Licht am Ende des Tunnels ;-)

Besten Dank

Christian

---

Quelle: „Frage zu Hooks“, typo3.net, https://www.typo3.net/d/78498-frage-zu-hooks
Beiträge von Mitgliedern des Forums. Bitte mit Link auf die Diskussion zitieren.
