---
title: "Ausgeblendete Datensatz-Felder in TCE MAIN Speichern-Hook"
url: "https://www.typo3.net/d/110944-ausgeblendete-datensatz-felder-in-tce-main-speichern-hook"
source: "typo3.net"
tags: ["Extensions","Entwicklung","Frage","TCA"]
created: "2012-06-12"
last_reply: "2012-06-13"
replies: 10
solved: false
page: 1
pages: 1
lang: "de"
---

# Ausgeblendete Datensatz-Felder in TCE MAIN Speichern-Hook

Extensions › Entwicklung · 10 Antworten · gestartet 2012-06-12

## Eröffnungsbeitrag

**Unbekannter Benutzer** · 2012-06-12 · [Beitrag #1](https://www.typo3.net/d/110944-ausgeblendete-datensatz-felder-in-tce-main-speichern-hook/1)

Hi,

ich habe in einem Datensatz meiner Extension ein Feld namens **hash**. Dieses Feld soll vom Benutzer nicht bearbeitet werden können, denn der Wert dieses Feldes wird automatisch beim Speichern eines Datensatzes generiert (alles im Backend).

Die automatische Generierung funktioniert einwandfrei, solange man das Feld im Backend bearbeiten kann (es ist also im TCE Form vorhanden). Dazu benutze ich folgenden Hook aus **t3lib/class.t3lib_tcemain.php**:

```php
<?php
function processDatamap_preProcessFieldArray(&$fieldArray, $table, $id, &$tceobj)
{
    if($table == 'tx_meineext_meinetabelle')
    {
        $fieldArray['hash'] = '1234567890';
    }
}
?>
```

Im TCA wird das Feld momentan wie folgt definiert (es ist also ganz normal sichtbar und editierbar):

```php
<?php
'hash' => array (
    'label' => 'Hash',
    'config' => array (
        'type' => 'input',
        'size' => '30',
        'eval' => 'int',
    )
),
?>
```

Um das Feld im Backend auszublenden habe ich im TCA den Typ **passthrough** eingetragen.

```php
<?php
'hash' => array (
    'config' => array (
        'type' => 'passthrough',
    )
),
?>
```

Dies hatte jedoch zur Folge, dass das Feld im Hook nicht mehr vorhanden war.

Mit **readOnly => 1** hatte ich genau so wenig Glück:

```php
<?php
'hash' => array (
    'label' => 'Hash',
    'config' => array (
        'type' => 'input',
        'size' => '30',
        'eval' => 'int',
        'readOnly' => 1,
    )
),
?>
```

Wie kann man ein Feld im Backend so verbergen, dass es im Hook dennoch verfügbar ist?

## Antworten

### [#2](https://www.typo3.net/d/110944-ausgeblendete-datensatz-felder-in-tce-main-speichern-hook/2) · aemka · 2012-06-12

<http://wiki.lbrmedia.net/Typo3:CodeSnippets/Felder_im_TCA_verbergen/anzeigen/umbenennen>

### [#3](https://www.typo3.net/d/110944-ausgeblendete-datensatz-felder-in-tce-main-speichern-hook/3) · Unbekannter Benutzer · 2012-06-13

> **aemka schrieb:**
>
> <http://wiki.lbrmedia.net/Typo3:CodeSnippets/Felder_im_TCA_verbergen/anzeigen/umbenennen>

Danke erst Mal für den Link.

```typoscript
TCEFORM.<table>.<field>.disabled = 1
```

Damit kann man ein Feld aus dem TCE Form entfernen. Aber ich hab dann genau das gleiche Problem wie oben beschrieben: es ist im Hook nicht mehr verfügbar. Im Array **$fieldArray** fehlt das ausgeblendete Feld und ich kann es nicht mehr bearbeiten.

Nochmal meine Frage:

Ich möchte ein bestimmtes Feld im Backend ausblenden, damit Redketuere dieses nicht bearbeiten können. Gleichzeitig muss es aber für TYPO3 (d.h. für den Speichern-Hook) verfügbar bleiben, damit der Wert des Feldes automatisch generiert und in die DB gespeichert werden kann.

Geht das überhaupt?
Wenn ja: welche Möglichkeiten gibt es?
Muss ich vielleicht einen anderen Hook benutzen?

### [#4](https://www.typo3.net/d/110944-ausgeblendete-datensatz-felder-in-tce-main-speichern-hook/4) · aemka · 2012-06-13

Zur Not nutze halt keinen der Parameter aus dem Hook und schreibe direkt mit exec_Insert... in die Datenbank.

### [#5](https://www.typo3.net/d/110944-ausgeblendete-datensatz-felder-in-tce-main-speichern-hook/5) · Unbekannter Benutzer · 2012-06-13

> **aemka schrieb:**
>
> Zur Not nutze halt keinen der Parameter aus dem Hook und schreibe direkt mit exec_Insert... in die Datenbank.

D.h. mein Vorhaben ist auf "normalem" Wege gar nicht möglich (normaler Weg = kein direkter DB Zugriff)?

### [#6](https://www.typo3.net/d/110944-ausgeblendete-datensatz-felder-in-tce-main-speichern-hook/6) · igorshmigor · 2012-06-13

Oder aber mit process_datamap:

```php
require_once(PATH_t3lib.'class.t3lib_tcemain.php');
$datamap=array(
   'tx_meineext_meinetabelle'=>array(
      $id => array(
         'hash' => '1234567890'
      )
   )
)
$tce=t3lib_div::makeInstance('t3lib_TCEmain');
$tce->start($datamap,null);
$tce->process_datamap();
```

Nicht getestet, müsste aber funktionieren.

### [#7](https://www.typo3.net/d/110944-ausgeblendete-datensatz-felder-in-tce-main-speichern-hook/7) · Unbekannter Benutzer · 2012-06-13

> **igorshmigor schrieb:**
>
> Oder aber mit process_datamap:
>
> ```php
> require_once(PATH_t3lib.'class.t3lib_tcemain.php');
> $datamap=array(
>    'tx_meineext_meinetabelle'=>array(
>       $id => array(
>          'hash' => '1234567890'
>       )
>    )
> )
> $tce=t3lib_div::makeInstance('t3lib_TCEmain');
> $tce->start($datamap,null);
> $tce->process_datamap();
> ```
>
> Nicht getestet, müsste aber funktionieren.

Danke, werde ich gleich mal testen.

Ich müsste aber wissen wo das reinkommt? :o

Gibt's dazu noch mehr Infos?

### [#8](https://www.typo3.net/d/110944-ausgeblendete-datensatz-felder-in-tce-main-speichern-hook/8) · Unbekannter Benutzer · 2012-06-13

Hab noch was dazu gefunden:

<http://blog.tolleiv.de/2010/03/handling-data-in-typo3-with-tcemain/>

Ich denke das kommt direkt in meinem **processDatamap_preProcessFieldArray** Hook. Sehe ich das richtig?

### [#9](https://www.typo3.net/d/110944-ausgeblendete-datensatz-felder-in-tce-main-speichern-hook/9) · igorshmigor · 2012-06-13

In deinen Hook, nach der if-Bedingung. Allerdings müsstest Du wahrscheinlich einen anderen Hook nutzen, um sicherzustellen, dass der Eintrag bereits erstell wurde, bevor Du versuchst den Hash-Wert zu ändern. Ich denke das hier müsste der richtige Hook für diesen Prozess sein: processDatamap_afterDatabaseOperations($hookObjectsArr, $status, $table, $id, $fieldArray)

Weiter Infos zu process_datamap im Buch "TYPO3-Extensions entwickeln" von Dmitry Dulepov auf Seite 45 oder in der Dokumentation TYPO3 Core API unter diesem Link: <https://docs.typo3.org/m/typo3/reference-coreapi/main/en-us/Index.html>

### [#10](https://www.typo3.net/d/110944-ausgeblendete-datensatz-felder-in-tce-main-speichern-hook/10) · Unbekannter Benutzer · 2012-06-13

Ok, vielen Dank! :)

Werde ich mir mal genau anschauen.

### [#11](https://www.typo3.net/d/110944-ausgeblendete-datensatz-felder-in-tce-main-speichern-hook/11) · Unbekannter Benutzer · 2012-06-13

Jetzt funktionierts! :)

Mein Hook sieht jetzt folgendermaßen aus:

```php
<?php

require_once (PATH_t3lib . 'class.t3lib_tcemain.php');

class tx_meineext_tcemainprocessdatamap
{
   public function processDatamap_afterDatabaseOperations(&$status, &$table, &$id, &$fieldArray, &$tceobj)
   {
      if($table == 'tx_meinext_meinetabelle')
      {
         if($status == 'new')
            $currentId = $tceobj->substNEWwithIDs[$id];
         else
            $currentId = $id;
            
         if($currentId>0)
         {
            $data = array(
               'tx_meinext_meinetabelle' => array(
                  $currentId => array(
                     'hash' => '123456789'
                  )
               )
            );
            $tce = t3lib_div::makeInstance('t3lib_TCEmain');
            $tce->stripslashes_values = 0;  
            $tce->start($data, null);  
            $tce->process_datamap();              
         }
      }
   }
}
?>
```

Hook-Klasse registrieren in ext_localconf.php

```php
$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processDatamapClass'][] = 'EXT:'.$_EXTKEY.'/class.tx_meineext_tcemainprocessdatamap.php:tx_meineext_tcemainprocessdatamap';
```

---

Quelle: „Ausgeblendete Datensatz-Felder in TCE MAIN Speichern-Hook“, typo3.net, https://www.typo3.net/d/110944-ausgeblendete-datensatz-felder-in-tce-main-speichern-hook
Beiträge von Mitgliedern des Forums. Bitte mit Link auf die Diskussion zitieren.
