Beiträge: 70
Themen: 11
Registriert seit: 03.09.2008
26.01.2009, 09:31
Hallo,
gibt es ein Plug-In für MyBB das Live (also über Ajax) die letzten Aktionen anzeigt?
etwa wie hier ganz unten.
teoretisch müsste das möglich sein, da in der Wer ist online-Liste dies ja auch angezeigt wird. Ich möchte das nur halt so in ticker-form und nicht immer nur das letze Ereigniss eines users sonder die letzen 5 aktionen.
hoffe das es sowas schon gibt. ansonsten könnte ich mit jemand anderem sowas coden (hab ahnung von PHP, nur nicht vom mybb-plugin-system)
MFG MaR-V-iN
Beiträge: 25.766
Themen: 269
Registriert seit: 20.09.2005
So etwas habe ich noch nicht gesehen.
Bitte die Foren-Regeln beachten und im Profil die verwendete MyBB-Version angeben.
Beiträge: 70
Themen: 11
Registriert seit: 03.09.2008
Hi,
OK wenn es das nicht gibt müsste man es selbst schreiben. Kann sich hier vll mal einer melden der Ahnung von Ajax, PHP, und dem mybb-plugin-system hat?
MFG
Beiträge: 70
Themen: 11
Registriert seit: 03.09.2008
*Thread rauskram*
Ich habe das ganze mal gemacht... Es ist noch keine "richtiges" PlugIn, aber ich werde mal erläutern wie es funktioniert. Vorschau (Zur Zeit nur mit MySQL)
Als erstes benötigt man ein Plug-In zum abspeichern der Aufrufe. Ich bin da noch etwas uneinfallsreich...
Name: " inc/plugins/saveaction.php"
PHP-Code: <?php if(!defined("IN_MYBB")) { die("Please make sure IN_MYBB is defined."); }
$plugins->add_hook("pre_output_page", "saveuseractions_save");
function saveuseractions_info() { return array( "name" => "Save User Actions", "description" => "This PlugIn saves each action users and guests do in your MyBB.", "website" => "http://das-computer-board.de/", "author" => "MaR-V-iN", "authorsite" => "http://das-computer-board.de/", "version" => "1.0", "guid" => "", "compatibility" => "14*" ); }
function saveuseractions_save() { global $mybb; $uid = $mybb->user['uid']; if ($uid != 0) { $action = $_SERVER['REQUEST_URI']; $time = time(); $sql = "INSERT INTO `users_actions` ( `uid` , `action_time` , `action` ) VALUES ( '$uid', '$time' , '$action' );"; $query = $db->query($sql); } } ?>
Kein sonderlich langer Code, aber er tut was er verspricht.
HINWEIS: Zum verwenden muss eine neue Tabelle mit dem Namen "users_actions" und den Spalten "uid" (Int), "action_time" (int) und "action (string) in der Datenbank erstellt werden.
Als nächstes kommt eine Möglichkeit die Daten abzufragen:
Name: " liveticker.php"
PHP-Code: <?php define("IN_MYBB", 1); define('THIS_SCRIPT', 'liveticker.php'); define("NO_ONLINE", 1); //Do not show in who-is-online-list
$templatelist = ""; //Do not need any extra templates require_once "./global.php";
$last_action_written = "";
if(isset($_GET['last'])) $last = mysql_real_escape_string($_GET['last']); else $last = 0; $query = $db->query("SELECT * FROM `users_actions` WHERE `users_actions`.`uid` != 0 AND `users_actions`.`action_time` > $last AND (`users_actions`.`action` LIKE '%thread-%.html%' OR `users_actions`.`action` LIKE '/newreply.php%' OR `users_actions`.`action` LIKE '/private.php%' OR `users_actions`.`action` LIKE '/search.php%' OR `users_actions`.`action` LIKE '/stats.php%' OR `users_actions`.`action` LIKE '/irc.php%' OR `users_actions`.`action` LIKE '/member.php?action=logout%' OR `users_actions`.`action` LIKE '/member.php?action=login%' ) ORDER BY `users_actions`.`action_time` DESC LIMIT 0,50");
$done = false; while($erg = $db->fetch_array($query)) { $u = get_user($erg['uid']); $p = $erg['action'];
$p = eregi_replace("[^ä]*forum-([0-9]+).html[^ä]*", "forumdisplay.php?fid=\\1", $p); $p = eregi_replace("[^ä]*forum-([0-9]+)-page-([0-9]+).html[^ä]*", "forumdisplay.php?fid=\\1", $p); $p = eregi_replace("[^ä]*thread-([0-9]+).html[^ä]*", "showthread.php?tid=\\1", $p); $p = eregi_replace("[^ä]*thread-([0-9]+)-page-([0-9]+).html[^ä]*", "showthread.php?tid=\\1", $p); $p = eregi_replace("[^ä]*thread-([0-9]+)-lastpost.html[^ä]*", "showthread.php?tid=\\1", $p); $p = eregi_replace("[^ä]*thread-([0-9]+)-nextnewest.html[^ä]*", "showthread.php?tid=\\1", $p); $p = eregi_replace("[^ä]*thread-([0-9]+)-nextoldest.html[^ä]*", "showthread.php?tid=\\1", $p); $p = eregi_replace("[^ä]*thread-([0-9]+)-newpost.html[^ä]*", "showthread.php?tid=\\1", $p); $p = eregi_replace("[^ä]*thread-([0-9]+)-post-([0-9]+).html[^ä]*", "showthread.php?tid=\\1", $p); $p = eregi_replace("post-([0-9]+).html", "showthread.php?pid=\\1", $p);
if(strpos($p,"showthread.php")!==false) { $pos = strpos($p,"tid=")+4; $tid = substr($p,$pos); $thread = get_thread($tid); $thread_name = $thread['subject']; $thread_link = get_thread_link($tid); $loc = "liest das Thema <a href=\"$thread_link\" title=\"$thread_name\">$thread_name</a>."; } elseif(strpos($p,"newreply.php")!==false) { $pos = strpos($p,"tid=")+4; $tid = substr($p,$pos); $thread = get_thread($tid); $thread_name = $thread['subject']; $thread_link = get_thread_link($tid); $loc = "schreibt eine Antwort im Thema <a href=\"$thread_link\" title=\"$thread_name\">$thread_name</a>."; } elseif(strpos($p,"member.php?action=logout")!==false) { $loc = "meldet sich ab. Schönen Tag noch."; } elseif(strpos($p,"member.php?action=login")!==false) { $loc = "meldet sich an. Hallo!"; } elseif(strpos($p,"private.php")!==false) { $loc = "benutzt das <a href=\"/private.php\">PN-System</a>."; } elseif(strpos($p,"stats.php")!==false) { $loc = "sieht sich die <a href=\"/stats.php\">Statistiken</a> an."; } elseif(strpos($p,"search.php")!==false) { $loc = "<a href=\"/search.php\">durchsucht</a> das Forum."; }
$username = build_profile_link(format_name($u['username'], $u['usergroup'], $u['displaygroup']), $erg->uid); if (isset($loc) && $last_action_written != $loc && strpos($loc,' title=""></a>')===false) { if ($done==false) { echo $username." ".$loc; $done = true; } else { echo "<br>".$username." ".$loc; } $last_action_written = $loc; } }
So damit werden die Daten ausgespuckt. Die Texte können ggf. abgeändert werden.
Jetzt müssen die Daten noch per Ajax ausgelesen und angezeigt werden. Dafür eine JavaScript-Datei.
Name: " jscripts/ticker.js"
PHP-Code: var req = null; var lastGot = ""; function createXMLHttpRequest() { try { req = new ActiveXObject("MSXML2.XMLHTTP"); } catch (err_MSXML2) { try { req = new ActiveXObject("Microsoft.XMLHTTP"); }catch (err_Microsoft) { if (typeof XMLHttpRequest != "undefined") req = new XMLHttpRequest; } } }
function handleGOT() { switch(req.readyState) { case 4: jetzt = parseInt(new Date().getTime()/1000); if(req.status!=200) { window.setTimeout("loadit("+jetzt+");",10000); } else { var res = req.responseText; if(res != res.replace("a","n") && res!="" && res != lastGot) { lastGot = res; var result = res.split("<br>"); var elem = document.getElementById("liveticker"); for (var ren =result.length-1;ren >= 0; ren--) { var Row = elem.insertRow(0); var Cell = Row.insertCell(-1); Cell.innerHTML = result[ren]; Cell.className = "trow1"; }
} window.setTimeout('loadit('+jetzt+');',5000); } break;
default: return false; break; } }
function loadit(since) { req.open("GET","/liveticker.php?last="+since, true); req.onreadystatechange = handleGOT; req.send(null); }
function generateTickerTable() { document.write('<'+'div style="height:174px; background-color: #365679;"><'+'div id="tickerarea" style="max-height:173px; overflow:hidden; background-color: #365679;"><'+'table border="0" cellspacing="0" cellpadding="4" class="tborder" style="height:173px; overflow:hidden;"><'+'thead><'+'tr><'+'td class="thead"><'+'div><'+'strong>LiveTicker<'+'/strong><'+'/div><'+'/td><'+'/tr><'+'/thead><'+'tbody style="" id=' + '"liveticker">'); document.write('<'+'/tbody><'+'/table><'+'/div><'+'/div>'); }
Tja das wars auch schon. nun noch den folgenden code in ein passendes Template (zB. index) einsetzen:
PHP-Code: <script type="text/javascript" src="jscripts/ticker.js"></script> <script type="text/javascript"> generateTickerTable(); createXMLHttpRequest(); window.setTimeout("loadit(0);",100); </script>
Wer mir einen gefallen tun will darf gerne auch dahinter noch den folgenden Code setzen:
PHP-Code: PlugIn by <a href="http://das-computer-board.de/">Das Computer Board</a>
MFG
MaR-V-iN
PS: Natürlich muss das erstellt PlugIn auch aktiviert werden.
Beiträge: 257
Themen: 28
Registriert seit: 15.10.2008
MyBB-Version: 1.6.1
Hallo,
finde ich ja gar nicht schlecht diesen Tick-er aber gibt es den schon als Fertiges Plugin
Gruß Norbert
In der Ruhe liegt die Kraft.
4 x 1.6 PHP Version 5.2.11-0 MySQL 5.0.77
|