Drupal Kommentare: Das “(nicht überprüft)” entfernen

by Nils on 27. Dezember 2007

In den meisten Blogs kann man als Besucher auch ohne Anmeldung kommentieren. Das lässt sich auch in Drupal einstellen. Leider wird dann automatisch hinter dem Namen eines jeden nicht registrierten Besuchers der Zusatz “(nicht überprüft)” angezeigt. Dies erscheint sogar in der Liste der letzten Kommentatoren in der Sidebar. Das sieht weder schön aus, noch erscheint es anderweitig sinnvoll …. also weg damit.

Leider gibt es dafür in der Drupal Administration keinen Schalter. Man muss in das Theme eingreifen. Nach kurzer Suche fand ich folgende Lösung:

In die template.php des genutzten Themes fügt man folgenden Code ein


uid && $object->name) {
// Shorten the name when it is too long or it will break many tables.
if (drupal_strlen($object->name) > 20) {
$name = drupal_substr($object->name, 0, 15) .'...';
}
else {
$name = $object->name;
}

if (user_access('access user profiles')) {
$output = l($name, 'user/'. $object->uid, array('title' => t('View user profile.')));
}
else {
$output = check_plain($name);
}
}
else if ($object->name) {
// Sometimes modules display content composed by people who are
// not registered members of the site (e.g. mailing list or news
// aggregator modules). This clause enables modules to display
// the true author of the content.
if ($object->homepage) {
$output = l($object->name, $object->homepage);
}
else {
$output = check_plain($object->name);
}

//$output .= ' ('. t('not verified') .')';
}
else {
$output = variable_get('anonymous', t('Anonymous'));
}

return $output;
}
?>

Das wirkt auf den ersten Blick recht umständlich, ist aber die empfehlenswerteste Vorgehensweise bei solchen Veränderungen. Es bedeutet nichts anderes als das die drupalinterne username Funktion mit der o.g. überschrieben wird. Einziger Unterschied zur originalen Version ist das auskommentierte

$output .= ' ('. t('not verified') .')';.

Warum nicht gleich die originale username Funktion verändern anstatt diese überschreiben zu lassen? Weil man

  1. nach Möglichkeit die Core Daten im Originalzustand belassen sollte, um einerseits später schwer aufzufindende Probleme zu vermeiden und
  2. es ein Update von Drupal leichter macht, weil man nicht nach jedem Update diese Änderung erneut vornehmen muss.

Hinweis für Nutzer des YAML für Drupal Themes: Falls man ein Subtheme nutzt, so muss diese Änderung in die template.php im Ordner für das Subtheme eingetragen werden, sonst funktioniert es nicht.

(via Matt Farina)

{ 6 comments… read them below or add one }

1 Allgäuer November 4, 2008 um 08:11

Vielen Dank für den Tipp.
Es hat einwandfrei funktioniert.

2 Matthias Juli 10, 2009 um 09:58

Danke für den Tipp. Es ist wirklich eigenartig, dass es keinen “Ausschalter” gibt. Nicht mal wenn der Beitrag geöffnet wird , vom Admin. Komisch.
Danke Matthias.

3 Nils Juli 10, 2009 um 13:58

Ja, manches ist wahrscheinlich so ‘gewachsen’ in Drupal. Vermutlich verschwindet die Anzeige nur, wenn sich der Benutzer registriert und den Double Opt In durchläuft. Getestet habe ich es aber noch nicht.

4 Stefan B. April 24, 2010 um 09:46

Danke für den Tipp.
Hinweis: Am Anfang deines Funktions Code fehlt etwas …

5 Nils April 25, 2010 um 09:21

Hi Stefan, warum so geheimnisvoll? Was fehlt denn? Ich nutze hier ja kein Drupal mehr.

6 Stefan B. April 26, 2010 um 08:31

In der Ersten Codezeile müsste es heissen:


function phptemplate_username($object) {
if ($object->uid && $object->name) {

Schade das du kein Drupal mehr nutzt. Ich verwende es immer noch auf meiner Webseite und bin dort eigentlich ganz zufrieden.

Nur mit der “Politik neuer Versionen” bin ich nicht zufrieden. Updates sind da fast nicht möglich. Zum Beispiel von Drupal 5 auf Drupal 6 kann ich nicht gehen, da nach über einem Jahr immer noch nicht alle Module so gehen wie gewünscht.

Leave a Comment

{ 1 trackback }

Previous post:

Next post: