Ergebnis 1 bis 11 von 11

Thema: Vergabe einer Klasse an ein ganzes Archiv und nicht nur an seine einzelnen Beiträge

  1. #1
    Contao-Nutzer Avatar von Hagord
    Registriert seit
    18.08.2010.
    Ort
    Berlin
    Beiträge
    142

    Standard Vergabe einer Klasse an ein ganzes Archiv und nicht nur an seine einzelnen Beiträge

    Contao 3 RC1: Tolle Arbeit, die die Entwickler da geleistet haben! Weiter so! Und jetzt meine Frage: Ist an die Möglichkeit gedacht, einem Archiv eine Klasse geben zu können, die sich dann auf alle seine Beiträge vererbt? Sonst muss der Redakteur bei jedem Beitrag daran denken, die richtige Klasse zu vergeben. ;-)
    Geändert von Hagord (18.09.2012 um 20:27 Uhr)

  2. #2
    Contao-Yoda Avatar von MacKP
    Registriert seit
    15.06.2009.
    Ort
    Duisburg
    Beiträge
    13.292
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Hallo Hagord,
    ich habs bei C3 noch nicht ausprobiert. Aber bisher konnte man sich zumindest die ID des Archives ausgeben lassen und damit dann selber eine Klasse generieren lassen. Also einfach mal die Variablen anzeigen lassen (wie das geht steht zum Beispiel im Wiki).

    Viele Grüße
    Contao Pool | C-C-A | MetaModels | [Internetseite -> Mediendepot Ruhr]
    [Arbeitet bei -> Paus Design & Medien]
    "I can EXPLAIN it to you, but I can't UNDERSTAND it for you."

  3. #3
    Contao-Nutzer Avatar von Hagord
    Registriert seit
    18.08.2010.
    Ort
    Berlin
    Beiträge
    142

    Standard Näherungsweise Lösung mit Boardmitteln

    Danke für die Antwort. Eine "direkte" Lösung habe ich gefunden: Der Instanz des Leser-Moduls auf der Weiterleitungsseite kann man eine ID bzw. Klasse vergeben. Die erscheint dann auch im HTML-Text und kann dann zur archivspezifischen Formatierung genutzt werden. Eine Vergabe von ID/Klasse direkt am Lesermodul bringt keinen Erfolg - keines von beiden schafft den Weg ins HTML. Ihre Lösung mit der Archiv-ID konnte ich leider noch nicht nachvollziehen, da ich noch nicht so tief in der Contao-Programmierung stecke. Gruß, Hagord

  4. #4
    Contao-Yoda Avatar von MacKP
    Registriert seit
    15.06.2009.
    Ort
    Duisburg
    Beiträge
    13.292
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao
    Contao Pool | C-C-A | MetaModels | [Internetseite -> Mediendepot Ruhr]
    [Arbeitet bei -> Paus Design & Medien]
    "I can EXPLAIN it to you, but I can't UNDERSTAND it for you."

  5. #5
    Contao-Nutzer Avatar von Hagord
    Registriert seit
    18.08.2010.
    Ort
    Berlin
    Beiträge
    142

    Standard

    Die Links waren wirklich nützlich. Die gesuchte Variable lautet wahrscheinlich [news_archives][0], wobei - so vermute ich - die 0 für das erste Archiv steht. Der Wert ist in meinem Fall 4 und stimmt mit der ID meines Archivs überein. Wie genau kann ich nun diese Variable in PHP benutzen/ansprechen/ausgeben?

    Ich habe mich gerade noch mal schlau gemacht. Die 0 steht nicht für das erste der existierenden Archive, sondern für das erste Archiv, das dem Nachrichtenleser zugeordnet wurde. Ordnet man immer nur ein Archiv zu, hat man die ID dieses Archivs immer unter dem Index 0. Meine Frage nach der Benutzung bleibt.
    Geändert von Hagord (23.09.2012 um 00:51 Uhr)

  6. #6
    Contao-Yoda Avatar von MacKP
    Registriert seit
    15.06.2009.
    Ort
    Duisburg
    Beiträge
    13.292
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Hallo Hagord,
    schau doch mal so in der Liste nach, wo du mehrere News drinn hast. Da sollte was passendes sein meine ich. Und ausgegeben bekommst du das dann so ->
    PHP-Code:
    <?php echo $this[news_archives][0]; ?>
    Zumindest so in der Art.

    Viele Grüße
    Contao Pool | C-C-A | MetaModels | [Internetseite -> Mediendepot Ruhr]
    [Arbeitet bei -> Paus Design & Medien]
    "I can EXPLAIN it to you, but I can't UNDERSTAND it for you."

  7. #7
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.703
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Zitat Zitat von Hagord Beitrag anzeigen
    ...Eine Vergabe von ID/Klasse direkt am Lesermodul bringt keinen Erfolg - keines von beiden schafft den Weg ins HTML....
    Nur, wenn du das Modul über das Seitenlayout einfügst, nicht über einen Artikel.

    In news_short wird die ID des Archives mit $this->pid ausgegeben, daraus kannst du dir ne Klasse basteln.
    Das hier
    PHP-Code:
    <div class="layout_short block<?php echo $this->class?>">
    ändern nach
    PHP-Code:
    <div class="layout_short block<?php echo $this->class.' archive_'.$this->pid?>">
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  8. #8
    Contao-Nutzer Avatar von Hagord
    Registriert seit
    18.08.2010.
    Ort
    Berlin
    Beiträge
    142

    Standard

    Ich hab's gerade noch mal probiert. Richtig, die Klasse, die ich dem Lesermodul direkt im Modules-Bereich beim Anlegen verpasse, kommt nicht durch. Aber die Klasse, die man der Instanz dieses Moduls in einem Artikel gibt, kommt im HTML an. Alles in allem leider auch nur eine Krücke. Das Template news_full.html5, genauer seine erste Quelltextzeile, scheint der richtige Ort zu sein, um die Klasse zusammenzubasteln. $this->showTemplateVars(); zeigt, dass hier neben der ID des Archivs auch sein Name zur Verfügung steht:

    PHP-Code:
    Array
    (
        [
    id] => 1
        
    [pid] => 1
        
    ...
        [
    archive] => Contao\NewsArchiveModel Object
            
    (
                [
    arrData:protected] => Array
                    (
                        [
    id] => 1
                        
    ...
                        [
    title] => Testarchiv 
    Bei ausführlicheren Archiv-Namen kämen jedoch etwas unhandliche Klassenbezeichnungen heraus. Man könnte auch mit einer Lookup-Tabelle zu besseren Klassenbezeichnungen kommen - ID oder Archivname rein, bessere Klassenbezeichnung raus. Aber das hätte zur Folge, dass die Tabelle bei jedem neu angelegten Archiv nachgepflegt werden müsste. Und schnell hat der Redakteur mal vergessen bescheidzusagen.

    Mein Vorschlag an die Entwickler: Die Vergabe einer Klasse direkt ans Archiv und ihre Weitergabe an alle seine Beiträge - falls nicht längst auf dem Plan

    Gruß, Hagord

    p.s. Der Vorschlag

    PHP-Code:
    $this->class.' archive_'.$this->pid
    ist natürlich machbar. Ich versuche jedoch, so weit es geht, die Semantik in Ordnung zu halten.
    Geändert von Hagord (25.09.2012 um 00:08 Uhr)

  9. #9
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.703
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Zitat Zitat von Hagord Beitrag anzeigen
    ...
    p.s. Der Vorschlag

    PHP-Code:
    $this->class.' archive_'.$this->pid
    ist natürlich machbar. Ich versuche jedoch, so weit es geht, die Semantik in Ordnung zu halten.
    Damit berührst du die Semantik nicht.
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  10. #10
    Contao-Nutzer Avatar von Hagord
    Registriert seit
    18.08.2010.
    Ort
    Berlin
    Beiträge
    142

    Standard

    Habe mich mal in Leos Contao-Buch belesen (S. 333ff.) und schon erreicht, dass einem Archiv eine Klasse vergeben werden kann: archiv.png

    1. Modulordner inkl. Unterordner erstellt (x_, damit es hinter allen anderen modules-Ordnern steht)
    /system/modules/x_archive_class
    /system/modules/x_archive_class/config
    /system/modules/x_archive_class/dca
    /system/modules/x_archive_class/languages/de

    2. Datenbank erweitert
    Datei database.sql im config-Verzeichnis erstellt:
    PHP-Code:
    CREATE TABLE `tl_news_archive` (
      `
    cssClassvarchar(255NOT NULL default ''
    ENGINE=MyISAM DEFAULT CHARSET=utf8
    Anschließend das Installtool gestartet, um das Feld anzulegen - o.k.

    3. DCA-Konfiguration
    3.1 Erweiterung der Standardpalette
    Datei tl_news_archive.php im dca-Verzeichnis erstellt:
    PHP-Code:
    $GLOBALS['TL_DCA']['tl_news_archive']['palettes']['default'] = str_replace
    (
       
    'allowComments',
       
    'allowComments; {expert_legend:hide}, cssClass',
       
    $GLOBALS['TL_DCA']['tl_news_archive']['palettes']['default']
    ); 
    3.2 Hinzufügen des Datenbankfeldes
    PHP-Code:
    $GLOBALS['TL_DCA']['tl_news_archive']['fields']['cssClass'] = array
    (
       
    'label'     => &$GLOBALS['TL_LANG']['tl_news_archive']['cssClass'],
       
    'exclude'   => true,
       
    'inputType' => 'text'
    ); 
    4. Übersetzung hinzugefügt
    Datei tl_news_archive.php im languages/de-Verzeichnis erstellt:
    PHP-Code:
    $GLOBALS['TL_LANG']['tl_news_archive']['cssClass'] = array('CSS-Klasse''Hier können Sie eine oder mehrere Klassen eingeben.'); 
    Bis hierher hat alles geklappt: Ich kann einem Archiv eine Klasse zuordnen und diese wird auch in der Datenbank korrekt gespeichert. Es bleiben zwei Probleme:

    1. {expert_legend:hide} (s. 3.1) wird als "expert_legend" ausgegeben und nicht als "Experten-Einstellungen", :hide hingegen funktioniert.
    2. Ich weiß nicht, was ich nun tun muss, damit der Klassen-Wert aus der Tabelle auch am Beitrag zur Verfügung steht. Der Test mit <?php $this->showTemplateVars(); ?> hat gezeigt, dass dies nicht so einfach automatisch passiert.

    Schon mal Danke im Voraus.
    Hagord

    p.s.
    Anschließend will ich den parseFrontendTemplate-Hook benutzen, um die news_full.html5 um die Ausgabe der Archivklasse zu ergänzen. Liege ich da richtig?
    Geändert von Hagord (27.09.2012 um 14:57 Uhr)

  11. #11
    Contao-Nutzer Avatar von Hagord
    Registriert seit
    18.08.2010.
    Ort
    Berlin
    Beiträge
    142

    Standard

    Mein Dank geht an Kamil Kuzminski! Mit Hilfe seiner hervorragenden Einführung konnte ich mir jetzt die grundlegenden Zusammenhänge in Sachen Extension-Erstellung erschließen - habe leider Ninas "Infoquellen für Contao-Entwickler" erst etwas spät endeckt.

    Doch für die Lösung des Problems der Archivklasse reicht das - wie ich es sehe - noch nicht aus, denn letztendlich soll es der Contao-Newsreader sein, der die Klasse dem entsprechenden Template, z.B. news_full.html5 in der System- oder der angepassten Version, zur Verfügung stellt. Und da fehlen mir im Augenblick noch die Kenntnisse über die grundlegenden Zusammenhänge im Contao-System.

    Interessant wäre für mich z.B. einmal zu erfahren, über welchen Weg (über welche Objekte und Funktionen) eine Klassenbezeichnung aus dem cssClass-Feld eines Datensatzes der tl_news-Tabelle es bis in die <?php echo $this->class; ?>-Anweisung der news_full.html5 schafft.

    Oder gibt es Entwicklertools, die mir dabei helfen könnten, es selbst herauszufinden?

    Gruss, Hagord

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
  •