Je nach Rolle anderes Aussehen bei 'Autoreninformation'
am 26.08.2007 - 13:15 Uhr in
Hallo,
ich würde gerne bei einigen Rollen basierend auf dem Theme bei den Autoreninformationen noch ein Icon hinzufügen oder so. Man kennt das vielleicht von phpBB oder so, dort sind die Nutzernamen von Moderatoren und Administratoren auch andersfarbig geschrieben.
So in der Art hatte ich mir das vorgestellt.
Ich weiß nun nur nicht, wie ich das mit der Template-Engine mache, weil es geht ja über HTML & CSS hinaus und benötigt irgendwie eine Programmlogik. Was muss ich dazu lesen?
Ciao, Q
- Anmelden oder Registrieren um Kommentare zu schreiben

Ansatz in der user_profile.tpl
am 26.08.2007 - 13:34 Uhr
Hallo Q,
Ich habe das Userprofil über die Datei user_profile.tpl rollenspezifisch angepasst:
<?php if (in_array('lehrer',$GLOBALS['user']->roles)):echo '<img src="/themes/hvv/images/pfeil.gif"/>';
?>
<?php endif; ?>
lehrer ist in diesem Fall eine Rolle aus meinem Projekt und muss entsprechend angepasst werden.
Ist zwar nicht genau auf deine Frage, aber vielleicht kann Dir dieser Ansatz dennoch weiterhelfen.
Gruß
Jonas
Oder node.tpl.php
am 26.08.2007 - 15:22 Uhr
Hallo,
die Autoreninformation wird ja in der node.tpl.php ausgegeben, da steht normalerweise irgendwo
print $submitted;.Gefüllt wird diese Variable von der Template Engine, und zwar mittels folgendem Code:
if (theme_get_setting('toggle_node_info_' . $node->type)) {$variables['submitted'] = t('Submitted by !a on @b.', array('!a' => theme('username', $node), '@b' => format_date($node->created)));
}
Wenn Du dir dieses Schnipselchen in deine node.tpl.php kopierst, und zwar VOR die Print-Anweisung, kannst Du damit rumspielen und z.B. zusätzliche CSS-Codes einfügen, Teile entfernen und Ähnliches.
Gruß,
Boris
Danke für den guten
am 28.08.2007 - 12:57 Uhr
Danke für den guten Hinweis.
Ich dachte auch, dass es ziemlich easy wäre, aber irgendwo habe ich einen Fehler gemacht. Ich habe damals für Drupal-4.7 einige Sachen gemacht und so habe ich den Code zusammengeschustert, aber er geht nicht. Hat sich da etwas zu Drupal-5.x geändert?
<?php if ($submitted) {$css_class = array();
$uid = $node->uid;
$result = db_query("SELECT rid FROM {users_roles} WHERE uid=%d", $node->uid);
while ($role = db_fetch_object($result)) {
if ($role->rid == "3") {
$css_class[] = "junior";
}
elseif ($role->rid == "4") {
$css_class[] = "senior";
}
elseif ($role->rid == "5") {
$css_class[] = "core";
}
}
?>
<span class="submitted <?php implode(" ", $css_class) ?>"><?php print t('!date — !username', array('!username' => theme('username', $node), '!date' => format_date($node->created))); ?></span>
<?php } ?>
Andere Methode
am 28.08.2007 - 13:32 Uhr
Versuch mal sinngemäß so an die Rollen zu kommen (ich verwende hier die Klarnamen statt der IDs, muss aber dafür keine große DB-Abfrage machen):
$css_class = array[];$autor = user_load(array('uid' => $node->uid));
foreach ($autor->roles as $rolle) {
if ($rolle == "Junior") {
$css_class[] = "junior";
}
elseif ($rolle == "Senior") {
$css_class[] = "senior";
}
elseif ($rolle == "Core") {
$css_class[] = "core";
}
}
Gruß,
Boris
Hallo, danke, das mit dem
am 28.08.2007 - 17:55 Uhr
Hallo,
danke, das mit dem user_load() kannte ich gar nicht. Allerdings scheint der scope von PHP bei ?> zu enden. Das Array war jedes mal leer. Ich habe dann diesen Code daraus gemacht.
<?phpif ($submitted) {
// Display info only on certain node types.
$css_class = array();
$autor = user_load(array('uid' => $node->uid));
foreach ($autor->roles as $id => $rolle) {
if ($rolle == "Junior") {
$css_class[] = "junior";
}
elseif ($rolle == "Senior") {
$css_class[] = "senior";
}
elseif ($rolle == "Core") {
$css_class[] = "core";
}
}
print " <span class=\"submitted\">";
print t('!date — !username', array('!username' => theme('username', $node), '!date' => format_date($node->created)));
print "<span class=\"" . implode(" ", $css_class) . "\"> </span></span>\n";
}
?>
Dann gibt es noch in der CSS-Datei die CSS-Klassen je nach Rolle, die damit den Autor markieren. Etwa so ...
.senior:before {content: "S"; color: #ff6600; font-weight: bold; margin-left: 5px; border: 1px solid #ff6600;}.junior:before { content: "J"; color: #ffb600; font-weight: bold; margin-left: 5px; border: 1px solid #ffb600;}
.core:after { content: "C"; color: #007f0e; font-weight: bold; margin-right: 5px; border: 1px solid #007f0e;}
Ciao, Q