Ergebnis 1 bis 7 von 7

Thema: options_callback + load_callback

  1. #1
    Alter Contao-Hase
    Registriert seit
    18.07.2012.
    Ort
    Löbau
    Beiträge
    1.140

    Standard options_callback + load_callback

    Hey,

    lassen die beiden sich kompinieren?

    Ich erstelle mit den options_callback eine Select-Auswahl
    PHP-Code:
        /* create version options */
        
    public function create_versions_options(DataContainer $dc) {
            
    $values = array();
            
    $objPages $this->Database->prepare("SELECT s.title, sv.id, sv.version FROM tl_sp_software s INNER JOIN tl_sp_software_versions sv ON s.id = sv.pid
            ORDER BY s.title ASC, INET_ATON(SUBSTRING_INDEX(CONCAT(sv.version,'.0.0.0'),'.',4)) DESC"
    )->execute();
                
            while(
    $objPages->next()){
                
    $values[$objPages->title][$objPages->title.'_'.$objPages->version] = $objPages->version;
            }
            return 
    $values;
        } 
    Jetzt steht aber diese Wert "$objPages->title.'_'.$objPages->version" nicht so in der DB sondern getrennt.

    Jetzt dachte ich ich kann per load_callback mir das Value so zusammenbauen das er im Select automatisch das richtige selektiert?
    PHP-Code:
        /* load version options */
        
    public function load_versions_from_options($varValueDataContainer $dc) {
        
            
    $objPages $this->Database->prepare("SELECT s.title, sv.id, sv.version FROM tl_sp_software s INNER JOIN tl_sp_software_versions sv ON s.id = sv.pid
            WHERE sv.version = ?"
    )->limit(1)->execute($varValue);
            if(
    $objPages) {
                
    $varValue $objPages->title.'_'.$objPages->version;
            }    
            
            return 
    $varValue;
        } 
    Leider funktioniert das nicht. Hab ich jetzt ein Denkfehler, liegt es an der Reihenfolge der Callbacks oder ist es normal das es nicht funktioniert? Dann bauch ich das einfach so um das er es immer zusammen speichert und zerlege das im FE-Modul. Ginge ja auch.

    PHP-Code:
            'version_from' => array
            (
                
    'label'                   => &$GLOBALS['TL_LANG']['tl_sp_projects_update_log']['version_from'],
                
    'exclude'                 => true,
                
    'inputType'                  => 'select',
                
    'eval'                      => array('mandatory'=>false'includeBlankOption' => true'maxlength'=>10'tl_class'=>'w50'),
                
    'sql'                      => "varchar(10) NOT NULL default ''",
                
    'options_callback'          => array('tl_sp_projects_update_log','create_versions_options'),
                
    'load_callback'           => array(array('tl_sp_projects_update_log','load_versions_from_options')),
            ), 
    Liebe Grüße
    WebRoxx


  2. #2
    Contao-Urgestein Avatar von fiedsch
    Registriert seit
    09.07.2009.
    Ort
    München
    Beiträge
    2.943

    Standard

    Irgendwie schaut Dein Code komisch aus: Wieso ist

    PHP-Code:
     $values[$objPages->title][$objPages->title.'_'.$objPages->version] = $objPages->version
    ein zweidimensionaler Array und nicht so:

    PHP-Code:
     $values[$objPages->id] = $objPages->title.'_'.$objPages->version
    also Zuodnung von Label zu ID?

    Warum Du meinst, den Load Callback haben zu müssen verstehe ich nicht.

    Dann brauchst Du wahrscheinlich noch

    Code:
    'foreignKey'       => 'tl_sp_software_versions.id',
    Contao-Community-Treff Bayern: http://www.contao-bayern.de

  3. #3
    Alter Contao-Hase
    Registriert seit
    18.07.2012.
    Ort
    Löbau
    Beiträge
    1.140

    Standard

    Zitat Zitat von fiedsch Beitrag anzeigen
    Irgendwie schaut Dein Code komisch aus: Wieso ist

    PHP-Code:
     $values[$objPages->title][$objPages->title.'_'.$objPages->version] = $objPages->version
    ein zweidimensionaler Array und nicht so:

    PHP-Code:
     $values[$objPages->id] = $objPages->title.'_'.$objPages->version
    Weil ich mit dem Titel die Gruppen erstelle...


    Zitat Zitat von fiedsch Beitrag anzeigen
    Irgendwie schaut Dein Code komisch aus: Wieso ist

    also Zuodnung von Label zu ID?

    Warum Du meinst, den Load Callback haben zu müssen verstehe ich nicht.

    Dann brauchst Du wahrscheinlich noch

    Code:
    'foreignKey'       => 'tl_sp_software_versions.id',
    brauch ich nicht das ich nicht die ID speichere sondern

    Den Tiitel in eine Spalte und die Version. Weil das für mich Logs sind und wenn ich die Versionen die nicht mehr verwendet werden lösche aber in den Logs bleiben sollen
    Liebe Grüße
    WebRoxx


  4. #4
    Contao-Fan Avatar von PaddySD
    Registriert seit
    26.10.2016.
    Ort
    Andechs
    Beiträge
    656

    Standard

    Warum machst Du das nicht gleich im options_callback? Oder verstehe ich Dich nicht richtig?

    Du willst doch nur die Auswahl im select schon "vorbelegen", oder? Dann gib doch dem Element ein "selected" mit...

  5. #5
    Alter Contao-Hase
    Registriert seit
    18.07.2012.
    Ort
    Löbau
    Beiträge
    1.140

    Standard

    Ja aber es muss der selektiert werden der quasi in dem db Eintrag steht. (Edit ansich)

    Soweit ich weiß kommt man doch an das value aus dem eintrag nicht im option callback ran...deswegen der load :/
    Liebe Grüße
    WebRoxx


  6. #6
    Contao-Fan Avatar von PaddySD
    Registriert seit
    26.10.2016.
    Ort
    Andechs
    Beiträge
    656

    Standard

    Der wäre mir jetzt fast entfallen, der Thread.

    Ich hab leider immer noch nicht richtig verstanden, was Du genau brauchst, aber ich erkläre es mal allgemein, vielleicht hilft Dir das.

    Wenn Du Werte über zwei Spalten in einer Tabelle speichern willst, und diese nach bestimmten Wünschen zusammen setzen willst, dann würde ich das so machen:

    Eines der beiden Felder blende ich aus, nehme es also aus der Palette raus. Dann brauchst Du auf dem anderen Feld insgesamt drei Callbacks:
    • options_callback: Hier baust Du Dir Dein select zusammen, z.B. mit "_" oder ".".
    • load_callback: Hier baust Du Deinen value zusammen. Z.B. hast Du einen Eintrag 17_24, dann wäre das in etwa
      PHP-Code:
      return $dc->activeRecord->spalte1 '_' $dc->activeRecord->spalte2
      Hier bestimmst Du, welcher Wert selektiert wird. Das was Du hier als return übergibst, wird selektiert (sofern vorhanden).
    • save_callback: Hier zerlegst Du Dir den Wert wieder (17_24), und speicherst den Wert des ausgeblendeten Feldes selbst.

    Wenn ich jetzt nichts vergessen habe, dann sollte das so klappen.

  7. #7
    Alter Contao-Hase
    Registriert seit
    18.07.2012.
    Ort
    Löbau
    Beiträge
    1.140

    Standard

    Hey,

    so hab ich das uns es funktioniert

    PHP-Code:
            'version_from' => array
            (
                
    'label'                   => &$GLOBALS['TL_LANG']['tl_sp_projects_update_log']['version_from'],
                
    'exclude'                 => true,
                
    'inputType'                  => 'select',
                
    'eval'                      => array('mandatory'=>false'includeBlankOption' => true,'tl_class'=>'w50','doNotSaveEmpty' => true),
                
    'sql'                      => "varchar(10) NOT NULL default ''",
                
    'options_callback'          => array('tl_sp_projects_update_log','create_versions_options'),
                
    'load_callback'           => array(array('tl_sp_projects_update_log','load_versions_from_options')),
                
    'save_callback'           => array(array('tl_sp_projects_update_log','save_version_from'))
            ), 

    PHP-Code:
        /* create version options */
        
    public function create_versions_options(DataContainer $dc) {
            
    $values = array();
            
    $objPages Database::getInstance()->prepare("SELECT s.title, sv.id, sv.version FROM tl_sp_software s INNER JOIN tl_sp_software_versions sv ON s.id = sv.pid
            ORDER BY s.title ASC, INET_ATON(SUBSTRING_INDEX(CONCAT(sv.version,'.0.0.0'),'.',4)) DESC"
    )->execute();
            if(
    $objPages !== null) {
                while(
    $objPages->next()){
                    
    $values[$objPages->title][$objPages->title.'_'.$objPages->version] = $objPages->version;
                }
            }
            return 
    $values;
        } 

    PHP-Code:
        /* load version options */
        
    public function load_versions_from_options($varValueDataContainer $dc) {
        
            
    $objPages Database::getInstance()->prepare("SELECT s.title, sv.id, sv.version FROM tl_sp_software s INNER JOIN tl_sp_software_versions sv ON s.id = sv.pid
            WHERE sv.version = ?"
    )->limit(1)->execute($varValue);
            if(
    $objPages) {
                
    $varValue $objPages->title.'_'.$objPages->version;
            }    
            return 
    $varValue;
        } 
    PHP-Code:
        public function save_version_from($varValueDataContainer $dc) {
            
            
    $version explode('_'$varValue);
            
            
    $objVersion Database::getInstance()->prepare("SELECT * FROM tl_sp_projects_update_log    WHERE id = ?")->limit(1)->execute($dc->id);
            if(
    $objVersion->numRows) {
                if(
    $version[1] != $objVersion->version_from) {
                    
    $objUpdate Database::getInstance()->prepare("UPDATE tl_sp_projects_update_log SET software_from=?,version_from=? WHERE id=?")->execute($version[0], $version[1], $dc->id); 
                }
            }
            return 
    '';
        } 
    In der DB schreibt er mir dann eben in die Spalten was er soll.. alles super
    Liebe Grüße
    WebRoxx


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
  •