URL-Parameter und die Drupal-Module
am 25.08.2006 - 08:32 Uhr in
Hallo,
kaum bin ich mit meiner letzten Sauerei http://www.drupalcenter.de/node/1532 fertig, fange ich schon die Nächste an.
Ich würde gerne die Zugriffe auf meiner Seite tracken können. Die Informationen dazu stecken schon in der Datenbank {accesslog}. Ich habe mir dazu überlegt, dass man dazu nicht Nutzer, sondern nur Sessions tracken kann. Das reich aus. Ausgang dafür ist das Listing '?q=admin/logs/hits'. Hier sind ja alle Zugriffe schon super aufgeführt und sortiert. Sieht man sich ein Access-Event an wie 'q=admin/logs/access/1187', dann sieht man eine Reihe von Informationen.
Da in der Funktion statistics_access_log sowieso alle Spalten der Tabelle {accesslog} geholt werden, habe ich die Darstellung um die Zeile 'Session' (Spalte 'sid') erweitert.
Nun kommt meine Frage. Ich blicke noch nicht durch, wie Drupal von einer URL zu einem Modul kommt. Ich würde gerne meine Session-Zeile nicht nur als Text darstellen, sondern gleich einen Link setzen, zum Beispiel: q=admin/access/session/{sid}. Sieht man sich die Seite an, wird ein ähnliches Listing angezeigt wie bei q=admin/logs/hits, nur dass jetzt allein die Zugriffe der Session sid angezeigt werden.
>>> Nur wie komme ich nun dahin, dass eine bestimmte Funktion mit q=admin/access/session/{sid} assoziiert ist? Vielleicht brauche ich auch nur eine Funktion zu erweitern. Ich weiß das aber nicht.
Ciao, Q
- Anmelden oder Registrieren um Kommentare zu schreiben
Wie ruft Drupal nun meine Funktion auf?
am 27.08.2006 - 18:33 Uhr
Hallo,
meine Funktion ist jetzt fertig. Ich habe mich an die andern Tracker-Funktionen gehalten. Wie kann ich Drupal nun dazu brinden meine Funktion zu nutzen, wenn eine bestimte URL aufgerufen wird?
Ciao, Q
<?php
function statistics_session_tracker() {
if ($node = node_load(arg(1))) {
$header = array(
array('data' => t('Time'), 'field' => 'a.timestamp', 'sort' => 'desc'),
array('data' => t('Path'), 'field' => 'a.path'),
array('data' => t('Operations')));
/**
* Zeit,
* Titel(Pfad)
* Details
**/
$result = pager_query('SELECT a.aid, a.timestamp, a.path, a.title, FROM {accesslog} a WHERE a.sid=\'%d%\' ' . tablesort_sql($header), 30);
while ($log = db_fetch_object($result)) {
$rows[] = array(
array('data' => format_date($log->timestamp, 'small'), 'class' => 'nowrap'),
_statistics_format_item($log->title, $log->path),
l(t('details'), "admin/logs/access/$log->aid"));
}
drupal_set_title(check_plain($node->title));
$output = theme('table', $header, $rows);
$output .= theme('pager', NULL, 30, 0);
return $output;
}
else {
drupal_not_found();
}
}
?>
Ciao, Q
---
Running Gag der IT seit den 70er: "Machen wir eben mal schnell ...".
Benutzerhandbuch
am 27.08.2006 - 19:25 Uhr
Drupal wird über den hook hook_menu darüber informiert.
Schau mal hier:
http://www.drupalcenter.de/node/407
Dort steht:
Drupal über die neue Funktion informieren
Wie oben erwähnt, ist die Funktion, die wir gerade schrieben, nicht ein “hook”: es ist nicht ein Drupal anerkannter Name. Wir müssen Drupal erklären, wie man die Funktion zugänglich macht, wenn wir eine Seite anzeigen. Wir tun dies mit dem hook “menu()”. Der hook menu() definiert die Verbindung zwischen einer URL und die Funktion, die den Inhalt für diese URL generiert. Der Hook prüft auch auch die Erlaubnis, wenn es gewünscht wird.
<?php
function onthisdate_menu() {
$items = array();
$items[] = array('path' => 'onthisdate',
'title' => t('on this date'),
'callback' => '_onthisdate_all',
'access' => user_access('access content'),
'type' => MENU_CALLBACK);
return $items;
}
?>
md - drupalcenter
-----------------
www.mdwp.de
vg
md - DrupalCenter.de
mdwp* Drupal Consulting & Services
Seite nicht gefunden
am 27.08.2006 - 20:01 Uhr
Ahhhh, danke. Ich dachte, das es nur ein englisches Handbuch auf drupal.org gibt.
Ich habe aber noch ein Problem. Wenn ich die URI q=session/5f48a83eb943a52b48cf80185ad26525/track ansteuere, dann wird mir der Fehler angezeigt 'Die Seite wurde nicht gefunden. Dabei habe ich jetzt in der Funktion statistics_menu() (ab Zeile 148) unten extra im Else-Zweig das hier hinzugefügt und offensichtlich einen Fehler gemacht.
<?php
if (arg(0) == 'session' && is_numeric(arg(1)) && variable_get('statistics_enable_access_log', 0)) {
$items[] = array('path' => 'session/'. arg(1) .'/track', 'title' => t('sessions'),
'callback' => 'statistics_session_tracker', 'access' => $access,
'type' => MENU_LOCAL_TASK, 'weight' => 2);
}
?>
Kann mir da jemand bitte weiterhelfen?
Ciao, Q
Ciao, Q
---
Running Gag der IT seit den 70er: "Machen wir eben mal schnell ...".