Hallo, Gast! (Registrieren)

Letzte Ankündigung: MyBB 1.8.39 veröffentlicht (02.06.25)


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste
Live Ticker Plug-In
#1
Wink 
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
Zitieren
#2
So etwas habe ich noch nicht gesehen.
[Bild: banner.png]

Bitte die Foren-Regeln beachten und im Profil die verwendete MyBB-Version angeben.
Zitieren
#3
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
Zitieren
#4
*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.
Zitieren
#5
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. Cool

4 x 1.6 PHP Version 5.2.11-0 MySQL 5.0.77
Zitieren


Möglicherweise verwandte Themen…
Thema Verfasser Antworten Ansichten Letzter Beitrag
Question Live Search im Forum lenox 0 1.211 01.03.2018, 11:24
Letzter Beitrag: lenox
  Xbox Live Gamercard in Signatur anzeigen lassen pixlam 3 3.101 15.05.2011, 15:29
Letzter Beitrag: pixlam
  Ticker Rotstift 5 2.696 18.06.2010, 11:19
Letzter Beitrag: Rotstift
  [Suche] Live Search bStyle 5 4.569 23.04.2010, 21:12
Letzter Beitrag: Guido Lehne
  Laufschrift / Ticker Manni 2 2.428 31.03.2010, 19:45
Letzter Beitrag: Manni