Contao-Camp 2024
Ergebnis 1 bis 22 von 22

Thema: Default-Wert wird nicht berücksichtigt

  1. #1
    Contao-Urgestein
    Registriert seit
    07.04.2010.
    Ort
    Stuttgart
    Beiträge
    2.733
    User beschenken
    Wunschliste

    Standard Default-Wert wird nicht berücksichtigt

    Guten Morgen,

    ich habe ein kleines Problem mit einem Default-Wert im DCA.
    Irgendwie wird mein Default-Wert nicht berücksichtigt.

    PHP-Code:
    foreach($GLOBALS['TL_DCA']['tl_page']['palettes'] as $k=>$v) {
        
    $GLOBALS['TL_DCA']['tl_page']['palettes'][$k] = str_replace('{meta_legend},','{meta_legend},pagetags,'$v);
    }

    $GLOBALS['TL_DCA']['tl_page']['fields']['pagetags'] = array
    (
        
    'label'                   => array('Tags der Seite''Bitte geben Sie die Tags der Seite an.'),
        
    'exclude'                 => true,
        
    'inputType'               => 'checkbox',
        
    'eval'                    => array('multiple' => true),
        
    'default'                 => array(2,4),
        
    'options'                 => array(1,2,3,4)
    ); 
    Eigentlich müssten doch die Werte 2 und 4 ausgewählt sein, oder?
    Ich habe es auch schon mit einem INT als default versucht, auch das klappt nicht.

    Was mache ich falsch?

    Wenn ich euch helfen konnte könnt ihr euch gerne mal
    meine Amazon Wunschliste anschauen. Dankeschön.

  2. #2
    Alter Contao-Hase
    Registriert seit
    02.10.2010.
    Ort
    58636 Iserlohn
    Beiträge
    1.084
    Meine Extensions: contentmodify, dca_editor

  3. #3
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.897
    Partner-ID
    10107

    Standard

    Zitat Zitat von psren Beitrag anzeigen
    Guten Morgen,

    ich habe ein kleines Problem mit einem Default-Wert im DCA.
    Irgendwie wird mein Default-Wert nicht berücksichtigt.

    PHP-Code:
    foreach($GLOBALS['TL_DCA']['tl_page']['palettes'] as $k=>$v) {
        
    $GLOBALS['TL_DCA']['tl_page']['palettes'][$k] = str_replace('{meta_legend},','{meta_legend},pagetags,'$v);
    }

    $GLOBALS['TL_DCA']['tl_page']['fields']['pagetags'] = array
    (
        
    'label'                   => array('Tags der Seite''Bitte geben Sie die Tags der Seite an.'),
        
    'exclude'                 => true,
        
    'inputType'               => 'checkbox',
        
    'eval'                    => array('multiple' => true),
        
    'default'                 => array(2,4),
        
    'options'                 => array(1,2,3,4)
    ); 
    Eigentlich müssten doch die Werte 2 und 4 ausgewählt sein, oder?
    Ich habe es auch schon mit einem INT als default versucht, auch das klappt nicht.

    Was mache ich falsch?
    Bei bereits bestehenden Datenbankeinträgen hat das keine Auswirkung, darum geht es in dem Thread den Thoni geposted hat. Für neue Einträge sollte es funktioniren. Alternativ zum Lösungsvorschlag in diesem Thread könntest du dir deiner Extension auch eine runonce.php geben, die das entsprechende Text Feld mit "a:2:{i:0;i:2;i:1;i:4;}" füllt. So etwas wäre auch denkbar:
    PHP-Code:
    'sql' => text DEFAULT "a:2:{i:0;i:2;i:1;i:4;}" 
    funktioniert aber bei Feldern vom Typ "TEXT" anscheinend nicht (http://bugs.mysql.com/bug.php?id=21532).

  4. #4
    Contao-Urgestein
    Registriert seit
    07.04.2010.
    Ort
    Stuttgart
    Beiträge
    2.733
    User beschenken
    Wunschliste

    Standard

    Okay, danke für die Antworten schonmal.
    Nun habe ich aber leider kein Textfeld.

    Hier mal den ungekürzten Teil:
    PHP-Code:
    <?php

    foreach($GLOBALS['TL_DCA']['tl_page']['palettes'] as $k=>$v) {
        
    $GLOBALS['TL_DCA']['tl_page']['palettes'][$k] = str_replace('{meta_legend},','{meta_legend},pagetags,'$v);
    }

    $GLOBALS['TL_DCA']['tl_page']['fields']['pagetags'] = array
    (
        
    'label'                   => array('Tags der Seite''Bitte geben Sie die Tags der Seite an.'),
        
    'exclude'                 => true,
        
    'inputType'               => 'checkbox',
        
    'eval'                    => array('multiple' => true),
        
    'default'                 => array(1,14,15),
        
    'save_callback'           => array('tl_page_tags''saveTags'),
        
    'options_callback'        => array('tl_page_tags''loadTags'),
        
    'sql'                     => 'text NULL'
    );

    class 
    tl_page_tags extends Backend
    {

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

        
    /**
         * Load Tags
         *
         * @param mixed
         * @param \DataContainer
         * @return mixed
         */
        
    public function loadTags($varValue)
        {
            
    $items $this->Database->prepare("SELECT id, name FROM mm_tags as tags;")->execute();

            
    /**
             * Join the IDs of the selected tags as ID into the array
             */
            
    $options = array();

            foreach(
    $items->fetchAllAssoc() as $k=>$v) {
                
    $options[$v['id']] = $v['name'];
            }

            return 
    $options;
        }

        
    /**
         * Save Tags
         *
         * @param mixed
         * @param \DataContainer
         * @return mixed
         */
        
    public function saveTags($varValue$dca)
        {
            
    $tags unserialize($varValue);
            
    $pageId $dca->activeRecord->id;

            if(! 
    $tags) {
                
    $this->clearTagsForPage($pageId);
                
    // There are no tags specified
                
    return;
            }

            
    $this->clearTagsForPage($pageId);
            foreach(
    $tags as $tag) {
                
    $this->Database->prepare("INSERT INTO tl_page_to_tags (page,tag) VALUES (?, ?)")
                    ->
    execute($pageId$tag);
            }
        }

        private function 
    clearTagsForPage($page) {
            
    $this->Database->prepare("DELETE FROM tl_page_to_tags WHERE page = ?")->execute($page);
        }

    }
    Was muss ich jetzt mit den Default-Werten anstellen? Die Daten die kommen aus dem Options-Callback.
    Per n:m Beziehung werden die Tags aus einer zwischenTabelle gezogen.

    Wenn ich euch helfen konnte könnt ihr euch gerne mal
    meine Amazon Wunschliste anschauen. Dankeschön.

  5. #5
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.897
    Partner-ID
    10107

    Standard

    Zitat Zitat von psren Beitrag anzeigen
    Nun habe ich aber leider kein Textfeld.
    Doch, hast du:
    Zitat Zitat von psren Beitrag anzeigen
    PHP-Code:
    $GLOBALS['TL_DCA']['tl_page']['fields']['pagetags'] = array
    (
        ...
        
    'sql'                     => 'text NULL'
    ); 
    // achso, du meinstest wegen der m:n Beziehung
    Geändert von Spooky (25.11.2014 um 11:20 Uhr)

  6. #6
    Contao-Urgestein
    Registriert seit
    07.04.2010.
    Ort
    Stuttgart
    Beiträge
    2.733
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    // achso, du meinstest wegen der m:n Beziehung
    Stimmt. Das Feld wird nicht benutzt, weil ich ja die Callbacks nutze.
    Ich habe nur vergessen das sql-Dingens zu entfernen, sorry.

    Wenn ich euch helfen konnte könnt ihr euch gerne mal
    meine Amazon Wunschliste anschauen. Dankeschön.

  7. #7
    Contao-Urgestein
    Registriert seit
    07.04.2010.
    Ort
    Stuttgart
    Beiträge
    2.733
    User beschenken
    Wunschliste

    Standard

    Hast du noch eine Idee?

    Wenn ich euch helfen konnte könnt ihr euch gerne mal
    meine Amazon Wunschliste anschauen. Dankeschön.

  8. #8
    Contao-Urgestein
    Registriert seit
    07.04.2010.
    Ort
    Stuttgart
    Beiträge
    2.733
    User beschenken
    Wunschliste

    Standard

    Ich verstehe es echt nicht. Wieso klappt das mit den Default-Werten nicht mal wenn ich die IDs fest hier eintrage.
    Mein Plan war das ganze über den onload_callback zu befüllen.
    Aber wenn das nicht mal fix richtig klappt...

    tl_content.php
    PHP-Code:
    $GLOBALS['TL_DCA']['tl_content']['config']['onload_callback'][] = array('MyTags''setDefaultValues');
    $GLOBALS['TL_DCA']['tl_content']['fields']['mytags'] = array(
        
    'label'                   => array('Tags anzeigen''Bitte geben Sie die Tags an die angezeigt werden sollen.'),
        
    'exclude'                 => true,
        
    'inputType'               => 'checkbox',
        
    // 'default'               => array(1,2,3) // Hat nicht geklappt
        
    'eval'                    => array('multiple' => true'doNotSaveEmpty' => true),
        
    'save_callback'           => array(array('MyTags''saveTags')),
        
    'options_callback'        => array('MyTags''loadTags'),
    ); 
    MyTags-Klasse
    PHP-Code:
    /**
         * Load Tags
         *
         * @param mixed
         * @param \DataContainer
         * @return mixed
         */
        
    public function loadTags($varValue)
        {
            
    $items $this->Database->prepare("SELECT id, name FROM mm_tags as tags;")->execute();

            
    /**
             * Join the IDs of the selected tags as ID into the array
             */
            
    $options = array();

            foreach(
    $items->fetchAllAssoc() as $k=>$v) {
                
    $options[$v['id']] = $v['name'];
            }

            return 
    $options;
        }

        
    /**
         * Save Tags
         *
         * @param mixed
         * @param \DataContainer
         * @return mixed
         */
        
    public function saveTags($varValue$dca)
        {
            
    $tags unserialize($varValue);
            
    $pageId $dca->activeRecord->id;

            if(! 
    $tags) {
                
    $this->clearTagsForPage($pageId);
                
    // There are no tags specified
                
    return null;
            }

            
    $this->clearTagsForPage($pageId);
            foreach(
    $tags as $tag) {
                
    $this->Database->prepare("INSERT INTO tl_content_to_tags (content,tag) VALUES (?, ?)")
                    ->
    execute($pageId$tag);
            }

            return 
    null;
        }

        public function 
    setDefaultValues()
        {
            
    $result $this->Database->prepare("SELECT id,tag FROM tl_content_to_tags WHERE content = ?")
                ->
    execute(\Input::get('id'));

            
    $tags = array();
            foreach(
    $result->fetchAllAssoc() as $item) {
                
    $tags[] = (int) $item['tag'];
            }

            
    $GLOBALS['TL_DCA']['tl_content']['fields']['avancetags']['default'] = $tags;
        }

        private function 
    clearTagsForPage($pageId) {
            
    $this->Database->prepare("DELETE FROM tl_content_to_tags WHERE content = ?")->execute($pageId);
        } 
    Hat jemand eine Idee wo der Fehler sich verstecken könnte. Bin echt am Verzweifeln...

    Wenn ich euch helfen konnte könnt ihr euch gerne mal
    meine Amazon Wunschliste anschauen. Dankeschön.

  9. #9
    Contao-Urgestein
    Registriert seit
    07.04.2010.
    Ort
    Stuttgart
    Beiträge
    2.733
    User beschenken
    Wunschliste

    Standard

    Was muss ich denn bei den Default-Werten eintragen?
    Die Value der Option, oder die Nummer?

    Wenn ich euch helfen konnte könnt ihr euch gerne mal
    meine Amazon Wunschliste anschauen. Dankeschön.

  10. #10
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.897
    Partner-ID
    10107

    Standard

    Wenn du folgende Options hast:
    PHP-Code:
    'options' => array(
        
    'lorem' => 'Lorem',
        
    'ipsum' => 'Ipsum',
        
    'dolor' => 'Dolor'

    Dann könnten die defaults zB so sein:
    PHP-Code:
    'defaults' => array('lorem','ipsum'
    Also immer der Key (bei 'inputType' => 'checkbox').

    Aber wie gesagt, die defaults greifen ja nur bei neuen Datenbankeinträgen, nicht bei existierenden, falls das wichtig ist.
    Geändert von Spooky (03.12.2014 um 13:17 Uhr)

  11. #11
    Contao-Urgestein
    Registriert seit
    07.04.2010.
    Ort
    Stuttgart
    Beiträge
    2.733
    User beschenken
    Wunschliste

    Standard

    Naja, die Default Werte sollen bei vorhandenen nicht angezeigt werden.
    Aber wenn ich einen Eintrag speichere, dann sollten Sie doch funktionieren, oder?
    Tun sie bei mir aber irgendwie nicht...

    Wenn ich euch helfen konnte könnt ihr euch gerne mal
    meine Amazon Wunschliste anschauen. Dankeschön.

  12. #12
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.897
    Partner-ID
    10107

    Standard

    Zitat Zitat von psren Beitrag anzeigen
    Naja, die Default Werte sollen bei vorhandenen nicht angezeigt werden.
    Aber wenn ich einen Eintrag speichere, dann sollten Sie doch funktionieren, oder?
    Tun sie bei mir aber irgendwie nicht...
    Nein, die 'defaults' des DCA funktionieren nur, wenn du einen neuen Datensatz anlegst.

  13. #13
    Contao-Urgestein
    Registriert seit
    07.04.2010.
    Ort
    Stuttgart
    Beiträge
    2.733
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Nein, die 'defaults' des DCA funktionieren nur, wenn du einen neuen Datensatz anlegst.
    Ich stehe glaube ich ziemlich auf der langen Leitung, sorry dafür.

    Also dann lege ich jetzt ein neues Contentelement an.
    Wähle da im Checkboxmenu meine Optionen aus.
    Klicke dann auf speichern und diese sollten dann befüllt bleiben.

    => Das klappt bei mir nicht, ich glaube es ist einfach zu spät.

    Habe ich es wenigstens vom Prinzip her jetzt endlich richtig verstanden?

    Wenn ich euch helfen konnte könnt ihr euch gerne mal
    meine Amazon Wunschliste anschauen. Dankeschön.

  14. #14
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.897
    Partner-ID
    10107

    Standard

    Zitat Zitat von psren Beitrag anzeigen
    Ich stehe glaube ich ziemlich auf der langen Leitung, sorry dafür.

    Also dann lege ich jetzt ein neues Contentelement an.
    Wähle da im Checkboxmenu meine Optionen aus.
    Klicke dann auf speichern und diese sollten dann befüllt bleiben.

    => Das klappt bei mir nicht, ich glaube es ist einfach zu spät.

    Habe ich es wenigstens vom Prinzip her jetzt endlich richtig verstanden?
    Öh, nein die Defaults sind das, was bei den Checkboxen vorausgewählt ist, wenn du, in deinem Fall, ein Content Element neu anlegst . Oder was genau ist jetzt die Frage? Ich glaube ich verliere jetzt auch den Faden

  15. #15
    Contao-Urgestein
    Registriert seit
    07.04.2010.
    Ort
    Stuttgart
    Beiträge
    2.733
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Ich glaube ich verliere jetzt auch den Faden
    Tut mir echt leid :-)

    Ich habe ein neues Element.
    Wähle ein paar Checkboxen aus.
    Speichere dann.

    => das eben ausgewählte ist in den Checkboxen nicht mehr ausgewählt.

    Ich dachte mir ich muss hier die default-Werte vielleicht manuell neu setzen, weil ich ja die n:m beziehung übder den options/save-callback habe.

    Wenn ich euch helfen konnte könnt ihr euch gerne mal
    meine Amazon Wunschliste anschauen. Dankeschön.

  16. #16
    Contao-Urgestein
    Registriert seit
    07.04.2010.
    Ort
    Stuttgart
    Beiträge
    2.733
    User beschenken
    Wunschliste

    Standard

    Ich habe es immer noch nicht hinbekommen :-( noch jemand eine Idee? Ich glaube das ist ein ganz trivialer Fehler den ich hier mache, aber ich komme einfach nicht drauf...

    Wenn ich euch helfen konnte könnt ihr euch gerne mal
    meine Amazon Wunschliste anschauen. Dankeschön.

  17. #17
    Alter Contao-Hase
    Registriert seit
    02.10.2010.
    Ort
    58636 Iserlohn
    Beiträge
    1.084

    Standard

    Bei mir funktioniert es so:

    PHP-Code:
    foreach($GLOBALS['TL_DCA']['tl_page']['palettes'] as $k=>$v) {
        
    $GLOBALS['TL_DCA']['tl_page']['palettes'][$k] = str_replace('{meta_legend},','{meta_legend},pagetags,'$v);
    }

    $GLOBALS['TL_DCA']['tl_page']['fields']['pagetags'] = array
    (
        
    'label'                   => array('Tags der Seite''Bitte geben Sie die Tags der Seite an.'),
        
    'exclude'                 => true,
        
    'inputType'               => 'checkbox',
        
    'eval'                    => array('multiple' => true),
        
    'default'                 => array(1,3),
        
    'options'                 => array(1,2,3,4),
        
    'sql'                       => 'text NULL'
    ); 
    1 und 3 sind angehakt, sobald ich eine neue Seite anlege.
    In einer bereits angelegten Seite funktioniert es natürlich nicht.

    Contao 3.2.5
    Meine Extensions: contentmodify, dca_editor

  18. #18
    Contao-Urgestein
    Registriert seit
    07.04.2010.
    Ort
    Stuttgart
    Beiträge
    2.733
    User beschenken
    Wunschliste

    Standard

    Und was steht dann in deinem DB-Feld drin?

    So geht es bei mir auch. Mein Problem ist dass ich das Datenbank-Feld garnicht habe, sondern die Werte aus einer echten n:m Beziehung hole.
    Daher muss das bei mir irgendwie auch schon mit bestehenden Datensätzen klappen, da die Tabelle mit den Beziehungen schon existiert.

    Also mir geht es nicht darum Default-Werte in die Datenbank zu speichern, sonder nur dass ich irgendwie (zu Fuß) die Checkboxen anhaken kann.

    Noch eine Idee? Das kann doch eigentlich nicht schwer sein... ich komme mir langsam echt dumm vor.

    Wenn ich euch helfen konnte könnt ihr euch gerne mal
    meine Amazon Wunschliste anschauen. Dankeschön.

  19. #19
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.897
    Partner-ID
    10107

    Standard

    Dafür brauchst du den load_callback des jeweiligen fields. Was genau machst du nun?

  20. #20
    Contao-Urgestein
    Registriert seit
    07.04.2010.
    Ort
    Stuttgart
    Beiträge
    2.733
    User beschenken
    Wunschliste

    Standard

    Und im Load-Callback gebe ich was genau zurück? Einen Array mit den Keys der Options, oder mit deren Wert?

    Wenn ich euch helfen konnte könnt ihr euch gerne mal
    meine Amazon Wunschliste anschauen. Dankeschön.

  21. #21
    Alter Contao-Hase
    Registriert seit
    02.10.2010.
    Ort
    58636 Iserlohn
    Beiträge
    1.084

    Standard

    Es würde helfen, wenn du die Datenbankstruktur deiner n:m - Daten bekannt geben könntest.
    Meine Extensions: contentmodify, dca_editor

  22. #22
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.897
    Partner-ID
    10107

    Standard

    Zitat Zitat von psren Beitrag anzeigen
    Und im Load-Callback gebe ich was genau zurück? Einen Array mit den Keys der Options, oder mit deren Wert?
    Ein Array mit den Werten,denke ich. Genaueres kann ich dir erst am Nachmittag sagen. Oder sonst sieh dir mal andere load_callbacks aus dem core oder aus Extensions an.

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
  •