Ergebnis 1 bis 12 von 12

Thema: Eigene Kalender-Erweiterung

  1. #1
    Contao-Fan Avatar von tinoo
    Registriert seit
    19.06.2009.
    Ort
    made in switzerland
    Beiträge
    591

    Standard Eigene Kalender-Erweiterung

    Hallo allerseits

    Ich "darf" den Kalender um einige vereinsspezifische Felder erweitern. Das funktioniert soweit gut, da ich das in ähnlicher Form früher schonmal gebraucht habe. Natürlich hat sich in der Zwischenzeit der Kalender mit TL weiterentwickelt, darum habe ich doch noch ein paar Fragen:

    1.) in meiner ursprünglichen Erweiterung hatte ich im Ordner html eine style.css stehen. Wird diese in der aktuellen Version von TL überhaupt noch berücksichtigt? Also bei mir nicht - ich musste die Formatierungen für meine Erweiterungen alle im Haupt-Stylesheet erfassen... Möchte nicht unnötig Ballast "herumtragen", darum: Wenn die css-Dateien in den Modul-Unterordnern html nicht mehr geladen werden, kann ich sie löschen? (natürlich nur in MEINER Erweiterung)

    2.) Da ich Felder hinzufüge, muss ich das nachwievor mittels
    "array_insert($GLOBALS['TL_DCA']['tl_calendar_events']['fields'], 31, array"
    in der Datei tl_calendar_events.php (Ordner dca) machen? Etwas suspekt ist mir die Zahl 31, welche die Position definieren soll. Ich meine, das mal gezählt zu haben. In zukünftigen Versionen kann die Anzahl Felder ja jederzeit ändern. Wie kann ich also meine Erweiterung "update-sicher" machen, dass ich nicht in Konflikt mit TL komme?

    Für Hilfe dankend!
    Freundliche Grüsse
    Martin

  2. #2
    Contao-Urgestein Avatar von Toflar
    Registriert seit
    15.06.2009.
    Beiträge
    4.467
    Partner-ID
    8667
    User beschenken
    Wunschliste

    Standard

    Zu 1 kann ich dir leider nichts sagen, weil ich nie damit arbeite.

    2) Das was du da hast ist eigentlich nicht nötig. Du positionierst ein Feld an einer bestimmten Stelle im Array. Das ist aber völlig sinnfrei, denn die Position (Reiheinfolge) der Felder im Backend wird über die Palette geregelt.
    Wichtig ist rein, dass das entsprechende Feld im fields-Array vorhanden ist
    Contao Core-Entwickler @terminal42 gmbh
    Wir sind Contao Premium-Partner!
    Für Individuallösungen kannst du uns gerne kontaktieren.
    PS: Heute schon getrakked?

  3. #3
    Contao-Fan Avatar von tinoo
    Registriert seit
    19.06.2009.
    Ort
    made in switzerland
    Beiträge
    591

    Standard

    Zitat Zitat von Toflar Beitrag anzeigen
    Du positionierst ein Feld an einer bestimmten Stelle im Array. Das ist aber völlig sinnfrei,
    Hm... Ich kann leider nicht mehr nachvollziehen, wo ich das her hab. Selbst erfunden wohl kaum Habs vermutlich abgeschrieben oder aus was ähnlichem rauskopiert...

    Allerdings scheint es für mich schon logisch: Ich habe ein bestehendes Array, welches vom Kalender-Modul gemäss tl_calendar_events.php im Ordner DCA erzeugt wird. Mittlerweile sind es 34 Felder.

    Wenn ich das Array nun mit meinen eigenen Felder ergänzen möchte und das mit array_insert() machen muss, muss ich doch eine Position angeben, oder nicht?

    Wie würdest denn Du meine Felder zum bestehenden Array hinzufügen? Es geht hier ja nicht um die Reihenfolge im Front- oder Backend --> die habe ich im Griff!!!
    Freundliche Grüsse
    Martin

  4. #4
    Contao-Urgestein Avatar von Toflar
    Registriert seit
    15.06.2009.
    Beiträge
    4.467
    Partner-ID
    8667
    User beschenken
    Wunschliste

    Standard

    Also normalerweise listet man ja die Felder im DCA in der gleichen Reihenfolge auf, wie sie in der Palette stehen.
    Aber das musst du nicht machen.

    So ergänzt man sie einfach (hängt also an den String an, deshalb ".="):
    PHP-Code:
    $GLOBALS['TL_DCA']['tl_content']['palettes']['default'] .= '{meinegruppe_legend},feld1,feld2'
    Oder man fügt sie an einem bestimmten Ort ein, indem man einen bestimmten Teil ersetzt:
    PHP-Code:
    $GLOBALS['TL_DCA']['tl_content']['palettes']['default'] = str_replace('headline','headline;{meinegruppe_legend},feld1,feld2'$GLOBALS['TL_DCA']['tl_content']['palettes']['default']); 
    Das ist auch die Reihenfolge in der die Felder im BE ausgegeben werden.
    Wie die dann definiert sind. Also ob an 1. Stelle im fields-Array, oder an letzter, spielt keine Rolle.

    Deshalb kannst du die auch einfach ganz normal ergänzen, ohne mit array_insert() zu arbeiten

    Ah und häng mich bitte nicht an Fehlern auf, die Palettenverschachtelung kann ich nicht auswendig - irgendwie Aber sollte so in etwa stimmen

    EDIT: Ach so, du hast gefragt wie dann ergänzen
    Na wie bei jedem Array, einfach so:
    PHP-Code:
    $GLOBALS['TL_DCA']['tl_content']['fields']['feld1'] = array
    (
       
    // label, default, inputType etc.
    ); 
    Geändert von Toflar (03.03.2010 um 12:27 Uhr)
    Contao Core-Entwickler @terminal42 gmbh
    Wir sind Contao Premium-Partner!
    Für Individuallösungen kannst du uns gerne kontaktieren.
    PS: Heute schon getrakked?

  5. #5
    Contao-Fan Avatar von tinoo
    Registriert seit
    19.06.2009.
    Ort
    made in switzerland
    Beiträge
    591

    Standard

    Zitat Zitat von Toflar Beitrag anzeigen

    EDIT: Ach so, du hast gefragt wie dann ergänzen
    Na wie bei jedem Array, einfach so:
    PHP-Code:
    $GLOBALS['TL_DCA']['tl_content']['fields']['feld1'] = array
    (
       
    // label, default, inputType etc.
    ); 
    Sorry, wenn ich nochmals nachhaken muss...

    Und damit wird das BESTEHENDE Array 'fields' um ein Feld 'feld1' ERGÄNZT, und nicht überschrieben? Dh. ich müsste in meiner DCA-Datei für jedes Feld, welches ich hinzufügen möchte, obige Anweisung erstellen?

    Die Verwendung von array_insert() war für mich insofern logisch, als dass die nachfolgenden Feld-Definitionen analog der Calendar-DCA ausschauen...

    Das mit der Palette hab ich mit str_replace() im Griff, das ist nicht mein "Problem"...
    Freundliche Grüsse
    Martin

  6. #6
    Contao-Fan Avatar von deerwood
    Registriert seit
    24.11.2009.
    Ort
    Hamburg
    Beiträge
    344

    Standard

    Hi,
    Zitat Zitat von tinoo Beitrag anzeigen
    Und damit wird das BESTEHENDE Array 'fields' um ein Feld 'feld1' ERGÄNZT, und nicht überschrieben? Dh. ich müsste in meiner DCA-Datei für jedes Feld, welches ich hinzufügen möchte, obige Anweisung erstellen?
    Sofern es zuvor ein 'feld1' in $GLOBALS['TL_DCA']['tl_content']['fields'] noch nicht gab: ja.

    Das sind doch alles assoziative Arrays (der Key ist ein String).

    LG, Georg

  7. #7
    Contao-Fan Avatar von tinoo
    Registriert seit
    19.06.2009.
    Ort
    made in switzerland
    Beiträge
    591

    Standard

    Danke Georg, ich werd meine DCA einfach mal umschreiben und schauen, was passiert... Ist ja noch nicht produktiv, die Seite :-)
    Freundliche Grüsse
    Martin

  8. #8
    Contao-Urgestein Avatar von Toflar
    Registriert seit
    15.06.2009.
    Beiträge
    4.467
    Partner-ID
    8667
    User beschenken
    Wunschliste

    Standard

    Naja, dann halt eben anders erklärt

    Du hast folgende Felddefinitionen:
    • birne (Eigenschaften: grün, nicht rund, lecker)
    • apfel (Eigenschaften: rot, giftig)
    • banane (Eigenschaften: gelb, krumm)


    Du willst folgende Ausgabe in der richtigen Reihenfolge:
    1. Apfel
    2. Banane
    3. Birne


    Also machst du die Palette so:
    Code:
    'apfel','banane','birne'
    Verstehst du was ich meine? Es ist völlig egal in welcher Reihenfolge die Eigenschaften definiert sind. Die Reihenfolge bestimmt die Palette
    Contao Core-Entwickler @terminal42 gmbh
    Wir sind Contao Premium-Partner!
    Für Individuallösungen kannst du uns gerne kontaktieren.
    PS: Heute schon getrakked?

  9. #9
    Contao-Fan Avatar von tinoo
    Registriert seit
    19.06.2009.
    Ort
    made in switzerland
    Beiträge
    591

    Standard

    Zitat Zitat von Toflar Beitrag anzeigen
    Verstehst du was ich meine? Es ist völlig egal in welcher Reihenfolge die Eigenschaften definiert sind. Die Reihenfolge bestimmt die Palette
    Ja, schon lange... Es geht auch nicht um die Palette oder die Reihenfolge der Ausgabe (hab ich vollkommen im Griff), sondern darum, wie ich meine selbstdefinierten Felder am elegantesten und vorallem - updatesicher - in das bestehende Felder-Array des Events bekomme, ohne dass ich da etwas kaputt mach....
    Freundliche Grüsse
    Martin

  10. #10
    Contao-Urgestein Avatar von Toflar
    Registriert seit
    15.06.2009.
    Beiträge
    4.467
    Partner-ID
    8667
    User beschenken
    Wunschliste

    Standard

    Ach so

    Naja, das Array ergänzt sich von selbst $GLOBALS ist, wie es der Name schon impliziert, global überall verfügbar (und sollte deshalb auch nicht unbewusst verwendet werden) und wie man es ergänzen kann, steht ja oben
    Contao Core-Entwickler @terminal42 gmbh
    Wir sind Contao Premium-Partner!
    Für Individuallösungen kannst du uns gerne kontaktieren.
    PS: Heute schon getrakked?

  11. #11
    Contao-Fan Avatar von tinoo
    Registriert seit
    19.06.2009.
    Ort
    made in switzerland
    Beiträge
    591

    Standard

    Zitat Zitat von Toflar Beitrag anzeigen
    Naja, das Array ergänzt sich von selbst $GLOBALS ist, wie es der Name schon impliziert, global überall verfügbar (und sollte deshalb auch nicht unbewusst verwendet werden) und wie man es ergänzen kann, steht ja oben
    Jetzt kommen wir der Sache schon näher...

    Bislang mache ich das so:
    PHP-Code:
    // Einfügen der TCJR-spezifischen Felder nach Position 34
    array_insert($GLOBALS['TL_DCA']['tl_calendar_events']['fields'], 35, array
        (
            
    'treffpunkt' => array
            (
                
    'label'                   => &$GLOBALS['TL_LANG']['tl_calendar_events']['treffpunkt'],
                
    'inputType'               => 'text',
                
    'search'                  => true,
                
    'eval'                    => array('mandatory'=>true'maxlength'=>64)
            ),
            
    'anmeldung' => array
            (
                
    'label'                   => &$GLOBALS['TL_LANG']['tl_calendar_events']['anmeldung'],
                
    'inputType'               => 'text',
                
    'search'                  => false,
                
    'eval'                    => array('mandatory'=>true'maxlength'=>64)
            ),

    usw
    Und die von Georg (und dir?) vorgeschlagene Variante ist:

    PHP-Code:
    $GLOBALS['TL_DCA']['tl_calendar_events']['fields']['treffpunkt'] = array
    (
                   
    'label'                   => &$GLOBALS['TL_LANG']['tl_calendar_events']['treffpunkt'],
                
    'inputType'               => 'text',
                
    'search'                  => true,
                
    'eval'                    => array('mandatory'=>true'maxlength'=>64)
    );  

    $GLOBALS['TL_DCA']['tl_calendar_events']['fields']['anmeldung'] = array
    (
                
    'label'                   => &$GLOBALS['TL_LANG']['tl_calendar_events']['anmeldung'],
                
    'inputType'               => 'text',
                
    'search'                  => false,
                
    'eval'                    => array('mandatory'=>true'maxlength'=>64)
    );  

    usw
    Sehe ich das richtig soweit? Meine Frage lautet nun konkret: Welches ist der "richtigere" Weg?
    Freundliche Grüsse
    Martin

  12. #12
    Contao-Urgestein Avatar von Toflar
    Registriert seit
    15.06.2009.
    Beiträge
    4.467
    Partner-ID
    8667
    User beschenken
    Wunschliste

    Standard

    Der einzige Unterschied besteht darin, dass du die Felddefinition an eine bestimmte Stelle im Array einfügst und Georg und ich die Daten einfach am Ende des Arrays anfügen.

    Was der richtigere Weg ist, kann ich dir nicht sagen. Ich kann mir aber vorstellen, dass der Aufruf einer Funktion (array_insert) langsamer ist, als einfach das Array zu erweitern.
    Aber dieser Unterschied merkt eh kein Mensch und ob's stimmt, weiss ich auch nicht...ist lediglich eine Annahme

    Ich bin einfach zu faul, so viel zu schreiben, wenn's doch so einfach geht
    Contao Core-Entwickler @terminal42 gmbh
    Wir sind Contao Premium-Partner!
    Für Individuallösungen kannst du uns gerne kontaktieren.
    PS: Heute schon getrakked?

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Ähnliche Themen

  1. Erweiterung des Kalender-Moduls um einen Counter
    Von gerritl im Forum Entwickler-Fragen
    Antworten: 3
    Letzter Beitrag: 25.05.2011, 20:29
  2. Kalender
    Von daniel.hug im Forum Entwickler-Fragen
    Antworten: 15
    Letzter Beitrag: 22.11.2009, 13:14
  3. Kalender - Kategorien - mehrere Kalender - gemeinsame Ausgabe - WIE?
    Von cris2371 im Forum Nachrichten/Events/FAQ
    Antworten: 4
    Letzter Beitrag: 12.07.2009, 12:18

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •