Kommentare nummerieren

Aus Contao Community Documentation

Version vom 10. Januar 2012, 20:37 Uhr von Do while (Diskussion | Beiträge)

(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)


Im Forum wurde die Frage diskutiert, wie man Kommentare durchnummerieren kann. Wenn man alle Bedingungen abprüfen will, die die Ausgabe beeinflussen können, ist es nicht ganz so trivial.

Die Kommentare werden über das Template ce_comments.html5 (bzw. .xhtml, .tpl) ausgegeben. Um die Ausgabe zu verändern, erstellt man über das Template-Menü eine Kopie im templates-Ordner.

Der Anfang des Templates ist dann wie folgt anzupassen:

<?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): ?>
  .
  .
  .

Der Rest des Templates bleibt Original.

Verbesserung

Der aufgelistete Vorschlag zeigt erstmal nur das Prinzip einer solchen Nummerierung. Die Nummerierung steht aber außerhalb des Kommentar-Divs und hat damit keinen Zusammenhang mit dem eigentlichen Kommentar.

Es gibt jetzt (mindestens) zwei Möglichkeiten zur Verbesserung:

1. Um die Ausgabe in das Kommentar-Div hinein zu bekommen, muss ein weiteres Template angepasst werden: com_default.html5 (oder .tpl, .xhtml). Außerdem müssen die Informationen vom einen in das andere Template übergeben werden. Die Übergabe könnte beispielsweise über eine $GLOBALS[..][..]-Variable geschehen.
Diese Lösung gefällt mir nicht so gut, da dann zwei Templates manuell gepflegt werden müssen.

2. Eine etwas andere Lösung ist das Verpacken in einem zusätzlichen div-Container. Dieses Div fasst die Zählerzeile und den Kommentar zusammen.
Hier ein Beispiel: die foreach-Anweisung im Template ce_comments.html5 wird etwas verändert:

  foreach ($this->comments as $comment) {
    echo '<div class="com_entry"><span>Kommentar ' . $cnt . ' von ' . $objComments->anzahl . '</span>';
    echo $comment;
    echo '</div>';
    $cnt += $this->com_order == ascending ? 1 : -1;
  }

Über die Klasse .com_entry kann jetzt die Zusammenfassung per CSS angesprochen und formatiert werden:

    .com_entry
    {
        margin-bottom:10px;
        border:1px solid #ff0000;
    }
    .com_entry span
    {
        padding:1px 10px;
        background-color:#ff0000;
        color:#ffffff;
    }
    .com_entry .comment_default
    {
        margin:2px 10px;
    }

... nicht schön, erklärt aber die Idee dabei; über das Design kann jeder selbst bestimmen.



Erstellt von: do_while

Ansichten
Meine Werkzeuge

Contao Community Documentation

Ich brauch nen Bier, es ist zwar noch nicht nach 4, aber es ist nach Oli.

Yanick Witschi
Navigation
Verstehen
Verwenden
Entwickeln
Verschiedenes
Werkzeuge