DCA tl_member Manipulation
Hallo, brauche eure Hilfe.
Habe die tl_member über »contao/dca/tl_member.php« mit einem Text Feld erweitert ala:
PHP-Code:
<?php
// contao/dca/tl_member.php
use Contao\CoreBundle\DataContainer\PaletteManipulator;
$GLOBALS['TL_DCA']['tl_member']['fields']['myCustomGeoData'] = [
'label' => ['demo title', 'demo description'],
'inputType' => 'text',
'eval' => ['tl_class' => 'w50'],
'sql' => ['type' => 'string', 'length' => 255, 'default' => ''],
/*
// working
'save_callback' => [
function($varValue, DataContainer $dc) {
$varValue = StringUtil::decodeEntities('Mein Demo Wert A');
return $varValue;
}
],
*/
// not working
'save_callback' => array(array('myDemoClass', 'getDemo')),
),
];
PaletteManipulator::create()
->addLegend('Einstellungen Geo-Koordinaten', 'address_legend', PaletteManipulator::POSITION_AFTER)
->addField('myCustomGeoData', 'Einstellungen Geo-Koordinaten', PaletteManipulator::POSITION_APPEND)
->applyToPalette('default', 'tl_member')
;
class myDemoClass extends backend
{
public function getDemo($varValue, DataContainer $dc) {
// ... do some work
$varValue = StringUtil::decodeEntities('Mein Demo Wert B');
return $varValue;
}
}
Eine manuelle Eingabe ist OK. Versuche mich jetzt mit den Callbacks.
Beim obigen Beispiel anhand von »save_callback« funktioniert es mit dem anonymen Funktionsaufruf.
Scheitere aber dann schon über Aufruf mit externer Klasse/Methode (s.o.). Im Backend erhalte ich dann sowas wie:
System::import() failed because class "myDemoClass" is not a valid class name or does not exist.
Eigentlich möchte ich erreichen das das Feld manuell gefüllt werden kann und daneben eine Schaltfläche/Icon existiert welches optional das Feld mit Resultaten der getDemo() Methode befüllt.
Benötige hierzu ein Sample, da ich schon an obigen scheitere (Erst recht mit Versuchen ala »xlabel», »wizard« oder »input_field_callback» usw.).
Für Hilfe dankbar ...
Registrierung callback via Service Annotation
Hallo,
nochmal eine Frage zur callback Registrierung via Service Annotation
Versuch anhand der Doku zu meinem obigen »contao/dca/tl_member.php« sample funktioniert nicht:
PHP-Code:
namespace App\EventListener\DataContainer;
use Contao\CoreBundle\DataContainer\PaletteManipulator;
use Contao\StringUtil;
use Contao\CoreBundle\ServiceAnnotation\Callback;
use Contao\DataContainer;
class myDemoClass
{
/**
* @Callback(table="tl_member", target="config.save")
*/
public function myDemoMethod($value, DataContainer $dc)
{
$value = StringUtil::decodeEntities('My demo return value');
return $value;
}
}
Im Forum sowas gefunden wie:
PHP-Code:
namespace App\EventListener\DataContainer;
use Contao\CoreBundle\DataContainer\PaletteManipulator;
use Contao\StringUtil;
use Contao\CoreBundle\ServiceAnnotation\Callback;
use Contao\DataContainer;
use Terminal42\ServiceAnnotationBundle\ServiceAnnotationInterface;
//working
class myDemoClass implements ServiceAnnotationInterface
{
/**
* @Callback(table="tl_member", target="config.save")
*/
public function myDemoMethod($value, DataContainer $dc)
{
$value = StringUtil::decodeEntities('My demo return value');
return $value;
}
}
Das funktioniert dann. Ist das so korrekt bzw. wann greift das Sample aus der Doku?