Wie kann ich etwas nach Kommentaren im Node anzeigen lassen?
am 16.05.2010 - 19:09 Uhr in
Hallo zusammen,
ich habe einige Stunden versucht, im Internet und hier im Forum gesucht, aber leider keine Lösung gefunden. Vielleicht hat von euch ja einer eine Idee, wie es geht oder kann sagen, dass ich die Suche aufgeben kann, weil es nicht funktioniert ;)
Ich möchte gerne nach den Kommentaren in einem Node etwas anzeigen lassen, und zwar nur dann, wenn auch Kommentare da sind und nur nach dem letzten Kommentar. Daher funktionierte Folgendes alles nicht:
- Innerhalb der node.tpl kann ich nichts machen, da die Kommentare ja erst im Anschluss daran automatisch vom comments-module aufgerufen werden
- Im Comments-Module habe ich zwar die Stelle gefunden, wo dann der Eintrag "Gesamtes Thema lesen" am Ende der max. 5 Kommentare aufgerufen wird, aber zum einen will ich nicht in einem Module rumwerklen.. und zum anderen wüsste ich technisch auch gar nicht, wie... ;)
- Innerhalb der comments.tpl habe ich es nicht hinbekommen... schliesse ich da etwas an, gibt er das nach jedem Kommentar aus, es soll aber nur einmal und am Ende erscheinen. Ich dachte mir, man müsste irgendwie zählen können... aber das hab ich nicht hinbekommen :(
Also... ich möchte nur was anzeigen lassen, wenn es einen Kommentar gab und dann aber auch nur einmal und am Ende der maximal 1-5 angezeigten Kommentare (ist so im Modul eingestellt, max. 5).
Weiss jemand, ob und wie das geht? Kann ich das in der comments.tpl machen und dort eine "php if" machen auf Zählbasis der Kommentare? Falls ja.. wie? :)
Wäre prima, wenn jemand Rat weiß. Vielen lieben Dank!
- Anmelden oder Registrieren um Kommentare zu schreiben
Der nachfolgende Code ist
am 19.05.2010 - 18:39 Uhr
Der nachfolgende Code ist ungetestet, so oder so ähnlich sollte es aber funktionieren.
template.php
Nicht vergessen mytheme mit dem Namen deines Themes auszutauschen!
<?php
/**
* Intercept comment template variables
*
* @param $vars
* A sequential array of variables passed to the theme function.
*/
function mytheme_preprocess_comment(&$vars) {
// Keep track the # of comments rendered.
static $comment_count = 1;
// Export variable so we are able to access it in our comment.tpl.php file.
$vars['comment_count'] = $comment_count;
// Increase the counter.
$comment_count++;
}
?>
comment.tpl.php
<?php
// $Id: comment.tpl.php,v 1.4.2.1 2008/03/21 21:58:28 goba Exp $
/**
* @file comment.tpl.php
* Default theme implementation for comments.
*
* Available variables:
* - $author: Comment author. Can be link or plain text.
* - $content: Body of the post.
* - $date: Date and time of posting.
* - $links: Various operational links.
* - $new: New comment marker.
* - $picture: Authors picture.
* - $signature: Authors signature.
* - $status: Comment status. Possible values are:
* comment-unpublished, comment-published or comment-preview.
* - $submitted: By line with date and time.
* - $title: Linked title.
*
* These two variables are provided for context.
* - $comment: Full comment object.
* - $node: Node object the comments are attached to.
*
* @see template_preprocess_comment()
* @see theme_comment()
*/
echo '<div class="comment';
if ($comment->new) {
echo ' comment-new';
}
echo ' '. $status .' clear-block">';
echo $picture;
if ($comment->new) {
echo '<span class="new">'. $new .'</span>';
}
echo '<h3>'. $title .'</h3>';
echo '<div class="submitted">'. $submitted .'</div>';
echo '<div class="content">';
echo $content;
if ($signature) {
echo '<div class="user-signature clear-block">'. $signature .'</div>';
}
echo '</div>';
echo $links;
echo '</div>';
// Get maximum # of comments on a page.
$comments_per_page = variable_get('comment_default_per_page_' . $vars['node']->type, 1);
// If the count equals the per page setting of the comments, it's the last.
if ($comment_count === $comments_per_page) {
/**
* @todo Do something.
*/
}
?>
Schon mal vielen Dank für
am 19.05.2010 - 20:09 Uhr
Schon mal vielen Dank für deine Antwort & Mühe! Ich hab's probiert, klappt aber leider noh nicht, weil er scheinbar nicht "zählt". Habe zum Test auch einfach mal das $comments_per_page mit ner Zahl ersetzt, auch mit 1, aber es passiert nichts... weshalb ich glaube, dass der counter nicht hochgezählt wird. In der template php habe ich den Code von oben reingesetzt und nur das mytheme geändert.
Muss ich ggf. noch irgendwo/irgendwie das Hochzählen des Counters arrangieren?
Probiere mal
am 19.05.2010 - 20:46 Uhr
Probiere mal folgendes:
<?php
/**
* Intercept comment template variables
*
* @param $vars
* A sequential array of variables passed to the theme function.
*/
function mytheme_preprocess_comment(&$vars) {
// Keep track the # of comments rendered.
if (!isset($vars['comment_count']) || empty($vars['comment_count']) || $vars['comment_count'] <= 1) {
$comment_count = 1;
}
// Export variable so we are able to access it in our comment.tpl.php file.
$vars['comment_count'] = $comment_count;
// Increase the counter.
$comment_count++;
}
?>
PS: Du kannst auch den Vergleich noch anpassen, damit der Datentyp nicht mit beachtet wird.
<?php
// If the count equals the per page setting of the comments, it's the last.
if ($comment_count == $comments_per_page) {
/**
* @todo Do something.
*/
}
?>
Oder Alternativ mit einem Typecast sicherstellen, dass der Datentyp passt.
<?php
// If the count equals the per page setting of the comments, it's the last.
if ((int)$comment_count === (int)$comments_per_page) {
/**
* @todo Do something.
*/
}
?>
Dank dir noch mal! Leider
am 26.05.2010 - 19:55 Uhr
Dank dir noch mal! Leider bekomme ich es damit nicht hin, er zählt einfach nicht und zeigt somit auch nichts an, habe alles Mögliche mit den Codes von dir versuchen.
Mal ein anderer Ansatz, vielleicht kannst du oder jemand anderes mir sagen, wie ich das bestehende Modul ggf. dafür einsetzen kann, um zu zählen... oder alternativ einen Code nicht im Template setze, sondern im Modul selbst (auch wenn ich es ja eigentlich nicht wollte ;) ).
Das ist der Auszug aus dem comments-Modul, der für mich interessant ist und wo ich mich gerne anschliessen möchte, heißt... genau danach möchte ich mich einklinken:
<?php
if ($cnt > 0) {
if ($lastnew > 0) {
require_once VBULLETIN_PATH .'/includes/functions_bigthree.php';
mark_thread_read($threadinfo, $foruminfo, $vbulletin->userinfo['userid'], $lastnew);
}
$links['full_thread'] = array(
'title' => t('Read full thread'),
'href' => $vbulletin->options['bburl'] .'/showthread.php',
'query' => drupal_query_string_encode(array('t' => $node->threadid)),
'attributes' => array('title' => t('Jump to the first comment of this posting.')),
'absolute' => true,
);
if (_comment_vb_can_reply($threadinfo)) {
$links['add_new_comment'] = array(
'title' => t('Add new comment'),
'href' => $vbulletin->options['bburl'] .'/newreply.php',
'query' => drupal_query_string_encode(array('do' => 'newreply', 'noquote' => 1, 't' => $node->threadid)),
'attributes' => array('title' => t('Add a new comment to this page.')),
'absolute' => true,
);
?>
D.h. entweder möchte ich hier jetzt mit rein und wenn eben $lastnew > 0 ist eine Ausgabe machen... wobei es bei mir dran hapert, an welcher Stelle ich das wie setzen muss.. also wo ich jetzt nen echo xyz machen kann... oder wie kann ich das "$lastnew" ggf. als preprocessor in die template-datei und dann als Variable in die comment-theme datei übernehmen. Da scheitere ich leider total dran :( - Falls jemand Rat weiß, wäre das prima.