Startseite
  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche
Startseite › Forum › Drupalcenter.de › Themes & Theming ›

[Gelöst] who is online / user.module - function übernehmen und anpassung

Eingetragen von einfachfragen (150)
am 31.01.2009 - 15:10 Uhr in
  • Themes & Theming
  • Drupal 6.x

Hi.

So, Stück für Stück wurschtel ich mich durch. Jetzt habe ich aber wieder mal eine Frage:

Für die Ausgabe der "Who is online" ist ja folgende Datei zuständig: modules/user/user.module

Ich möchte die Datei jetzt so bearbeiten, dass ich nur noch die Anzahl der User dort stehen habe und nicht mehr den ganzen Salmus wie "Benutzer, Gäste etc.".

Um einen eigenen Block zu haben, habe ich eine block-user-3.tpl.php angelegt. Das klappt auch (denke ich zumindest, hehe). So kann ich das Layout unabhängig von den anderen Boxen gestalten.

Die Textphrasen werden ja jetzt durch die Function in der user.module ausgegeben:

function user_block($op = 'list', $delta = 0, $edit = array()) {

Das wäre dann genau genommen der Abschnitt:

          // 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')));
          }

Wenn ich die Daten dort editiere, dann klappt auch alles und es wird so angezeigt, wie ich es haben möchte. Nur ist die Frage, geht das anders als direkt in den Dateien? Wenn es mal ein Update gibt, dann werden meine Änderungen ja direkt wieder überschreiben und ich darf alles manuell neu einpflegen. Zudem weiß ich nicht, ob das die richtige Variante ist, derartige Änderungen vorzunehmen oder ob ich mir das zu kompliziert mache.

------------

Nächste Sache:

Durch die who is online wird ja auch die Liste erstellt, die alle User anzeigt. Ich möchte es später so haben, dass die die Liste in einem anderen Block dargestellt wird, inkl. Bild. Ist das später mit Views machbar oder muss ich hier schon drauf achten, dass ich nichts aus der user.module lösche was dafür verwendet wird?

Hoffe meine Fragen sind soweit verständlich.

Danke für die Antworten.
Gruß
einfachfragen

‹ FF => IE problem! [Gelöst] Pro Menüpunkt eigene Unterpunkte aber gesplittet ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

who is online

Eingetragen von stBorchert (6003)
am 31.01.2009 - 18:28 Uhr

Moin!
Erstmal vorweg: An Modulen (und ganz besonders am Kern von Drupal) wird nicht herumgeschraubt!. Es sei denn, man behebt Fehler und möchte Patches erstellen.
Sonst ist (wie Du ja bereits richtig erahnt hast) beim nächsten Update wieder alles weg und möglicherweise (was noch schlimmer ist) ein schwerwiegender Fehler im Kern von Drupal eingebaut.

Puh. Gerade nochmal gut gegangen.
So, jetzt zum eigentlich Problem.

Ich kann jetzt leider nicht so ad hoc sagen, welche Attribute alles in $block enthalten sind. Also schreib doch einfach mal in Deine block-user-3.tpl.php folgenden Quelltext:

<?php
drupal_set_message('<pre>'. print_r($block, 1) .'</pre>');

Dann siehst Du die Struktur der Variable $block und siehst evtl. ein Attribut, dass bereits die von Dir gewünschte Information enthält.
Ansonsten bleibt Dir wohl nichts Anderes, als $block->content in der block-user-3.tpl.php zu parsen und Dir die Informationen daraus zu beschaffen.

hth,

 Stefan

  • Anmelden oder Registrieren um Kommentare zu schreiben

Erst einmal vielen Dank

Eingetragen von einfachfragen (150)
am 01.02.2009 - 16:13 Uhr

für deine Antwort.

Zitat:

Erstmal vorweg: An Modulen (und ganz besonders am Kern von Drupal) wird nicht herumgeschraubt!. Es sei denn, man behebt Fehler und möchte Patches erstellen.

Jawohl Sir, wird gemacht Sir :D.

Die Ausgabe des Blocks sieht so aus:

stdClass Object
(
    [bid] => 43
    [module] => user
    [delta] => 3
    [theme] => auto
    [status] => 1
    [weight] => -13
    [region] => header
    [custom] => 0
    [throttle] => 0
    [visibility] => 0
    [pages] =>
    [title] =>
    [cache] => -1
    [enabled] => 1
    [page_match] => 1
    [subject] =>
    [content] => Zur Zeit ist 1 Benutzer und 1 Gast online.Benutzer onlinesausi

)

Es gibt somit für mich keine Möglichkeit direkt auf die einzelnen Werte zuzugreifen, da die im [content] stecken.

Somit habe ich das so gelöst:

<div id="topuser">
<?php

  preg_match_all
("/\d+/",$block->content,$result);
  print
$result[0][0];
  print
$result[0][1];

?>

</div>

Das funktioniert auch, stellst sich nur die Frage, ob es der richtige Weg ist.

Wenn ja, werde ich zukünftig weiter so vorgehen und wenn nein, dann wäre es nett wenn man mir sagt welcher Weg der Beste ist ;-).

Mein Problem ist eigentlich nur, dass ich kein Progger bin. Hier ein bisschen, da ein bisschen ok aber sobald es aufwendiger wird muss ich passen. Kann ich Drupal somit individuell anpassen ohne ein guter Progger zu sein?

Gruß und nochmals danke.

  • Anmelden oder Registrieren um Kommentare zu schreiben

who is online

Eingetragen von stBorchert (6003)
am 02.02.2009 - 12:14 Uhr
einfachfragen schrieb

Jawohl Sir, wird gemacht Sir :D.

Brav :-)

einfachfragen schrieb

...Das funktioniert auch, stellst sich nur die Frage, ob es der richtige Weg ist.

Naja, es funktioniert jedenfalls (wie Du schon sagtest). Der richtige Weg wäre, wenn das user-Modul von sich aus schon die Anzahl der Nutzer als Attribute des Objekts mitgeben würde, damit man damit machen kann, was immer man möchte. Oder zumindest die Funktionallität, die die Nutzer zählt, in eine Funktion auslagern, so dass man die von woanders aufrufen kann. Dem ist aber leider nicht so.
Naja, da bleibt Dir also immer noch die Möglichkeit, die Abfrage selbst durchzuführen:

<?php
function count_online_users() {
 
// 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.
 
$result['anonymous_count'] = sess_count($interval);
 
$result['authenticated_count'] = db_num_rows(db_query('SELECT DISTINCT u.uid, 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));
  return
$result;
}
?>

Wenn Du diese Funktion in Deine template.php packst kannst Du jetzt irgendwo (in einem Block beispielsweise) die Zahl der aktuellen Benutzer auf der Seite anzeigen.

<?php
$users
= count_online_users();
print
t('Angemeldete Nutzer: !auth_count', array('!auth_count' => $users['authenticated_count']));
print
t('Anonyme Nutzer: !anon_count', array('!anon_count' => $users['anonymous_count']));
print
t('Nutzer insgesamt: !user_count', array('!user_count' => $users['authenticated_count'] + $users['anonymous_count']));
?>

hth,

 Stefan

  • Anmelden oder Registrieren um Kommentare zu schreiben

Klappt, mit kleinen Änderungen, merci

Eingetragen von einfachfragen (150)
am 02.02.2009 - 21:01 Uhr

Danke für die optimierte Ausgabe. Werde zukünftig schauen, dass ich das über eigene functions löse (kann ich da die Template mit voll packen, sofern es nicht anders lösbar ist, wie in diesem Fall?).

Musste das jedoch ein wenig anpassen:

function count_online_users() {
  // 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.
  $result['anonymous_count'] = sess_count($interval);
  $result['authenticated_count'] = db_result(db_query('SELECT DISTINCT u.uid, 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));
  return $result;
}

db_num_rows, kannte Drupal nicht.

Ausgabe habe ich dann auch einfach so gemacht:

<?php  print $users['authenticated_count']; ?> etc.

Gruß

  • Anmelden oder Registrieren um Kommentare zu schreiben

db_num_rows

Eingetragen von stBorchert (6003)
am 02.02.2009 - 22:04 Uhr
einfachfragen schrieb

kann ich da die Template mit voll packen, sofern es nicht anders lösbar ist, wie in diesem Fall?.

Jup.
Oder Du legst Dir ein Verzeichnis includes in sites/all an, in das Du für die Snippets *.inc Dateien anlegst. Diese kannst Du dann in der template.php inkludieren.

einfachfragen schrieb

db_num_rows, kannte Drupal nicht.

Ach, verdammich. Das ist ja in D6 entfernt worden. Hatte ich glatt vergessen.

$result['authenticated_count'] = db_result(db_query('SELECT COUNT(DISTINCT u.uid) 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));

ist der empfohlene Ersatz für db_num_rows().

hth,

 Stefan

  • Anmelden oder Registrieren um Kommentare zu schreiben

und wieder um

Eingetragen von einfachfragen (150)
am 02.02.2009 - 22:28 Uhr

ein paar Erfahrungen reicher :-D.

Alles funktioniert und alles geht so wie es sein soll. Auf zum nächsten Problem :-D.

Gruß und danke.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • für drupal11 ein Slider Modul
  • [gelöst] W3CSS Paragraphs Views
  • Drupal 11 neu aufsetzen und Bereiche aus 10 importieren
  • Wie erlaubt man neuen Benutzern auf die Resetseite zugreifen zu dürfen.
  • [gelöst] Anzeigeformat Text mit Bild in einem Artikel, Drupal 11
  • Social Media Buttons um Insteragram erweitern
  • Nach Installation der neuesten D10-Version kein Zugriff auf Website
  • Composer nach Umzug
  • [gelöst] Taxonomie Begriffe zeigt nicht alle Nodes an
  • Drupal 11 + Experience Builder (Canvas) + Layout Builder
  • Welche KI verwendet ihr?
  • Update Manger läst sich nicht Installieren
Weiter

Neue Kommentare

  • melde mich mal wieder, da ich
    vor 3 Tagen 14 Stunden
  • Hey danke
    vor 4 Tagen 9 Stunden
  • Update: jetzt gibt's ein
    vor 5 Tagen 3 Stunden
  • Hallo, im Prinzip habe ich
    vor 1 Woche 2 Tagen
  • Da scheint die Terminologie
    vor 1 Woche 2 Tagen
  • Kannst doch auch alles direkt
    vor 1 Woche 6 Tagen
  • In der entsprechenden View
    vor 1 Woche 6 Tagen
  • Dazu müsstest Du vermutlich
    vor 1 Woche 6 Tagen
  • gelöst
    vor 4 Wochen 3 Tagen
  • Ja natürlich. Dass ist etwas,
    vor 4 Wochen 4 Tagen

Statistik

Beiträge im Forum: 250233
Registrierte User: 20449

Neue User:

  • Mroppoofpaync
  • 4aficiona2
  • AppBuilder

» Alle User anzeigen

User nach Punkten sortiert:
wla9461
stBorchert6003
quiptime4972
Tobias Bähr4019
bv3924
ronald3857
md3717
Thoor3678
Alexander Langer3416
Exterior2903
» User nach Punkten
Zur Zeit sind 0 User und 13 Gäste online.

Hauptmenü

  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche

Quicklinks I

  • Infos
  • Drupal Showcase
  • Installation
  • Update
  • Forum
  • Team
  • Verhaltensregeln

Quicklinks II

  • Drupal Jobs
  • FAQ
  • Drupal-Kochbuch
  • Best Practice - Drupal Sites - Guidelines
  • Drupal How To's

Quicklinks III

  • Tipps & Tricks
  • Drupal Theme System
  • Theme Handbuch
  • Leitfaden zur Entwicklung von Modulen

RSS & Twitter

  • Drupal Planet deutsch
  • RSS Feed News
  • RSS Feed Planet
  • Twitter Drupalcenter
Drupalcenter Team | Impressum & Datenschutz | Kontakt
Angetrieben von Drupal | Drupal is a registered trademark of Dries Buytaert.
Drupal Initiative - Drupal Association