Ergebnis 1 bis 17 von 17

Thema: Kommentarfunktion / Nummerierung

  1. #1
    Contao-Nutzer
    Registriert seit
    31.01.2010.
    Beiträge
    53

    Standard Kommentarfunktion / Nummerierung

    Hallo,
    ich benutze die Kommentarfunktion als Gästbuch.
    Habs farblich angepasst usw. das passt also. Hatte auch mal dieses Guestbook ausprobiert war aber nicht der Renner.
    Nun wäre es aber ganz interessant zu wissen wie viele Einträge schon geschrieben wurden.
    Gibt es eine Möglichkeite die Einträge durch zu nummerieren?
    Grüße, Mr. Burns

  2. #2
    Contao-Nutzer
    Registriert seit
    19.06.2009.
    Ort
    Allgäu
    Beiträge
    92

    Standard

    hi,
    falls das bei dir noch aktuell ist und du mehr die anzahl ansich als eine nummerierung brauchst - hiermit funzt das recht flott....
    http://www.contao-community.de/showt...ght=#post62712

  3. #3
    Contao-Nutzer Avatar von Thorsten
    Registriert seit
    21.06.2009.
    Ort
    Kiel
    Beiträge
    85

    Standard

    Ich hänge mich mal hier mit dran, da ich ähnliches erreichen möchte.

    Ich möchte die Kommentare durchnummerieren und zwar absteigend, da die Sortierung der Kommentare so eingestellt ist.

    99 - Ein Kommentar
    98 - Ein Kommentar
    97 - Ein Kommentar

    Zusätzlich gibt es eine Paginierung, die berücksichtigt werden muss.

    Habe hier bereits die Suche bemüht, aber bislang nichts passendes gefunden. Einträge im alten Forum zum Thema werden mir hier leider nur als weiße Seite ausgegeben.

    Bin über Hinweise dankbar.

    Edit: Habe zwischeinzeitlich weiter geschaut und testweise per TemplateVariable $this->id die Kommentar-ID abgefragt und dann ausgegeben. Das funktioniert zwar prinzipiell, hat aber den entscheidenden Nachteil, dass die Nummierung nicht mehr fortlaufend ist, sobald ein oder mehrere Kommentare gelöscht wurden. Ich probier's mal mit einem eigenen Zähler.
    Geändert von Thorsten (02.01.2012 um 16:07 Uhr)
    Freundliche Grüße

    - Thorsten

  4. #4
    Contao-Nutzer Avatar von Thorsten
    Registriert seit
    21.06.2009.
    Ort
    Kiel
    Beiträge
    85

    Standard

    Ich bin jetzt mit der DB-Abfrage für die Gesamtzahl der Kommentare soweit:

    PHP-Code:
    <?php
    $this
    ->import('Database');
    $result $this->Database->prepare("SELECT COUNT(*) FROM tl_comments")->execute();
    echo 
    $result;
    ?>
    Erhalte diesen Ausstoß:

    PHP-Code:
    Recoverable errorObject of class DB_Mysql_Result could not be converted to string.
    #0 /.../html/contao/templates/.../com_default.xhtml(15): __error(4096, 'Object of class...', '/var/www/virtua...', 15, Array)
    #1 /.../html/contao/system/libraries/Template.php(246): include('/var/www/virtua...')
    #2 /.../html/contao/system/modules/frontend/FrontendTemplate.php(49): Template->parse()
    #3 /.../html/contao/system/modules/comments/Comments.php(139): FrontendTemplate->parse()
    #4 /.../html/contao/system/modules/comments/ContentComments.php(85): Comments->addCommentsToTemplate(Object(FrontendTemplate), Object(stdClass), 'tl_content', '85', '...')
    #5 /.../html/contao/system/modules/frontend/ContentElement.php(139): ContentComments->compile()
    #6 /.../html/contao/system/modules/comments/ContentComments.php(65): ContentElement->generate()
    #7 /.../html/contao/system/libraries/Controller.php(489): ContentComments->generate()
    #8 /.../html/contao/system/modules/frontend/ModuleArticle.php(193): Controller->getContentElement('85')
    #9 /.../html/contao/system/modules/frontend/Module.php(140): ModuleArticle->compile()
    #10 /.../html/contao/system/modules/frontend/ModuleArticle.php(71): Module->generate()
    #11 /.../html/contao/system/libraries/Controller.php(421): ModuleArticle->generate(false)
    #12 /.../html/contao/system/libraries/Controller.php(294): Controller->getArticle('33', false, false, 'main')
    #13 /.../html/contao/system/modules/frontend/PageRegular.php(100): Controller->getFrontendModule('0', 'main')
    #14 /.../html/contao/index.php(200): PageRegular->generate(Object(DB_Mysql_Result))
    #15 /.../html/contao/index.php(319): Index->run()
    #16 {main} 
    Freundliche Grüße

    - Thorsten

  5. #5
    Contao-Urgestein Avatar von do_while
    Registriert seit
    15.06.2009.
    Ort
    Berlin | Deutschland
    Beiträge
    3.614
    Partner-ID
    1081
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Probiere es mal so:
    PHP-Code:
    <?php
    $this
    ->import('Database');
    $objComments $this->Database->prepare("SELECT COUNT(*) AS anzahl FROM tl_comments")->execute();
    echo 
    $objComments->anzahl;
    ?>

  6. #6
    Contao-Nutzer Avatar von Thorsten
    Registriert seit
    21.06.2009.
    Ort
    Kiel
    Beiträge
    85

    Standard

    Danke Hagen,

    das funktioniert. Die nächste Frage für mich ist, wo ich den Zähler (möglichst updatesicher) einbaue. Mir fehlt da sicherlich noch eine bestimmte Denke.

    Ich kann über die com_default-Templatedatei die Gesamtzahl in jeden Kommentar einfügen, das ist kein Problem. Wenn ich da eine while-Schleife mit Zähler einbaue, zählt das in jedem Kommentar logischerweise den Zähler herunter, obwohl ich immer nur die "aktuelle" Zählerzahl des Durchlaufs brauche.

    Ich probiere gerade herum, ob ich den Zähler in die ce_comments-Templatedatei hineinbekomme und dann in der com_default-Templatedatei nur die aktuelle Zahl ausgeben kann, bislang klappt's nicht.

    Ist das eine richtige Herangehensweise? Wie würdet Ihr das machen? Bin ich eventuell an ganz falscher Stelle?
    Freundliche Grüße

    - Thorsten

  7. #7
    Contao-Nutzer Avatar von Thorsten
    Registriert seit
    21.06.2009.
    Ort
    Kiel
    Beiträge
    85

    Standard

    Hat niemand einen Tipp für mich?
    Freundliche Grüße

    - Thorsten

  8. #8
    Contao-Urgestein Avatar von do_while
    Registriert seit
    15.06.2009.
    Ort
    Berlin | Deutschland
    Beiträge
    3.614
    Partner-ID
    1081
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Hallo Thorsten,

    da man ja nie die Original-Templatedatei verändert, sondern die Änderungen immer an einer Kopie des Templates im templates-Verzeichnis vornimmt, ist es automatisch updatesicher. Das einizige ist, dass man nach jedem Contao-Update noch kontrollieren muss, ob sich das Original in der Struktur verändert hat, dann muss man diese Neuerungen natürlich im eigenen Template nachführen, sonst kann es im Frontend zu merkwürdigen Effekten kommen.

    Die Frage mit den Zählern verstehe ich nicht ganz:
    1) im com_default brauchst Du nur die Gesamtanzahl, dann benutze dort die Datenbankabfrage
    2) im ce_comments hast Du eine while-Zählschleife eingebaut, die doch die entsprechende Zahl liefert.
    Es muss doch übereinstimmen, wenn die Kommenare und der Gesamtzahl mit gleichen Bedingungen aus der Datenbank abgefragt werden. Ich kann mir allerdings vorstellen, dass im Count auch die nicht veröffentlichten Kommentare mitgezählt werden, die bei der Auflistung aber fehlen, dann musst Du halt die Datenbankabfrage mit den Bedingungen auch so einrichten.

  9. #9
    Contao-Nutzer Avatar von Thorsten
    Registriert seit
    21.06.2009.
    Ort
    Kiel
    Beiträge
    85

    Standard

    Hi Hagen,

    Zitat Zitat von do_while Beitrag anzeigen
    da man ja nie die Original-Templatedatei verändert, sondern die Änderungen immer an einer Kopie des Templates im templates-Verzeichnis vornimmt, ist es automatisch updatesicher. Das einizige ist, dass man nach jedem Contao-Update noch kontrollieren muss, ob sich das Original in der Struktur verändert hat, dann muss man diese Neuerungen natürlich im eigenen Template nachführen, sonst kann es im Frontend zu merkwürdigen Effekten kommen.
    Klar, das mache ich auch so.

    Zitat Zitat von do_while Beitrag anzeigen
    Die Frage mit den Zählern verstehe ich nicht ganz:
    1) im com_default brauchst Du nur die Gesamtanzahl, dann benutze dort die Datenbankabfrage
    Das ist auch klar, war nicht gut von mir formuliert. Ich hatte testweise die Gesamtzahl der Kommentare in die ce_comments eingefügt. Probleme gab's erst später mit der Schleife. Sieh' bitte weiter unten.

    Zitat Zitat von do_while Beitrag anzeigen
    2) im ce_comments hast Du eine while-Zählschleife eingebaut, die doch die entsprechende Zahl liefert.
    Es muss doch übereinstimmen, wenn die Kommenare und der Gesamtzahl mit gleichen Bedingungen aus der Datenbank abgefragt werden. Ich kann mir allerdings vorstellen, dass im Count auch die nicht veröffentlichten Kommentare mitgezählt werden, die bei der Auflistung aber fehlen, dann musst Du halt die Datenbankabfrage mit den Bedingungen auch so einrichten.
    Die while-Schleife liefert eben leider nicht die entsprechende Zahl. Es wird pro Kommentar nicht die aktuelle Zahl eingefügt, sondern alle Zahlen herunter gezählt: bei 5 Kommentaren steht in jedem Kommentar "54321", nicht zum Beispiel nur "4".

    Ich ergänze hier morgen meine Schleife in einem Auszug meiner ce_comments, ich bin für den Rest des Tages nicht im Haus.

    Danke für den Tipp mit den unveröffentlichten Kommentaren, ich teste das mal.

    Schönen Samstag.
    Freundliche Grüße

    - Thorsten

  10. #10
    Contao-Nutzer Avatar von Thorsten
    Registriert seit
    21.06.2009.
    Ort
    Kiel
    Beiträge
    85

    Standard

    Okay,

    hier der Auszug aus der com_default:

    PHP-Code:
    <!-- Gesamtzahl der Kommentare auslesen -->
    <?php
    $this
    ->import('Database');
    $objComments $this->Database->prepare("SELECT COUNT(*) AS anzahl FROM tl_comments")->execute();
    $kommentarZahl $objComments->anzahl;
    echo 
    "Gesamtzahl Kommentare: " $kommentarZahl " -- ";
    ?>

    <!-- Für jeden Durchlauf die Nummer des Kommentars ausrechnen und anzeigen -->
    <?php
      $z 
    $kommentarZahl-1;  
      while (
    $z >= 0) {
        echo 
    $kommentarZahl $z;
        
    $z--;
      }
    ?>
    Ausgabe, wenn alle Kommentare veröffentlicht sind:

    Code:
    Gesamtzahl Kommentare: 5 -- 12345
    Kommentar von Thorsten | 02.01.2012
    Test für Nummerierung.
    Ich hatte die while-Schleife nochmal umgeschrieben, sollte für das Grundproblem aber relativ uninteressant sein. Kann ich später immer noch ändern, wenn ich herausgefunden habe, wie Contao bei paginierten Inhalten vorgeht und wie ich die aktuelle Kommentarzahl in die einzelnen Kommentare bekomme.


    Zur Problematik bei unveröffentlichten Kommentaren

    Ausgabe, wenn es auch einen unveröffentlichten Kommentar gibt:

    Code:
    Gesamtzahl Kommentare: 6 -- 123456
    Kommentar von Thorsten | 02.01.2012
    Test für Nummerierung.
    Wenn ich mir die Tabelle tl_comments anschaue, sehe ich keine Spalte, die den Veröffentlichungsstatus angibt, wüsste also nicht, wie ich da in der Tabelle prüfen sollte. Die Tabellenspalten sind id, tstamp , source, parent, name, email, website, comment. Ich schau, ob ich den Status sonstwie abrufen kann.
    Geändert von Thorsten (08.01.2012 um 14:50 Uhr) Grund: Falsche Template-Datei genommen, es muss "com_default" sein
    Freundliche Grüße

    - Thorsten

  11. #11
    Contao-Urgestein Avatar von do_while
    Registriert seit
    15.06.2009.
    Ort
    Berlin | Deutschland
    Beiträge
    3.614
    Partner-ID
    1081
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Hallo Thorsten,

    wenn Du eine Zählschleife baust, wo immer nur der Zähler ausgegeben wird, dann kommt das auch so raus.

    Ich habe mir mal eine Demo aufgesetzt um das auch mal in der Praxis auszuprobieren.
    Hier ist meine ce_comments.html5:

    HTML-Code:
    <?php
    $this->import('Database');
    $objComments = $this->Database->prepare("SELECT COUNT(*) AS anzahl FROM tl_comments WHERE published=1 AND parent=?")->execute($this->id);
    ?>
    
    <div class="<?php echo $this->class; ?> block"<?php echo $this->cssID; ?><?php if ($this->style): ?> style="<?php echo $this->style; ?>"<?php endif; ?>>
    <?php if ($this->headline): ?>
    
    <<?php echo $this->hl; ?>><?php echo $this->headline; ?></<?php echo $this->hl; ?>>
    <?php endif; ?>
    <?php
      $cnt = 1;
      foreach ($this->comments as $comment) {
        echo 'Kommentar ' . $cnt . ' von ' . $objComments->anzahl . '<br>';
        echo $comment;
        $cnt++;
      }
    ?>
    <?php echo $this->pagination; ?>
    <?php if (!$this->requireLogin): ?>
    
      .
      .
      .
    Zur Erklärung:
    • Oben der php-Teil ist zum Abfragen der Gesamtzahl, ich musste noch eine WHERE-Klausel ergänzen, damit nur die Kommentare dieser Seite gezählt werden und die unveröffentlichten nicht mitgezählt werden.
    • Die Zeile mit dem foreach gibt die einzelnen Kommentare aus, die wurde also etwas erweitert mit einer Zählvariablen. Wegen der Übersicht habe ich den Bereich in mehrere Zeilen zerlegt.
    • Zu klären wäre jetzt nur noch, wie das mit der Pagination zusammenspielt, denn dann hat ja der 1. Kommentar nicht mehr die Nummer 1.

  12. #12
    Contao-Nutzer Avatar von Thorsten
    Registriert seit
    21.06.2009.
    Ort
    Kiel
    Beiträge
    85

    Standard

    Hallo Hagen,

    zunächst vielen Dank für Deine Hilfe, die Nummerierung an sich funktioniert so super. Ich hab's jetzt so umgemodelt, dass von der Gesamtzahl an heruntergezählt wird, da die Sortierung der Kommentare auf absteigend eingestellt ist. Nummer des ersten Kommentars = Gesamtzahl, Nummer des zweiten Kommentars = Gesamtzahl - 1, etc. Funktioniert soweit.

    PHP-Code:
    <?php
      $cnt 
    $objComments->anzahl;
      
      foreach (
    $this->comments as $comment) {
        echo 
    'Kommentar ' $cnt ' von ' $objComments->anzahl '<br />';
        echo 
    $comment;
        
    $cnt--;
      }
    ?>
    Zitat Zitat von do_while Beitrag anzeigen
    Zur Erklärung:
    • Zu klären wäre jetzt nur noch, wie das mit der Pagination zusammenspielt, denn dann hat ja der 1. Kommentar nicht mehr die Nummer 1.
    Ja, der Zähler beginnt auf jeder Seite erneut von der Gesamtzahl an herunterzurechnen. Hier bei insgesamt 6 Kommentaren und maximal 4 Einträgen pro Seite: 6-5-4, 6-5-4.
    Geändert von Thorsten (08.01.2012 um 15:54 Uhr) Grund: foreach-Schleife vereinfacht
    Freundliche Grüße

    - Thorsten

  13. #13
    Contao-Urgestein Avatar von do_while
    Registriert seit
    15.06.2009.
    Ort
    Berlin | Deutschland
    Beiträge
    3.614
    Partner-ID
    1081
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    noch einmal nachgelegt:
    HTML-Code:
    <?php
    $this->import('Database');
    $objComments = $this->Database->prepare("SELECT COUNT(*) AS anzahl FROM tl_comments WHERE published=1 AND parent=?")->execute($this->id);
    $ofs = $this->com_perPage * (is_numeric($this->Input->get('page')) ? $this->Input->get('page')-1 : 0);
    ?>
    
    <div class="<?php echo $this->class; ?> block"<?php echo $this->cssID; ?><?php if ($this->style): ?> style="<?php echo $this->style; ?>"<?php endif; ?>>
    <?php if ($this->headline): ?>
    
    <<?php echo $this->hl; ?>><?php echo $this->headline; ?></<?php echo $this->hl; ?>>
    <?php endif; ?>
    <?php
      $cnt = $this->com_order == ascending ? 1+$ofs : $objComments->anzahl - $ofs;
      foreach ($this->comments as $comment) {
        echo 'Kommentar ' . $cnt . ' von ' . $objComments->anzahl . '<br>';
        echo $comment;
        $cnt += $this->com_order == ascending ? 1 : -1;
      }
    ?>
    <?php echo $this->pagination; ?>
    <?php if (!$this->requireLogin): ?>
      .
      .
      .
    • In $ofs wird anhand der Page in der URL und der Anzeigeanzahl in $this->com_perPage der Offsetwert errechnet.
    • Berücksichtigen müssen wir zusätzlich die Sortierrichtung in $this->com_order. Abhängig davon zählt es von 1.. vorwärts oder von der Gesamtzahl rückwärts.


    Gruß, Hagen

    EDIT: Ich habe das Ganze mal im Wiki eingetragen: http://de.contaowiki.org/Kommentare_nummerieren
    Geändert von do_while (08.01.2012 um 20:41 Uhr)

  14. #14
    Contao-Nutzer Avatar von Thorsten
    Registriert seit
    21.06.2009.
    Ort
    Kiel
    Beiträge
    85

    Standard

    Hagen,

    Du bist der Held. Funktioniert auch bei mir super. Vielen Dank! Ein kleiner amazon-Gutschein ist als Dankeschön auf dem Weg zu Dir.
    Geändert von Thorsten (09.01.2012 um 13:18 Uhr)
    Freundliche Grüße

    - Thorsten

  15. #15
    Contao-Nutzer Avatar von Thorsten
    Registriert seit
    21.06.2009.
    Ort
    Kiel
    Beiträge
    85

    Standard

    Eine Zusatzfrage habe ich noch:

    Die Nummerierung erscheint im Frontend über dem jeweiligen Kommentar-Container .comment_default. Gibt es eine möglichst update-sichere Variante, die Nummern-Ausgabe in .comment_default hinein zu bekommen?

    Ich möchte Die Nummerierung gern in die Zeile Kommentar von Thorsten | 09.01.2012 bekommen. Wäre die Nummerierung innerhalb des Kommentar-Containers, ließe sich da mit inline oder float sicherlich was machen. Ich hab' mir die Comments.php angeschaut, werde daraus aber nicht schlau.
    Freundliche Grüße

    - Thorsten

  16. #16
    Contao-Urgestein Avatar von do_while
    Registriert seit
    15.06.2009.
    Ort
    Berlin | Deutschland
    Beiträge
    3.614
    Partner-ID
    1081
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Die Zählerzeile steht jetzt einfach so über dem Kommentarblock, das ist natürlich nicht so optimal. Ich habe mal im Wiki noch eine Verbesserung ergänzt. Damit sollte man schon besser hinkommen und mit CSS formatieren können.

    http://de.contaowiki.org/Kommentare_nummerieren

  17. #17
    Contao-Nutzer Avatar von Thorsten
    Registriert seit
    21.06.2009.
    Ort
    Kiel
    Beiträge
    85

    Daumen hoch

    Hallo Hagen,

    danke für Deine Idee mit dem umschließenden Element. So kann mensch die Kommentarzahl wirklich in die Info-Zeile zwingen:

    screeny-gaestebuch-nummerierung.png

    Allgemein beschrieben, habe ich der Info-Zeile ein linkes Padding gegeben, die Kommentarzahl absolut positioniert und dann in die Lücke nach unten geschoben. Das funktioniert auch in IE 7-9 gut, keine größeren Anpassungen nötig.
    Freundliche Grüße

    - Thorsten

Aktive Benutzer

Aktive Benutzer

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

Ähnliche Themen

  1. Nummerierung in der Newslist umkehren ?
    Von blinkybill im Forum Nachrichten/Events/FAQ
    Antworten: 1
    Letzter Beitrag: 19.03.2014, 09:19
  2. Kommentarfunktion erweitern
    Von tbruhn im Forum Formulare
    Antworten: 0
    Letzter Beitrag: 12.12.2010, 08:54
  3. Kommentar, Kommentarfunktion für registrierte Benutzer
    Von kay1234 im Forum Geschützte Bereiche/Mitglieder
    Antworten: 0
    Letzter Beitrag: 20.11.2010, 16:45
  4. Kommentarfunktion
    Von Flux im Forum Formulare
    Antworten: 4
    Letzter Beitrag: 24.01.2010, 17:11

Lesezeichen

Lesezeichen

Berechtigungen

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