Blöcke themen - wie?
Eingetragen von Raphael Zens (3)
am 18.09.2008 - 15:43 Uhr in
am 18.09.2008 - 15:43 Uhr in
Hallo, ich bin relativ neu in Drupal und weiß so recht nicht weiter.
Was ich möchte, ist bestehende Blöcke themen. Den "Who's online"-Block zum Beispiel. Ja, wie man mit CSS themt weiß ich, und auch ein block-Template könnte ich anlegen. Was ich aber will, ist den Inhalt von $block-content für bestimmte Blöcke verändern.
Beispielsweise den Text "There are currently xy user onlin..." verändern oder die HTML-Struktur etwas anpassen.
Gibt es da eine Möglichkeit.
MFG Raphael
- Anmelden oder Registrieren um Kommentare zu schreiben
Hi, das geht nicht mit dem
am 18.09.2008 - 18:36 Uhr
Hi,
das geht nicht mit dem Standard Block. Du müsstest dir einen eigenen Block schreiben und die Abfragen vornehmen.
user.module
Ab Zeile 595
<?php
if (user_access('access content')) {
// Count users active within the defined period.
$interval = time() - variable_get('user_block_seconds_online', 900);
// Perform database queries to gather online user lists. We use s.timestamp
// rather than u.access because it is much faster.
$anonymous_count = sess_count($interval);
$authenticated_users = db_query('SELECT DISTINCT u.uid, u.name, s.timestamp FROM {users} u INNER JOIN {sessions} s ON u.uid = s.uid WHERE s.timestamp >= %d AND s.uid > 0 ORDER BY s.timestamp DESC', $interval);
$authenticated_count = db_num_rows($authenticated_users);
// Format the output with proper grammar.
if ($anonymous_count == 1 && $authenticated_count == 1) {
$output = t('There is currently %members and %visitors online.', array('%members' => format_plural($authenticated_count, '1 user', '@count users'), '%visitors' => format_plural($anonymous_count, '1 guest', '@count guests')));
}
else {
$output = t('There are currently %members and %visitors online.', array('%members' => format_plural($authenticated_count, '1 user', '@count users'), '%visitors' => format_plural($anonymous_count, '1 guest', '@count guests')));
}
// Display a list of currently online users.
$max_users = variable_get('user_block_max_list_count', 10);
if ($authenticated_count && $max_users) {
$items = array();
while ($max_users-- && $account = db_fetch_object($authenticated_users)) {
$items[] = $account;
}
$output .= theme('user_list', $items, t('Online users'));
}
$block['subject'] = t('Who\'s online');
$block['content'] = $output;
}
?>
Du siehst, das die Texte gest sund und die Daten per SQL zusammen gezogen. Über die Drupal API kommst du da nicht ran.
Wobei du in 6 in die Erstellung des Blocks eingreifen könntest oder komplett abfangen. Aber ein neuer Block sollte einfacher und direkter sein.
Im Prinzip kannst du diesen Source in einen neuen Block verfrachten und nach Lust und Laune ändern.
---
Viele Grüße,
Kars-T
Arbeit: comm-press
Hobbies: Tower Defense HQ, plamo.de, Blog
Fehlermeldung
am 18.09.2008 - 19:25 Uhr
Danke erst mal für die rasche Antwort.
Also quasi aus hook_block() den Teil für den gewünschten User-Block rauskopieren und in meinen Template-Block einfügen - und nach eigenen Vorstellungen verändern.
Werde das gleich mal ausprobieren. Ich war soweit, die den Content in eine Variable zu kopieren und dort ein wenig zu replacen. Aber sehr elegant schien mir das nicht.
----------------------------------
Hab's probiert und bekam folgende Fehlermeldung
Fatal error: Cannot use object of type stdClass as array in /var/www/drop/sites/all/themes/droptheme/block-user-3.tpl.php on line 69
MFG Raphael
Öh naja, über ein Modul
am 18.09.2008 - 20:03 Uhr
Öh naja, über ein Modul und hook_block musst du noch ein wenig mehr machen, da es ja auch einhaken musst, wenn der Block angezeigt wird.
Ich hatte jetzt einfach daran gedacht, das du eine neuen Block mit Eingabeformat PHP anlegst und damit arbeitest.
[edit]
Über die .tpl geht das so nicht. Muss dann ein Modul sein.
Ließ sonst in der API nach
http://api.drupal.org/api/function/hook_block/6
---
Viele Grüße,
Kars-T
Arbeit: comm-press
Hobbies: Tower Defense HQ, plamo.de, Blog
Hm, dann scheint mir der
am 18.09.2008 - 20:51 Uhr
Hm, dann scheint mir der einfachste Weg der zu sein, dass ich einen eigenen Block über die Drupal-Administration erstelle und dort php-Code einfüge. Dann frage ich dort die Datenbanken ab und stelle alles so dar, wie ich mir das vorstelle.
Danke für die Hilfe.
MFG Raphael