Newsreader: News und Kommentare in verschiedenen Layoutbereichen

Einklappen
X
 
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • Jens Pielawa
    Contao-Fan
    • 08.01.2010
    • 546

    #16
    Hmmmm... ich bin kein PHP-Programmierer und habe mich jetzt gaaaanz langsam durch das Modul mod_newsreader.html5 rangetastet und mit den erwähnten IF-Aufrufen versucht, die "damals" eingesetzen Stellen ebenfalls dort einzubringen. Klappt bei mir nicht ganz, es erscheint nur der Kommentarblock.
    Ich bin den Code jetzt fünfmal sehr genau vergleichend durchgegangen und meine, nichts übersehen zu haben. Vielleicht schaut mal ein PHP-Kenner auf meinen Code, was da noch fehlen könnte:

    PHP-Code:
    <div class="nachrichtenleser block<?php echo $this->class; ?>">
    
    <h2><?php echo $this->newsHeadline; ?></h2>
    <?php if ($this->hasMetaFields): ?>
    
    <p class="info">Beitrag vom <?php echo $this->date; ?> · <?php echo $this->author; ?> <?php echo $this->commentCount; ?></p>
    <?php endif; ?>
    <?php if ($this->hasSubHeadline): ?>
    
    <h3 class="subheadline"><?php echo $this->subHeadline; ?></h3>
    <?php endif; ?>
    
    <div class="ce_text">
    <?php if (!$this->addBefore): ?>
    
    <?php echo $this->text; ?>
    <?php endif; ?>
    <?php if ($this->addImage): ?>
    
    <div class="image_container<?php echo $this->floatClass; ?>"<?php if ($this->margin || $this->float): ?> style="<?php echo trim($this->margin . $this->float); ?>"<?php endif; ?>>
    <?php if ($this->href): ?>
    <a href="<?php echo $this->href; ?>"<?php echo $this->attributes; ?> title="<?php echo $this->alt; ?>">
    <?php endif; ?>
    <img src="<?php echo $this->src; ?>" alt="<?php echo $this->alt; ?>" />
    <?php if ($this->href): ?>
    </a>
    <?php endif; ?>
    <?php if ($this->caption): ?>
    <div class="caption"><?php echo $this->caption; ?></div>
    <?php endif; ?>
    </div>
    <?php endif; ?>
    <?php if ($this->addBefore): ?>
    
    <?php echo $this->text; ?>
    <?php endif; ?>
    
    </div>
    <?php if ($this->enclosure): ?>
    
    <div class="enclosure">
    <?php foreach ($this->enclosure as $enclosure): ?>
    <p><img src="<?php echo $enclosure['icon']; ?>" width="18" height="18" alt="<?php echo $enclosure['title']; ?>" class="mime_icon" /> <a href="<?php echo $enclosure['href']; ?>" title="<?php echo $enclosure['title']; ?>"><?php echo $enclosure['link']; ?> <span class="size">(<?php echo $enclosure['filesize']; ?>)</span></a></p>
    <?php endforeach; ?>
    </div>
    <?php endif; ?>
    <div class="clear"></div>
    <?php if ($this->addGallery):
        $objGallery = new NewsGallery($this);
        echo $objGallery->generate();
    endif; ?>
    
    </div>
    P.S.: Klar habe zwei Newsreader angelegt, einen für die Hauptspalte und einen für die rechte Spalte mit den jeweiligen CSS-Klassen.

    Edit: Tippfehler in der CSS-Klasse, jetzt funktioniert es – aber umgekehrt, Kommetar in Haupt, News in rechts... Hihihi. Siehe Beispiel:

    Ich denke, dann muss ich wohl mal die CSS-Klassen in den neuen IF-Befehlen tauschen...
    Nochmal Edit: jawoll, die CSS-Klassen entgegen seiner ursprünglichen Bedeutung getauscht, jetzt klappt es mit den Bereichen.
    Warum aber weiß ich auch nicht so genau...
    Zuletzt geändert von Jens Pielawa; 10.10.2012, 21:12.
    Beste Grüße von
    sigpic

    Kommentar

    • Andreas
      Contao-Urgestein
      • 19.06.2009
      • 7709

      #17
      Dein geposteter Code hat nichts mit mod_newsreader zu tun. Es sind auch keine IF-Anweisungen bez. der Klasse drin.

      Was du wissen solltest ist das hier:
      PHP-Code:
      <?php if (Bedingung): ?>
      Ausgabe wenn Bedingung erfüllt
      <?php endif; ?>
      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

      Kommentar

      • Jens Pielawa
        Contao-Fan
        • 08.01.2010
        • 546

        #18
        Zwei Jahre später besteht erneut das Problem, dass ich kein ausgebildeter PHP-Programmierer bin. Die mod_newsreader.html5 sieht unter Contao 3.3.5 sehr übersichtlich aus:

        PHP-Code:
        <?php $this->extend('block_searchable'); ?>
        
        <?php $this->block('content'); ?>
        
          <?php echo $this->articles; ?>
        
          <!-- indexer::stop -->
          <p class="back"><a href="<?php echo $this->referer; ?>" title="<?php echo $this->back; ?>"><?php echo $this->back; ?></a></p>
          <!-- indexer::continue -->
        
          <?php if ($this->allowComments && ($this->comments || !$this->requireLogin)): ?>
            <div class="ce_comments block">
              <<?php echo $this->hlc; ?>><?php echo $this->addComment; ?></<?php echo $this->hlc; ?>>
              <?php echo implode('', $this->comments); ?>
              <?php echo $this->pagination; ?>
              <?php include $this->getTemplate('mod_comment_form', 'html5'); ?>
            </div>
          <?php endif; ?>
        
        <?php $this->endblock(); ?>
        Dennoch habe ich in mehreren Versuchen vergeblich versucht, die oben schon öfters angesetzten "Scheren" anzusetzen und die Blöcke "news-only" und "comments-only" hier zu separieren. Das Beispiel unter http://www.soundfile-music.com/news-...icht-2014.html zeigt, dass der Newsreader und die Klassen gesetzt sind. Nun sollen links nur die News und rechts nur die Kommentare zu sehen sein. Wer kann da bitte diese Sägerei (anhand des Beispiels von Contao 2.11) modernisieren?
        Zuletzt geändert von Jens Pielawa; 02.10.2014, 22:11.
        Beste Grüße von
        sigpic

        Kommentar

        • Andreas
          Contao-Urgestein
          • 19.06.2009
          • 7709

          #19
          1. Da war ein Fehler in #15. Ich habe ihn oben korrigiert. Es fehlte ein "!" (Nicht). Und die Logik ist nicht so einfach zu erkennen, da unter der comments-Abfrage die News ausgegeben wird und unter der news-Abfrage die Comments.

          2. Für Contao 3.3.5 ist das jetzt sehr einfach, man benötigt das Obige nicht mehr. Man kann für die verschiedenen Ausgabemodule eigene Templates erstellen und im Modul auswählen.

          Template mod_newsreader "kommentiert"
          PHP-Code:
          <?php $this->extend('block_searchable'); ?>
          
          <?php $this->block('content'); ?>
          
          <!-- Nächste Zeile gibt die News aus -->
            <?php echo $this->articles; ?>
          
            <!-- indexer::stop -->
          <!-- Nächste Zeile gibt den Backlink aus -->
            <p class="back"><a href="<?php echo $this->referer; ?>" title="<?php echo $this->back; ?>"><?php echo $this->back; ?></a></p>
            <!-- indexer::continue -->
          
            <?php if ($this->allowComments && ($this->comments || !$this->requireLogin)): ?>
          <!-- Nächster DIV gibt die Kommentare und das Formular aus -->
              <div class="ce_comments block">
          <!-- Überschrift -->
                <<?php echo $this->hlc; ?>><?php echo $this->addComment; ?></<?php echo $this->hlc; ?>>
          <!-- Comments -->
                <?php echo implode('', $this->comments); ?>
          <!-- Pagination -->
                <?php echo $this->pagination; ?>
          <!-- Formular -->
                <?php include $this->getTemplate('mod_comment_form', 'html5'); ?>
              </div>
            <?php endif; ?>
          
          <?php $this->endblock(); ?>
          Einfach die nicht benötigten Teile aus den Templates entfernen.
          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

          Kommentar

          • Jens Pielawa
            Contao-Fan
            • 08.01.2010
            • 546

            #20
            Das Zersägen der mod_newsreader.html5 klingt verheißungsvoll und einfach – kapiere ich dennoch nicht... Wenn ich früher ein neues Modul "Nachrichtenleser" anlege, was ich einbinden muss (zweimal sozusagen), wurde das in den vorigen IF-Zerteilungen mittels CSS-Klassen zerlegt und damit auch zusammengehalten.
            Wie aber kann ich die zugrundeliegende mod_newsreader.html5, die dann offenbar zweimal existieren muss, einbinden, und vor allen Dingen wo? Wenn ich ein Modul anlege, bietet es mir als Nachrichtentemplates nur solche mit "news_*" an. Ich stelle mir auch die Frage, ob zwei veränderte mod_newsreader noch "voneinander wissen"...
            Ich würde eine Zerlegung einer mod_newsreader.html5 mittel IF-Stellungen und CSS bevorzugen und stelle mir das einfacher zum Einbinden vor.

            EDIT: Ich hab's geschafft (war für mich neu in Contao 3.3).
            Ich habe ein Modul "Nachrichtenleser news-only" und "Nachrichtenleser comments-only" angelegt sowie wie oben beschrieben zwei Templates "mod_newsreader_news-only.html5" und "mod_newsreader_comments-only.html5", natürlich basierend auf der originalen "mod_newsreader". Hier habe ich jeweils im Quelltext herausgenommen, was ich NICHT brauchte (wie oben beschrieben, ist ja mittlerweile auch sehr übersichtlich). Der Kniff besteht nun darin, in den beiden Modulen (für mich neu) nicht nur ein "Nachrichtentemplate" zu wählen, sondern gleich daneben ein "Individuelles Template"... Hier landen die selbst gebastelteten Templates und voilá – ohne viel IF und Wenn und Aber zerteilt sich die Nachricht in News und Kommentaren in unterschiedlichen Layoutbereichen.
            Zuletzt geändert von Jens Pielawa; 05.10.2014, 11:19.
            Beste Grüße von
            sigpic

            Kommentar

            • Andreas
              Contao-Urgestein
              • 19.06.2009
              • 7709

              #21
              Hast du genau richtig gemacht, auch mit den zwei neu erstellten und umbenannten Templates. So hast du immer noch das original Template zur Verfügung. Die Option wurde irgendwann auf Userwunsch hinzugefügt, damit man auch die Möglichkeit hat ein mod_-Template individuell anzupassen und umzubenennen. Mit der CSS-Klassenabfrage musste man praktisch mehrere Templates in einem zur Verfügung stellen und anhand der CSS-Klasse ausliefern.
              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

              Kommentar

              • Jens Pielawa
                Contao-Fan
                • 08.01.2010
                • 546

                #22
                Man lernt halt immer was dazu.
                Beste Grüße von
                sigpic

                Kommentar

                • Hoch-3
                  Contao-Fan
                  • 16.11.2010
                  • 373

                  #23
                  Das Template mod_newsreader hab ich kopiert und so abgeändert.

                  PHP-Code:
                  <?php $this->extend('block_searchable'); ?>
                  
                  <?php $this->block('content'); ?>
                  <?php   if(in_array('right', explode(' ', $this->class))): ?>
                    <?= $this->articles ?>
                  
                  <?php endif; ?>
                    
                    
                  
                  <?php $this->endblock(); ?>
                  Es sollen nur die Elemente mit der Class "right" ausgegeben werden. Aber das funzt nicht. Kann jemand weiter helfen?

                  Kommentar

                  • Spooky
                    Community-Moderator
                    Wandelndes Contao-Lexikon
                    • 12.04.2012
                    • 38811

                    #24
                    Mit dieser Überprüfung:
                    PHP-Code:
                    <?php   if(in_array('right', explode(' ', $this->class))): ?>
                    überprüfst du nur, ob das Newsleser-Modul eine Klasse namens "right" besitzt. Das was du möchstest, ist nur mit einem angepassten news_full Template möglich, wo du manuell die Inhaltselemente aus der Datenbank holst.
                    » sponsor me via GitHub or Revolut

                    Kommentar

                    • Hoch-3
                      Contao-Fan
                      • 16.11.2010
                      • 373

                      #25
                      Also das Original mod_newslist und ein folgendermassen angepasstes news_full...

                      PHP-Code:
                      <div class="layout_full block<?= $this->class ?>">
                          
                       <?php   if(in_array('right', explode(' ', $this->class))): ?> 
                          <?= $this->text ?>
                        <?php endif; ?>
                      
                      </div>
                      Hab ich da zu viel weg gelöscht? Tut auf alle Fälle auch nicht.

                      Kommentar

                      • Spooky
                        Community-Moderator
                        Wandelndes Contao-Lexikon
                        • 12.04.2012
                        • 38811

                        #26
                        Nein, das reicht nicht, da fragst du jetzt ab, ob die angezeigte News die Klasse "right" hat . Du müsstest dir dort im Template nun die einzelnen Inhaltselemente holen und überprüfen, ob das einzelne Inhaltselement die Klasse "right" hat.
                        » sponsor me via GitHub or Revolut

                        Kommentar

                        • Hoch-3
                          Contao-Fan
                          • 16.11.2010
                          • 373

                          #27
                          Zitat von Spooky Beitrag anzeigen
                          Nein, das reicht nicht, da fragst du jetzt ab, ob die angezeigte News die Klasse "right" hat . Du müsstest dir dort im Template nun die einzelnen Inhaltselemente holen und überprüfen, ob das einzelne Inhaltselement die Klasse "right" hat.
                          Nicht die News sondern das Element innerhalb der News soll abgefragt werden. Ich könnte das ja mit einem profanen Display: None in der Ausgabe lösen. Dann lädt es aber unnötig Inhalte.

                          Kommentar

                          • Spooky
                            Community-Moderator
                            Wandelndes Contao-Lexikon
                            • 12.04.2012
                            • 38811

                            #28
                            Zitat von Hoch-3 Beitrag anzeigen
                            Nicht die News sondern das Element innerhalb der News soll abgefragt werden.
                            Ja ich weiß, siehe mein voriger Post. Deine jetztige Abfrage geht auf die News, nicht auf die Inhaltselemente der News. Du musst dir aus der Datenbank die Inhaltselemente manuell selbst holen und dort dann die Abfrage machen - oder gleich bei der Datenbankabfrage nur die Inhaltselemente der News holen, die schon '%right%' in der Spalte cssID drin stehen haben.
                            » sponsor me via GitHub or Revolut

                            Kommentar

                            • Hoch-3
                              Contao-Fan
                              • 16.11.2010
                              • 373

                              #29
                              Jetzt verstehe ich gar nichts mehr.

                              Die Daten werden doch irgendwo (im DCA-Ordner des Moduls wären, wenn ich das richtig verstanden habe, die Files dazu) aus der DB rausgeholt.
                              Bei den News müssten da doch die Inhalte, also auch die Elemente der Nachricht rausgeholt werden.
                              In den Templates werden diese dann zusammen gesetzt. Eine der Informationen, die hier mit läuft müsste ja die CSS-Class des einzelnen Elementes sein. Oder?
                              Gibt es tatsächlich keine Möglichkeit, diese auf Template-Ebene auszulesen?

                              Kommentar

                              • Spooky
                                Community-Moderator
                                Wandelndes Contao-Lexikon
                                • 12.04.2012
                                • 38811

                                #30
                                Zitat von Hoch-3 Beitrag anzeigen
                                In den Templates werden diese dann zusammen gesetzt.
                                Nein, im News Template hast du nur mehr die schon geparsten und zusammengefügten Inhaltselemente. Daher musst du dir die Inhaltselemente im Template selbst aus der Datenbank laden. Die Funktion zum Laden der Inhaltselemte sieht im News Modul zB so aus: https://github.com/contao/core/blob/...eNews.php#L135

                                Übrigens solltest du eher einen eigenen Thread dafür machen, hier geht es ja um die Trennung von News und Kommentare .
                                Zuletzt geändert von Spooky; 16.06.2016, 18:34.
                                » sponsor me via GitHub or Revolut

                                Kommentar

                                Lädt...