Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 40 von 45

Thema: dynamische Bildgrössen

  1. #1
    Contao-Nutzer Avatar von Luminanz
    Registriert seit
    02.02.2011.
    Beiträge
    198

    Standard dynamische Bildgrössen

    Hallo

    Ich habe folgenden code aus einer contao 3.2 Installation, mit dem für Redakteure die Bildgrössen dynamisch vorbelegt werden:
    PHP-Code:
    class dynamicDefaults extends \Backend
    {
            public function 
    onload_callback($dc)
            {
            
    //Default-Werte für das Inhaltselement Galerie
            
    $arrDefaultGallery = array
            (
            
    'size' => array('100','100','center_center'),
            
    'fullsize' => true
            
    );
            
    //Default-Werte für das Inhaltselement Bild
            
    $arrDefaultImage = array
            (
            
    'size' => array('200','','proportinal')
            );
            
    //Default-Werte für das Inhaltselement Text (Bild hinzufügen)
            
    $arrDefaultText = array
            (
            
    'size' => array('200','','proportinal'),
            
    'floating' => 'left'
            
    );
            if (!
    $dc->activeRecord) {
                 
    $dc->activeRecord $this->Database
                    
    ->prepare("SELECT * FROM tl_content WHERE id=?")
                    ->
    execute($dc->id);
            }
                if (
    $dc->activeRecord->type == 'gallery' && !$dc->activeRecord->multiSRC) {
                    
    $dc->activeRecord $this->Database
                      
    ->prepare('UPDATE tl_content %s WHERE id=?')
                      ->
    set($arrDefaultGallery)
                      ->
    execute($dc->id);
                }
                if (
    $dc->activeRecord->type == 'image' && !$dc->activeRecord->singleSRC) {
                    
    $dc->activeRecord $this->Database
                      
    ->prepare('UPDATE tl_content %s WHERE id=?')
                      ->
    set($arrDefaultImage)
                      ->
    execute($dc->id);
                }
                if (
    $dc->activeRecord->type == 'text' && !$dc->activeRecord->singleSRC) {
                    
    $dc->activeRecord $this->Database
                      
    ->prepare('UPDATE tl_content %s WHERE id=?')
                      ->
    set($arrDefaultText)
                      ->
    execute($dc->id);
                }
            } 

    Leider funktioniert dies unter contao 3.5 nicht mehr.
    Was genau hat sich geändert?

    Vielen Dank für eure Tipps

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

    Standard

    Ich kann mir irgendwie nicht vorstellen dass dieser Code jemals funktioniert hat. Du versuchst den activeRecord zu laden, wenn dieser nicht existiert - aber wenn dieser nicht existiert, kannst du ihn auch nicht laden.

    Solltest du nicht einfach nur die default Werte des DCAs ändern?

  3. #3
    Contao-Nutzer Avatar von Luminanz
    Registriert seit
    02.02.2011.
    Beiträge
    198

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Solltest du nicht einfach nur die default Werte des DCAs ändern?
    Ja, grundsätzlich schon. Es sollen aber unterschiedliche Bildgrössen definiert werden können (Inhaltselement Bild und Galerie).

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

    Standard

    Ja natürlich. Ich meine damit - solltest du in deinem onload_callback nicht einfach nur den default Wert im DCA ändern? Eben abhängig vom Typ.

  5. #5
    Contao-Nutzer Avatar von Luminanz
    Registriert seit
    02.02.2011.
    Beiträge
    198

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Ja natürlich. Ich meine damit - solltest du in deinem onload_callback nicht einfach nur den default Wert im DCA ändern? Eben abhängig vom Typ.
    Und wie meinst du das konkret [emoji15]?

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

    Standard

    Sieh's dir einfach beim core ab - dort wird auch je nach Inhaltselement Typ das DCA verändert:


  7. #7
    Contao-Nutzer Avatar von Luminanz
    Registriert seit
    02.02.2011.
    Beiträge
    198

    Standard

    Ok, sehe was du meinst (adjustDcaByType).
    Kapiere nicht alles, werde es heute Abend aber mal versuchen. Danke!

  8. #8
    Contao-Nutzer Avatar von Luminanz
    Registriert seit
    02.02.2011.
    Beiträge
    198

    Standard

    Hab es damit versucht. Funktioniert leider nicht.

    initconfig.php
    PHP-Code:
    <?php

    // Put your custom configuration here
    // callback für dynamische Default-Werte aufrufen:
    $GLOBALS['TL_DCA']['tl_content']['config']['onload_callback'][] = array('dynamicDefaults','set_defaults');
    dynamicDefaults.php
    PHP-Code:
    <?php
    /**
     * Namespace
     */
    namespace dynamicDefaults;
    /**
     * Class dynamicDefaults
     *
     */
    class dynamicDefaults extends \Backend
    {
            public function 
    set_defaults($dc)
            {
              if (
    $_POST || Input::get('act') != 'edit')
              {
                return;
              }
              
    $objCte ContentModel::findByPk($dc->id);
              if (
    $objCte === null)
              {
                return;
              }
              switch (
    $objCte->type)
              {
                case 
    'gallery':
                  
    // Default image size - width, height, mode|size-ID
                  
    $GLOBALS['TL_DCA']['tl_content']['fields']['size']['default']  = array(''''1);
                  break;
                case 
    'image':
                  
    // Default image size - width, height, mode|size-ID
                  
    $GLOBALS['TL_DCA']['tl_content']['fields']['size']['default']  = array(''''2);
                  break;
              }
            }

    }

  9. #9
    Contao-Nutzer Avatar von Luminanz
    Registriert seit
    02.02.2011.
    Beiträge
    198

    Standard

    Habe noch diesen Beitrag gefunden, hier besteht ein ähnliches Anliegen:

    DCA Einschränkung der Optionen für "Bildbreite und Bildhöhe" am CE "Image"

    https://community.contao.org/de/show...l=1#post427898

  10. #10
    Contao-Nutzer Avatar von Luminanz
    Registriert seit
    02.02.2011.
    Beiträge
    198

    Standard

    Wenn ich den onload_callback in der dcaconfig.php aufrufe,
    erhalte ich im backend eine weisse Seite, sobald ich einen Artikel bearbeiten will.

    Hat jemand eine Erklärung hierfür?

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

    Standard

    Was genau machst du in der dcaconfig.php?

  12. #12
    Contao-Nutzer Avatar von Luminanz
    Registriert seit
    02.02.2011.
    Beiträge
    198

    Standard

    PHP-Code:
     <?php

    // Put your custom configuration here
    // callback für dynamische Default-Werte aufrufen:
    $GLOBALS['TL_DCA']['tl_content']['config']['onload_callback'][] = array('dynamicDefaults','set_defaults');

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

    Standard

    Das solltest du lieber in einer Extension machen, nicht in der dcaconfig.php (und auch nicht in der initconfig.php). Die dcaconfig.php wird potentiell mehrmals aufgerufen - mit deinem Code wird also dieser Callback merhmals registriert. Du könntest natürlich alternativ dort das Array durchsuchen und überprüfen, ob der Callback schon registriert ist und nur wenn er noch nicht registriert ist den Callback einfügen.

    Davon abgesehen sollten Klassennamen mit einem Großbuchstaben beginnen, aber das hat nichts mit dem Fehler zu tun, sondern wäre einfach nur best-practice
    Geändert von Spooky (01.08.2017 um 15:04 Uhr)

  14. #14
    Contao-Nutzer Avatar von Luminanz
    Registriert seit
    02.02.2011.
    Beiträge
    198

    Standard

    Habe im config-Ordner eine config.php erstellt und den Aufruf des callbacks dort eingefügt. Die Artikel können nun wieder normal bearbeitet werden.

    Aber leider werden die defaults noch immer nicht gesetzt.
    Ist es möglich, dass meine Modul (dynamicDefaults) zu spät geladen wird. Müsste es eventuell vor dem core geladen werden?

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

    Standard

    Den config Ordner deiner eigenen Extension meinst du, oder?

  16. #16
    Contao-Nutzer Avatar von Luminanz
    Registriert seit
    02.02.2011.
    Beiträge
    198

    Standard

    Ja, genau.

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

    Standard

    Füge mal ein
    PHP-Code:
    var_dump('foo'); exit; 
    ganz oben in deinem Callback ein, um zu überprüfen, dass dieser Callback tatsächlich aufgerufen wird. Erzeuge dann ein neues Inhaltselement - du solltest eine weiße Seite mit "foo" sehen.

  18. #18
    Contao-Nutzer Avatar von Luminanz
    Registriert seit
    02.02.2011.
    Beiträge
    198

    Standard

    Habe den Code eingefügt, eine weisse Seite erhalte ich aber nicht.
    Anbei mein Zwischenstand.
    Angehängte Dateien Angehängte Dateien

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

    Standard

    1. Die Extension würde ich von dynamicDefaults in dynamic_defaults umbenennen, das wäre der Contao Standard. Vergiss nicht nach dieser Änderung überall alle Pfade anzupassen.
    2. Den Namespace würde ich auch entweder in DynamicDefaults umbenennen oder ganz entfernen. Ebenso auch hier nicht vergessen nach dieser Änderung überall alles anzupassen.
    3. Der eigentliche Fehler liegt in der autoload.php - deine Klasse wird nämlich gar nicht geladen, da du erstens den falschen Klassennamen verwendest und zweitens den falschen Pfad zur Klasse.
    4. Die Methode set_defaults würde ich in setDefaults umbenennen.

  20. #20
    Contao-Nutzer Avatar von Luminanz
    Registriert seit
    02.02.2011.
    Beiträge
    198

    Standard

    Danke für die vielen Hinweise!
    Habe (hoffentlich) alles berücksichtigt.
    Leider klappt es aber noch nicht
    Angehängte Dateien Angehängte Dateien

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

    Standard

    In diesem zip ist alles unverändert

  22. #22
    Contao-Nutzer Avatar von Luminanz
    Registriert seit
    02.02.2011.
    Beiträge
    198

    Standard

    Sorry, anbei nun die aktuelle Version
    Angehängte Dateien Angehängte Dateien

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

    Standard

    Wird der Callback nun aufgerufen?

  24. #24
    Contao-Nutzer Avatar von Luminanz
    Registriert seit
    02.02.2011.
    Beiträge
    198

    Standard

    Leider nein, zumindest erhalte ich nicht eine weisse Seite mit foo beim Erstellen eines Inhaltselements.

  25. #25
    Contao-Nutzer Avatar von Luminanz
    Registriert seit
    02.02.2011.
    Beiträge
    198

    Standard

    Ich habe den Aufruf des callbacks testweise wieder in die dcaconfig.php verschoben.
    Dann erhalten ich folgende Meldung, sobald ich einen Artikel öffne:
    Missing data container for table "tl_content"

    Wo liegt hier genau der Fehler?

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

    Standard

    Momentan kann ich keinen Fehler in der Extension feststellen. Über die dcaconfig.php würde ich es ohnehin nicht machen.

  27. #27
    Contao-Nutzer Avatar von Luminanz
    Registriert seit
    02.02.2011.
    Beiträge
    198

    Standard

    Ich teste es mit einer Contao 3.5.28. Beim Contao-Check ist alles ok.
    Könnte eventuell jemand die Extension bei sich testen?

  28. #28
    Contao-Urgestein Avatar von Samson1964
    Registriert seit
    05.11.2012.
    Ort
    Berlin
    Beiträge
    2.794

    Standard

    Kann ich spätestens morgen Vormittag machen.

    Gesendet von meinem L52 mit Tapatalk
    Viele Grüße
    Frank

    Seit Mai 2013 Fan von Contao
    Webmaster vom Deutschen Schachbund und Berliner Schachverband
    Mein Blog: Schachbulle
    Meine Erweiterungen bei GitHub
    Meine Videos auf YouTube: Playlist zur Contao-Programmierung/Einrichtung

  29. #29
    Contao-Nutzer Avatar von Luminanz
    Registriert seit
    02.02.2011.
    Beiträge
    198

    Standard

    Ok, vielen Dank schon mal.

  30. #30
    Contao-Urgestein Avatar von Samson1964
    Registriert seit
    05.11.2012.
    Ort
    Berlin
    Beiträge
    2.794

    Standard

    Ist mir schleierhaft. Wenn config.php/autoload.php in meiner lokalen 3.5.27 abgearbeitet wird, ist das $GLOBALS-Array noch recht übersichtlich und $GLOBALS['TL_DCA'] fehlt noch völlig. Da wundert es mich nicht, daß Deine Callback-Zeile in der config.php später von core/dca/tl_content.php überschrieben wird. Und das trotz requires[] = "core" in der autoload.ini.
    In der dcaconfig.php ist $GLOBALS['TL_DCA'] da.

    Das gleiche Verhalten gibt es in einer Online-3.5.28.

    <Spekulation>TL_DCA gibt es erst, wenn das dca-Verzeichnis abgearbeitet wird, was zu diesem Zeitpunkt wohl noch nicht der Fall ist. Ich würde den Callback in eine eigene dca/tl_content.php verlagern.</Spekulation>
    Geändert von Samson1964 (04.08.2017 um 07:50 Uhr)
    Viele Grüße
    Frank

    Seit Mai 2013 Fan von Contao
    Webmaster vom Deutschen Schachbund und Berliner Schachverband
    Mein Blog: Schachbulle
    Meine Erweiterungen bei GitHub
    Meine Videos auf YouTube: Playlist zur Contao-Programmierung/Einrichtung

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

    Standard

    Ah, jetzt sehe ich erst den Fehler. Du hast den Callback in der config.php eingetragen - den musst du aber in der dca/tl_content.php eintragen

  32. #32
    Contao-Urgestein Avatar von Samson1964
    Registriert seit
    05.11.2012.
    Ort
    Berlin
    Beiträge
    2.794

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Ah, jetzt sehe ich erst den Fehler. Du hast den Callback in der config.php eingetragen - den musst du aber in der dca/tl_content.php eintragen
    Habe ich den Meister darauf gebracht oder hast Du meine Spekulation gar nicht gesehen?
    Viele Grüße
    Frank

    Seit Mai 2013 Fan von Contao
    Webmaster vom Deutschen Schachbund und Berliner Schachverband
    Mein Blog: Schachbulle
    Meine Erweiterungen bei GitHub
    Meine Videos auf YouTube: Playlist zur Contao-Programmierung/Einrichtung

  33. #33
    Contao-Nutzer Avatar von Luminanz
    Registriert seit
    02.02.2011.
    Beiträge
    198

    Standard

    Ok, vielen Dank euch beiden. Werde ich testen!

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

    Standard

    Zitat Zitat von Samson1964 Beitrag anzeigen
    Habe ich den Meister darauf gebracht oder hast Du meine Spekulation gar nicht gesehen?
    Du hast mich darauf gebracht

  35. #35
    Contao-Nutzer Avatar von Luminanz
    Registriert seit
    02.02.2011.
    Beiträge
    198

    Standard

    Der callback wird nun aufgerufen. Ich erhalte aber den Fehler <Missing data container for table "tl_content">.
    Muss ich in der tl_content.php sonst noch etwas einfügen? Habe nur den Aufruf des callbacks darin.

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

    Standard

    Poste deine Extension.

  37. #37
    Contao-Urgestein Avatar von Samson1964
    Registriert seit
    05.11.2012.
    Ort
    Berlin
    Beiträge
    2.794

    Standard

    Laut der Core tl_content ist das nicht so klar. Bei checkPermission gibt es keinen Parameter, bei showJsLibraryHint wird $dc als Parameter angegeben. Und beide sind onload_callbacks.
    Viele Grüße
    Frank

    Seit Mai 2013 Fan von Contao
    Webmaster vom Deutschen Schachbund und Berliner Schachverband
    Mein Blog: Schachbulle
    Meine Erweiterungen bei GitHub
    Meine Videos auf YouTube: Playlist zur Contao-Programmierung/Einrichtung

  38. #38
    Contao-Nutzer Avatar von Luminanz
    Registriert seit
    02.02.2011.
    Beiträge
    198

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Poste deine Extension.
    Hier der aktuelle Stand
    Angehängte Dateien Angehängte Dateien

  39. #39
    Contao-Urgestein Avatar von Samson1964
    Registriert seit
    05.11.2012.
    Ort
    Berlin
    Beiträge
    2.794

    Standard

    Kurzer Blick in Deine tl_content: Warum überschreibst Du das onload_callback-Array? Deine erste Variante ist doch ganz in Ordnung gewesen, oder?
    Und warum steht jetzt ein Prefix "Contao" in der autoload.php. Hat das andere nicht funktioniert?

    EDIT: Ach Du überschreibst ja ganz tl_content...
    Viele Grüße
    Frank

    Seit Mai 2013 Fan von Contao
    Webmaster vom Deutschen Schachbund und Berliner Schachverband
    Mein Blog: Schachbulle
    Meine Erweiterungen bei GitHub
    Meine Videos auf YouTube: Playlist zur Contao-Programmierung/Einrichtung

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

    Standard

    • Wie Samson schon angemerkt hat, ist deine dca/tl_content.php falsch. Du löschst dort fast das gesamte DCA. Richtig wäre die Variante die du auskommentiert hast.
    • Du hast in verschiedenen PHP Dateien nun ein ?> am Ende. Das brauchst du nicht. Lösche es wieder.
    • Du verwendest nun den Namespace "Contao". Den brauchst du nicht. Und wenn dann solltest du lieber einen eigenen Namespace verwendne.

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
  •