Ergebnis 1 bis 14 von 14

Thema: Modul Anpassungen für Contao 3 - fileTree und das DB gestützte Filesystem

  1. #1
    Wandelndes Contao-Lexikon Avatar von BugBuster
    Registriert seit
    15.06.2009.
    Ort
    Berlin
    Beiträge
    10.513
    User beschenken
    Wunschliste

    HTML Modul Anpassungen für Contao 3 - fileTree und das DB gestützte Filesystem

    So, ich fange mal an, weil ich das zufällig grad gefunden habe.

    Durch das DB gestützte Filesystem stehen nun in den DCA fileTree Feldern nicht mehr Pfad und Dateiname drin, sondern ne Zahl. Diese Zahl als PK in tl_files genommen zeigt nun auf die Infos zu dieser ausgewählten Datei.

    Wer also wie ich mit Dateien im eigenem Modul arbeitet muss etwas anpassen.

    Bekam man vorher z.B. im Feld singleSRC die Datei samt Pfad zurück
    Code:
    files/music_academy/campus/campus_building.jpg
    bekommt man nun eine Zahl.
    Und so macht man draus wieder das gesuchte: (im Core so gefunden)
    PHP-Code:
    // in singleSRC Spalte steht nun ne Zahl

    // Check for version 3 format
    if (!is_numeric($this->singleSRC))
    {
        return 
    '<p class="error">'.$GLOBALS['TL_LANG']['ERR']['version2format'].'</p>';
    }

    $objFile = \FilesModel::findByPk($this->singleSRC); 
    $this->singleSRC $objFile->path
    Nun ist in $this->singleSRC wieder das gesuchte wie in Contao 2.


    Wer sein Modul für 2.9 und 3.x kompatibel machen will, der müsste das etwas abändern. Wenn keine Zahl, dann die Ermittlung überspringen statt Fehlermeldung.
    Geändert von BugBuster (20.05.2012 um 23:34 Uhr)
    Grüße, BugBuster
    "view source" is your guide.
    Danke an alle Amazon Wunschlisten Erfüller

  2. #2
    Wandelndes Contao-Lexikon Avatar von BugBuster
    Registriert seit
    15.06.2009.
    Ort
    Berlin
    Beiträge
    10.513
    User beschenken
    Wunschliste

    Standard

    Noch ein Hinweis dazu.
    Der Contao Updater hat ne updateFileTreeFields für alle fileTree Typen im DCA.
    Wandelt bei Update von Contao 2 auf Contao 3 alles um was den Typ fileTree im DCA hat.
    Darum brauch man sich schon mal nicht kümmern.
    Grüße, BugBuster
    "view source" is your guide.
    Danke an alle Amazon Wunschlisten Erfüller

  3. #3
    Gesperrt
    Registriert seit
    03.04.2010.
    Ort
    Mosbach
    Beiträge
    338

    Standard

    Kann man hier mal ein Bsp. erhalten? Ich würde gerne in den Labels das gewählte Bild mit ausgeben, aber nun wird mir ja nur die Zahl (id aus tl_files) ausgegeben.

    PHP-Code:
            'label' => array
            (
                
    'fields'                  => array('name','description','images'),
                
    'format'                  => '<div style="margin: 5px 0;"><strong>%s</strong><br />%s | %s</div>'
            
    ), 
    Warum wurde das überhaupt geändert?

  4. #4
    Wandelndes Contao-Lexikon Avatar von BugBuster
    Registriert seit
    15.06.2009.
    Ort
    Berlin
    Beiträge
    10.513
    User beschenken
    Wunschliste

    Standard

    Da würde ich mit einem label_callback rangehen:
    PHP-Code:
            'label' => array
            (
                
    'fields'                  => array('name'),
                
    'format'                  => '%s',
                
    'label_callback'       => array('tl_classname''labelCallback'),
            ), 
    im DCA dann die class und methode anlegen
    ich gehe mal davon aus, das in "images" die Zahl ankommt

    PHP-Code:
    class tl_classname extends Backend
    {
        public function 
    labelCallback($arrRow)
        {
          
    // Check for version 3 format
          
    if (!is_numeric($this->images))
          {
              return 
    '<p class="error">'.$GLOBALS['TL_LANG']['ERR']['version2format'].'</p>';
          }

          
    $objFile = \FilesModel::findByPk($this->images); 
          
    $image_path $objFile->path;  
          
    //nun hier die Ausgabe erzeugen
          
    return '<div ...... </div>';
        }

    Name der Klasse so wie die Tabelle für die dieses DCA hier sein soll. Geht auch in einer weiteren Datei, dann wie gehabt Klassenname = Dateiname (tl_class.php).

    Warum das geändert wurde? Schon mal eine Datei im Dateimanager verschoben und ewig gesucht wo die verwendet wurde (Artikel,Modul,..) um das dort auch anzupassen?
    Das geht nun ohne das man sich drum kümmern muss.
    Grüße, BugBuster
    "view source" is your guide.
    Danke an alle Amazon Wunschlisten Erfüller

  5. #5
    Gesperrt
    Registriert seit
    03.04.2010.
    Ort
    Mosbach
    Beiträge
    338

    Standard

    Ok, danke dir erstmal! Leider klappt es nicht nicht ganz, denn ich bekomme komischerweise die Fehlermeldung: "Dieses Element verwendet noch das alte Contao 2 SRC-Format. Haben Sie die Datenbank aktualisiert?"
    Also kurz: Ich hatte unter Cto2 mal angefangen eine Erweiterung zu schreiben. Diese will ich nun auf Cto3 bringen. Eigentlich bei Null angefangen und den 'Extension-Creator' genommen. Der sollte doch Cto3 kompatible Dateien erstellen?! Also ich hab sonst in dieser Installation nichts was noch mit Cto2 zu tun hat.
    Hast du vielleicht 'ne Idee?
    Das Feld selbst schaut so aus...
    PHP-Code:
    'images' => array
            (
                
    'label'                       => &$GLOBALS['TL_LANG']['tl_os_names']['images'],
                
    'search'                      => false,
                
    'exclude'                     => true,
                
    'inputType'                  => 'fileTree',
                
    'eval'                        => array('mandatory'=>false'filesOnly'=>true'files'=>true'fieldType'=>'radio'),
                
    'sql'                    => "varchar(255) NOT NULL default ''"
            
    ), 
    Geändert von Oden (01.11.2012 um 20:23 Uhr)

  6. #6
    Wandelndes Contao-Lexikon Avatar von BugBuster
    Registriert seit
    15.06.2009.
    Ort
    Berlin
    Beiträge
    10.513
    User beschenken
    Wunschliste

    Standard

    Äh, ach so. Na wenn du selber dort die Pfade ablegst, dann kannste die auch verwenden.
    Wie kommen denn die Pfade dort rein?
    Grüße, BugBuster
    "view source" is your guide.
    Danke an alle Amazon Wunschlisten Erfüller

  7. #7
    Gesperrt
    Registriert seit
    03.04.2010.
    Ort
    Mosbach
    Beiträge
    338

    Standard

    Na über's FileTree selber, würde ich mal sagen. So kann ich ja bequem ein Bild auswählen. Früher wurde da ja der Pfad übernommen, jetzt eben nur noch die 'Zahl'. Also die entsprechende ID aus tl_files. Also ich lege die Pfade nicht selber ab.
    Ich könnte ja eine SQL-Abfrage machen und mir mit der ID den Pfad holen, aber wie wird der dann ausgegeben. Also im Label selber?! Weil das ja mit dem Formatierungs-Strings ausgeben wird.

  8. #8
    Wandelndes Contao-Lexikon Avatar von BugBuster
    Registriert seit
    15.06.2009.
    Ort
    Berlin
    Beiträge
    10.513
    User beschenken
    Wunschliste

    Standard sorry, mein Fehler

    Äh, warte mal, da war noch was falsch, du bist ja im callback:
    PHP-Code:
    class tl_classname extends Backend
    {
        public function 
    labelCallback($arrRow)
        {
          
    // Check for version 3 format
          
    if ( strlen($arrRow['images']) >&& !is_numeric($arrRow['images']) )
          {
              return 
    '<p class="error">'.$GLOBALS['TL_LANG']['ERR']['version2format'].'</p>';
          }

          
    $objFile = \FilesModel::findByPk($arrRow['images']); 
          
    $image_path $objFile->path;  
          
    //nun hier die Ausgabe erzeugen
          
    return '<div ...... </div>';
        }

    Die return Zeile dann in etwa so, ungetestet, 'name','description' ausgeben wie bisher und das Bild dazu
    PHP-Code:
    return '<div style="margin: 5px 0;"><strong>'.$arrRow['name'].'</strong><br />'.$arrRow['description'].' | <img src="'.$image_path.'"></div>'
    Geändert von BugBuster (01.11.2012 um 23:25 Uhr)
    Grüße, BugBuster
    "view source" is your guide.
    Danke an alle Amazon Wunschlisten Erfüller

  9. #9
    Gesperrt
    Registriert seit
    03.04.2010.
    Ort
    Mosbach
    Beiträge
    338

    Standard

    Ok, danke bis dahin. Jetzt ist die Fehlermeldung weg und der Pfad wird ausgegeben. Aber , irgendwie will mir jetzt das Label selbst nichts mehr ausgeben. Alles wird ignoriert.
    Oder wird das jetzt komplett in der Klasse gemacht? Wenn ja, wie muß ich dann zum Bsp. das Feld 'name' oder 'description' ansprechen?

  10. #10
    Wandelndes Contao-Lexikon Avatar von BugBuster
    Registriert seit
    15.06.2009.
    Ort
    Berlin
    Beiträge
    10.513
    User beschenken
    Wunschliste

    Standard

    Siehe mein return Beispiel, habe ich noch angehangen.
    Grüße, BugBuster
    "view source" is your guide.
    Danke an alle Amazon Wunschlisten Erfüller

  11. #11
    Gesperrt
    Registriert seit
    03.04.2010.
    Ort
    Mosbach
    Beiträge
    338

    Standard

    Also so wie es ausschaut, wird das Label dann komplett ignoriert. Aber mit '$arrRow['name']' etc. kann ich die Felder in der Klasse ausgeben und natürlich auch formatieren.
    Ich danke dir für deine Hilfe!!!

    Dennoch noch die Frage: Wird sich da noch etwas ändern, so daß man das Label wieder 'normal' nutzen kann?

  12. #12
    Gesperrt
    Registriert seit
    03.04.2010.
    Ort
    Mosbach
    Beiträge
    338

    Standard

    Zitat Zitat von BugBuster Beitrag anzeigen
    Siehe mein return Beispiel, habe ich noch angehangen.
    Danke nochmal, hab es grad selber rausbekommen. ;-)

  13. #13
    Wandelndes Contao-Lexikon Avatar von BugBuster
    Registriert seit
    15.06.2009.
    Ort
    Berlin
    Beiträge
    10.513
    User beschenken
    Wunschliste

    Standard

    in der label definition darf bei format nur noch '%s' stehen, dann sollte das gehen.

    Dennoch noch die Frage: Wird sich da noch etwas ändern, so daß man das Label wieder 'normal' nutzen kann?
    Hä? Verstehe ich grad nicht was du meinst. Die Verwaltung der Dateien ist nun DB gestützt, und muss so verwendet werden.
    Das man da an bestimmten Stellen etwas ändern muss bleibt nicht aus, das macht der Core nicht anders.
    Grüße, BugBuster
    "view source" is your guide.
    Danke an alle Amazon Wunschlisten Erfüller

  14. #14
    Gesperrt
    Registriert seit
    03.04.2010.
    Ort
    Mosbach
    Beiträge
    338

    Standard

    Zitat Zitat von BugBuster Beitrag anzeigen
    in der label definition darf bei format nur noch '%s' stehen, dann sollte das gehen.
    Na leider nicht.

    Hä? Verstehe ich grad nicht was du meinst. Die Verwaltung der Dateien ist nun DB gestützt, und muss so verwendet werden.
    Das man da an bestimmten Stellen etwas ändern muss bleibt nicht aus, das macht der Core nicht anders.
    Das habe ich ja mitbekommen. Und die Frage bezog sich darauf, ob man das dann dennoch einfach mit der Klasse im Label ausgeben kann. Denn mit der Klasse geht es nicht. Da wird alles überschrieben. Ohne die Klasse geht es schon, aber dann eben nicht mit dem Pfad.
    Dennoch, so kann ich damit leben. Ich formatiere das jetzt in der Klasse und gut ist.

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
  •