Ergebnis 1 bis 10 von 10

Thema: Contao 3.0.5: DCA - Callbacks in eigenen Feldern

  1. #1
    Contao-Fan Avatar von Arno
    Registriert seit
    11.12.2009.
    Ort
    Potsdam-Babelsberg
    Beiträge
    290

    Standard Contao 3.0.5: DCA - Callbacks in eigenen Feldern

    Hey,

    wie man hier https://community.contao.org/de/show...l=1#post257290 lesen kann, stehe ich gerade vor dem Problem, dass in der Erweiterung taxonomy_content unter Contao 3 ein Save Callback nicht ausgeführt wird. Ich weiß, dass die Erweiterung für Contao 3 nicht freigegeben ist, aber: Es scheint mir ein generelles Problem zu sein. Ich habe zum Beispiel einfach mal in die DCA-Datei tl_page.php hart ein eigens Feld integriert und versucht dafür einen save_callback aufzurufen: tuts auch nicht! Es scheint mir als würden non-Core Callbacks einfach ignoriert? Hat sich da in Contao 3 irgendwas in der Deklaration geändert? Ich konnte auch nach langem Suchen hier im Forum nichts finden.

    Ich poste gerade mal den Code aus der DCA-Datei, vielleicht bin ich ja auch nur schrecklich blind:
    Code:
    <?php 
    
    /**
     * Contao Extension taxonomy_content
     *
     * This program is free software: you can redistribute it and/or
     * modify it under the terms of the GNU Lesser General Public
     * License as published by the Free Software Foundation, either
     * version 3 of the License, or (at your option) any later version.
     *
     * This program is distributed in the hope that it will be useful,
     * but WITHOUT ANY WARRANTY; without even the implied warranty of
     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
     * Lesser General Public License for more details.
     *
     * You should have received a copy of the GNU Lesser General Public
     * License along with this program. If not, please visit the Free
     * Software Foundation website at <http://www.gnu.org/licenses/>.
     *
     * @copyright  toxA IT-Dienstleistungen, 2011
     * @author     Thomas Urban <http://www.toxa.de>
     * @package    Backend
     * @license    LGPL
     */
    
    foreach ( $GLOBALS['TL_DCA']['tl_page']['palettes'] as $key => $palette )
    	if ( is_string( $palette ) )
    		$GLOBALS['TL_DCA']['tl_page']['palettes'][$key] = str_replace( '{protected_legend:hide}', '{taxonomy_legend:hide},taxonomy;{protected_legend:hide}', $palette );
    
    
    $GLOBALS['TL_DCA']['tl_page']['fields']['taxonomy'] = array
    (
    	'label'         => &$GLOBALS['TL_LANG']['tl_page']['taxonomy'],
    	'inputType'     => 'taxonomyTree',
    	'exclude'       => true,
    	'eval'          => array( 'fieldType' => 'checkbox' ),
    	'save_callback' => array(array('tl_taxonomy_content_page','save_taxonomies'))
    );
    
    
    class tl_taxonomy_content_page extends Backend
    {
    
    	/**
    	 * Initialize the object
    	 */
    	public function __construct()
    	{
    		parent::__construct();
    		$this->import('BackendUser', 'User');
    	}
    
    	/**
    	 * Instance of this extension's utility class
    	 * 
    	 * @var TaxonomyContent
    	 */
    
    	protected $Taxonomy;
    
    	public function save_taxonomies($varValue, DataContainer $dc)
    	{
    		echo 'Stop';
    		die;
    		$this->import( 'TaxonomyContent', 'Taxonomy' );
    
    		$this->Taxonomy->assignTaxonomies( TaxonomyContent::PAGES, $dc->id, @unserialize( $varValue ) );
    
    		return $varValue;
    	}
    }
    Ich habe da schon ein bisschen dran rum gebastelt: Variablen umbenannt $value -> $varValue und $dca -> DataContainer $dc, hat alles nichts getan. Eigentlich sollte er doch beim Speichern einfach "Stop" echoen und dann sterben. Tut er z.B. auch, wenn ich in den Save Callback der core tl_page in der generateAlias Funktion
    Code:
    echo 'Stop';
    die;
    einbaue.

    Dank!

  2. #2
    Contao-Fan Avatar von Bandyt
    Registriert seit
    22.04.2010.
    Ort
    Bremen
    Beiträge
    808

    Standard

    Mir scheint die Callback-Definition falsch zu sein:
    Code:
    'save_callback' => array(array('tl_taxonomy_content_page','save_taxonomies'))
    Das müsste eigentlich nur ein Array sein:
    Code:
    'save_callback' => array('tl_taxonomy_content_page','save_taxonomies')
    Meine Erweiterungen: League Manager | Forum

  3. #3
    Contao-Fan Avatar von Arno
    Registriert seit
    11.12.2009.
    Ort
    Potsdam-Babelsberg
    Beiträge
    290

    Standard

    Hallo Bandyt,

    Das müsste eigentlich nur ein Array sein
    Das wäre mir neu und sieht auch bei den Core-Definitionen und anderen Erweiterungen nicht so aus. Das ist immer ein verschachtelter Array, ich denke damit man auch mehrere Funktionen als Callback angeben kann. Ich habs aber trotzdem gerade mal ausprobiert und es macht auch keinen Unterschied.
    Ich habe das Gefühl ich seh den Wald vor lauter Bäumen nicht, aber wie gesagt: Unter 2.11.9 läufts ohne Probleme... irgendwo muss sich was geändert haben...

    EDIT: Ich habe die Anweisung gerade mal von "save_callback" auf "load_callback" umgestellt, einfach um zu sehen ob ich zu irgendeinem Zeitpunkt mal einen Callback ausgeführt bekomme. Und siehe da: das wird gemacht. Aaargh!

    EDIT: Mühsam geht es weiter: Es scheint was mit dem Feldtyp "taxonomyTree" zu tun zu haben. Wenn ich den inputType z.B. auf "text" ändere wird der Save Callback sofort ausgeführt. Es scheint seine Gründe zu haben, dass es die Taxonomy bisher nicht für Contao 3 gibt.
    Geändert von Arno (26.03.2013 um 10:08 Uhr)

  4. #4
    Contao-Nutzer
    Registriert seit
    09.01.2011.
    Beiträge
    14

    Standard

    Ich kann dieses Problem bestätigen! Allerdings beim FileTree.

    DC:

    Code:
            'addTeaserImage' => array
                (
                'label' => &$GLOBALS['TL_LANG']['tl_easyBlog']['addTeaserImage'],
                'exclude' => true,
                'inputType' => 'checkbox',
                'eval' => array('submitOnChange' => true),
                'sql' => "char(1) NOT NULL default ''"
            ),
            'singleSRC' => array
                (
                'label' => &$GLOBALS['TL_LANG']['tl_easyBlog']['singleSRC'],
                'exclude' => true,
                'save_callback' => array
                    (
                    array('EasyBlogDC', 'test')
                ),
                'inputType' => 'fileTree',
                'eval' => array('fieldType' => 'radio', 'filesOnly' => true, 'mandatory' => true),
                'sql' => "varchar(255) NOT NULL default ''"
            ),
    Paletten:

    Code:
        // Palettes
        'palettes' => array
            (
            '__selector__' => array('type', 'addTeaserImage'),
            'default' => '{type_legend},type;',
            'post' => '{type_legend},type;{title_legend},title,alias,author;{teaser_legend},teaser,addTeaserImage;', //{text_legend},text;{image_legend},addImage;{protected_legend:hide},protected;{expert_legend:hide},guests,cssID,space;{invisible_legend:hide},invisible,start,stop',
        ),
        // Subpalettes
        'subpalettes' => array
            (
            'addTeaserImage' => 'singleSRC'
        ),
    save_callback:

    Code:
            public function test($val = NULL){
                dump('test');
                return $val;
            }
    Der LoadCallback wird getriggert.

    Ich zieh jetzt mal schnell die ganzen Zähne aus der Schreibtischplatte und teste im Anschluss weiter!

  5. #5
    Contao-Fan Avatar von Arno
    Registriert seit
    11.12.2009.
    Ort
    Potsdam-Babelsberg
    Beiträge
    290

    Standard

    Moin Schmid,

    nach dem ich deinen Beitrag gelesen hatte, habe ich jetzt zum Test mal in der Core-DCA-Datei "tl_content.php" für die Definiton des Feldes "singleSRC" (ist Typ "fileTree") einen Save Callback hinzugefügt. Und siehe da: der wird ausgeführt!

    Allerdings hat das Hinzufügen dieses Callbacks zur Folge, dass die Dateiauswahl nicht gespeichert wird.
    In meiner Vorgehensweise: Ich lege in einem Artikel ein Inhaltselement "Bild" an, wähle per Dateiauswahl eine Bilddatei aus und speichere. Danach fehlt jedoch - bei eingefügtem Save Callback - die soeben ausgewählte Datei. Es wird aber keine fehlende Bildauswahl angemeckert. Ist ja ein Pflichtfeld. Ich vermute also mal, dass es eventuell irgendwas mit dem neuen Dateisystem zu tun haben könnte. Vielleicht wird beim Feldtyp "fileTree" ohnehin eine Art Save Callback ausgeführt? Vielleicht um den Eintrag in der tl_files Tabelle zu machen? Und wenn man da nun noch per DCA-Definiton einen zusätzlichen save_callback Parameter definiert kommt man sich da irgendwie mit dem System in die Quere.

    Das erklärt jetzt zwar immer noch nicht, warum dann in deiner Anweisung der Save Callback nicht ausgeführt wird (der einzige Unterschied zu meinem Test scheint mir zu sein, dass ich dirket in der Core-Datei geändert habe), könnte aber immerhin schon mal ein Hinweis sein... und von da ausgehend dann zu vermuten, dass davon auch der Feldtyp "taxonomyTree" betroffen sein könnte, der ja eventuell mit dem "fileTree" zumindest "verwandt" ist, scheint mir auch legitim.

  6. #6
    Contao-Nutzer
    Registriert seit
    09.01.2011.
    Beiträge
    14

    Standard

    Ich kann rückwirkend nicht sagen woran es gelegen hat, jedoch hab ich gestern Abend ein Update auf Contao 3.0.6 eingespielt.
    Was soll ich sagen, es funktioniert. Falls es wieder auftritt melde ich mich.

  7. #7
    Contao-Fan Avatar von Arno
    Registriert seit
    11.12.2009.
    Ort
    Potsdam-Babelsberg
    Beiträge
    290

    Standard

    Oh! Guter Hinweis. Das habe ich noch nicht gemacht, die Hoffnung hatte ich auch schon, schien mir aber sehr gering... ich werds mal probieren und dann eben auch hoffen, dass es sich auf den TaxonomyTree auswirkt...

    EDIT: Also ich habs jetzt mal durchgetestet und für die Taxonomy in Zusammenhang mit dem Catalog unter Contao 3 bringt das Update leider nichts.
    Geändert von Arno (27.03.2013 um 09:39 Uhr)

  8. #8
    Contao-Nutzer
    Registriert seit
    09.01.2011.
    Beiträge
    14

    Standard

    Ein Jammer!

  9. #9
    Contao-Fan
    Registriert seit
    10.01.2010.
    Ort
    Kiel
    Beiträge
    341

    Standard

    Hallo,

    gibt es hier vielleicht neue Erkenntnisse?

    Ich möchte tl_member um ein alias-Feld erweitern.
    Ich habe das gleiche Problem, dass save_callback nicht reagiert, load_callback aber schon.

    Ich benutze Contao 3.4.5


    PHP-Code:
    $GLOBALS['TL_DCA']['tl_member']['fields']['alias'] = array(
        
    'label'                   => &$GLOBALS['TL_LANG']['tl_member']['alias'],
        
    'exclude'                 => true,
        
    'inputType'               => 'text',
        
    'search'                  => true,
        
    'eval'                    => array('rgxp'=>'alias''doNotCopy'=>true'maxlength'=>128'tl_class'=>'w50''mandatory'=>true'unique'=>true'spaceToUnderscore'=>true),
        
    'save_callback' => array
        (
            array(
    'tl_member_extended''generateAlias')
        ),
        
    'sql'                     => "varchar(128) COLLATE utf8_bin NOT NULL default ''"
    );


    class 
    tl_member_extended extends Backend {

        
    /**
         * Import the back end user object
         */
        
    public function __construct()
        {
            
    parent::__construct();
            
    $this->import('BackendUser''User');
        }

        
    /**
         * Set alias
         */
        
    public function generateAlias($varValueDataContainer $dc)
        {
            if (
    $varValue == '') {
                
    $varValue standardize(String::restoreBasicEntities($dc->activeRecord->company));
            }
            return 
    $varValue;
        }

    Geändert von Tina (19.05.2015 um 16:50 Uhr)

  10. #10
    Contao-Nutzer
    Registriert seit
    03.09.2009.
    Ort
    Baunatal
    Beiträge
    122
    Partner-ID
    6087

    Standard

    Hast du das Feld über $GLOBALS['TL_DCA']['tl_member']['palettes'] eingebunden?
    Geändert von Wusch (22.05.2015 um 13:12 Uhr)

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
  •