Ausgeblendete Datensatz-Felder in TCE MAIN Speichern-Hook
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?
Zur Not nutze halt keinen der Parameter aus dem Hook und schreibe direkt mit exec_Insert... in die Datenbank.
aemka schriebZur 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)?
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.
igorshmigor schriebOder 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?
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?
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
Ok, vielen Dank! 🙂
Werde ich mir mal genau anschauen.
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';