Zum Inhalt springen

Ausgeblendete Datensatz-Felder in TCE MAIN Speichern-Hook

Erstellt am 12. Juni 2012 · 10 Antworten · letzte Antwort am 13. Juni 2012

Tags: TCA, Frage

Unbekannter Benutzer ·

Danke erst Mal für den Link.

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?

aemka ·

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

Unbekannter Benutzer ·
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)?

igorshmigor ·

Oder aber mit process_datamap:

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.

Unbekannter Benutzer ·
igorshmigor schrieb

Oder aber mit process_datamap:

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?

igorshmigor ·

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

Unbekannter Benutzer ·

Jetzt funktionierts! 🙂

Mein Hook sieht jetzt folgendermaßen aus:

<?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

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