Ergebnis 1 bis 4 von 4

Thema: Problem mit input_field_callback & save_callback

  1. #1
    Contao-Nutzer
    Registriert seit
    26.03.2014.
    Beiträge
    11

    Beitrag Problem mit input_field_callback & save_callback

    Hallo zusammen,

    ich arbeite mich gerade durch Contao 3.2.3, aktuell rund um das Thema 'DCA' und habe folgendes Problem, bei dem ich einfach nicht mehr weiterkomme:
    Bei Nutzen von input_field_callback wird die save_callback-Funktion nicht aufgerufen.
    Hierbei scheint es unerheblich, wo save_callback definiert wird, ob im DCA direkt oder in der aufgerufenen CreateField1-Funktion.

    Hintergrund ist der Versuch, ein readonly/disabled Feld anzulegen, dem ein berechneter Wert zugewiesen wird, der auch abgespeichert werden soll.


    Vielen Dank für eure Hilfe!


    PHP-Code:
    // DCA ...
    (    
       
    'label'                       => &$GLOBALS['TL_LANG']['tl_table1']['field1'],    
       
    'exclude'                   => true,    
       
    'inputType'                => 'text',    
       
    'eval'                        => array('alwaysSave'=>true),    
       
    'sql'                          => "int(10) unsigned NOT NULL default '0'",    
       
    'input_field_callback'    => array('tl_table1''createField1'),    
       
    'save_callback'           => array(array('tl_table1''saveField1')),
    );

    class 
    tl_table1 extends Backend
    {  
       
    // Callback invoked by input_field_callback    
       
    public function createField1($objDC$strLabel)   
       {        
          
    $arrData $GLOBALS['TL_DCA']['tl_table1']['fields'][$objDC->field];        
          
    $strClass $GLOBALS['BE_FFL'][$arrData['inputType']];    
          
    //    $arrData['eval']['disabled'] = true;    
          //    $arrData['eval']['mandatory'] = true;        
          
    $arrData['eval']['alwaysSave'] = true;    
          
    //    $arrData['eval']['required'] = true;                
          
    $arrData['save_callback'] = array(array('tl_table1''saveField1'));       

          
    // Create Widget            
          
    $objWidget = new $strClass(Widget::getAttributesFromDca($arrData$objDC->inputName0$objDC->field$objDC->table)); 
           
          return 
    '<div' . ($arrData['eval']['tl_class'] ? ' class="' $arrData['eval']['tl_class'] . '"' '') . '>' $objWidget->parse() . (($GLOBALS['TL_CONFIG']['oldBeTheme'] || !$objWidget->hasErrors()) ? "Bla ..." '') . '</div>';    
       }

      
    // Callback invoked by save_callback    
       
    public function saveField1($varValue$objDC)    
       {          
          
    $intCalcValue 100;        
          
    $this->Input->setPost('field1'$intCalcValue);

          return 
    $intCalcValue;  
       }  

    Geändert von cms_user (26.03.2014 um 22:50 Uhr)

  2. #2
    Contao-Fan Avatar von bcit6k
    Registriert seit
    01.02.2010.
    Ort
    Bürmoos
    Beiträge
    296

    Standard

    Hallo,

    ich habe das selbe Problem, konntest du bereits eine Lösung finden?

  3. #3
    Contao-Nutzer Avatar von chatjack
    Registriert seit
    02.09.2012.
    Ort
    Essen
    Beiträge
    160

    Standard

    Hat jemand zu dem Problem inzwischen eine Lösung gefunden? Ansonsten schließe ich mich an.

  4. #4
    Contao-Nutzer Avatar von chatjack
    Registriert seit
    02.09.2012.
    Ort
    Essen
    Beiträge
    160

    Standard

    Ich habe es jetzt gelöst, indem ich es auf zwei Felder aufgeteilt habe.

    PHP-Code:
            'rohbogen_veredelung' => array(
                
    'sql'        => "text NULL",
                
    'label'        => &$GLOBALS['TL_LANG']['tl_klebebindungen_rohbogen']['rohbogen_veredelung'],
                
    'inputType'    =>    'text',
                
    'save_callback' => array(array('tl_klebebindungen_rohbogen','save_callback_rohbogen_veredelung')),
                
    'eval'    => array('tl_class'=>'hidden')
            ),
            
    'rohbogen_veredelung_preise' => array(
                
    'label'        => &$GLOBALS['TL_LANG']['tl_klebebindungen_rohbogen']['rohbogen_veredelung'],
                
    'inputType'    =>    'text',
                
    'exclude'    => true,
                
    'input_field_callback'    => array('tl_klebebindungen_rohbogen','input_field_callback_rohbogen_veredelung')
            ) 
    'rohbogen_veredelung' existiert als Feld in der Datenbank und holt sich die Daten über das 'save_callback' aus den Feldern, die über 'rohbogen_veredelung_preise' generiert wurden. Die einzige Möglichkeit die ich gefunden habe, das Feld auszublenden ohne dass 'save_callback' ignoriert wird, war indem ich es einfach per CSS ausgeblendet habe. Es steht jetzt zwar noch versteckt im Quelltext, holt sich die Daten aber so oder so aus dem Callback. Nicht schön, aber klappt.

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •