Hallo, Gast! (Registrieren)

Letzte Ankündigung: MyBB 1.8.38 veröffentlicht (30.04.24)


Benutzer, die gerade dieses Thema anschauen: 2 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 >= 0ren--) 
{
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="+sincetrue);
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.066 01.03.2018, 10:24
Letzter Beitrag: lenox
  Xbox Live Gamercard in Signatur anzeigen lassen pixlam 3 2.848 15.05.2011, 14:29
Letzter Beitrag: pixlam
  Ticker Rotstift 5 2.381 18.06.2010, 10:19
Letzter Beitrag: Rotstift
  [Suche] Live Search bStyle 5 4.269 23.04.2010, 20:12
Letzter Beitrag: Guido Lehne
  Laufschrift / Ticker Manni 2 2.245 31.03.2010, 18:45
Letzter Beitrag: Manni