Einem bestimmten Tab (page node) HTML Code hinzufügen?

otto

Die 5k-Labertasche
Lizenzinhaber
Registriert
11. Dez. 2010
Beiträge
5.180
Punkte
448
XF Version
  1. 2.2.15
XF Instanz
Hosting
PHP-Version
8.2.x
MySQL/MariaDB
10.3.x
Provider/Hoster
Strato/Hetzner
Hallo,

ich möchte das in der Navbar bei einem bestimmten Tab (ID 200) nach dem Namen noch ein Zähler (Chat Counter) angezeigt wird, der über ein Script erzeugt/abgerufen wird und eine Zahl ausgibt.

Das Script bzw. dessen Aufruf:
PHP:
<script type="text/javascript" src="../verzeichnis/online.php?mode=2"></script></a>
Es wird eine Zahl innerhalb Klammern ausgegeben: "(x)" und "verzeichnis" ist natürlich der richtige Ordner.

Ich hab es im Template "navigation" versucht: (NodesAsTabs ist installiert)
Zeile 75:
PHP:
                <a href="{$extraTab.href}" class="navLink">{$extraTab.title}
<xen:if is="{$extraTab.counter}"><strong class="itemCount"><span class="Total">{$extraTab.counter}</span><span class="arrow"></span></strong></xen:if></xen:if></a>

Neu:
PHP:
                <a href="{$extraTab.href}" class="navLink">{$extraTab.title}
<xen:if is="{$extraTab.counter}"><strong class="itemCount"><span class="Total">{$extraTab.counter}</span><span class="arrow"></span></strong></xen:if>
<xen:if is="{$node_id} == '200'"><script type="text/javascript" src="../verzeichnis/online.php?mode=2"></script></xen:if></a>

Zeile 126:
PHP:
                <a href="{$extraTab.href}" class="navLink">{$extraTab.title}
<xen:if is="{$extraTab.counter}"><strong class="itemCount"><span class="Total">{$extraTab.counter}</span><span class="arrow"></span></strong></xen:if></a>

Neu:
PHP:
                <a href="{$extraTab.href}" class="navLink">{$extraTab.title}
<xen:if is="{$extraTab.counter}"><strong class="itemCount"><span class="Total">{$extraTab.counter}</span><span class="arrow"></span></strong></xen:if>
<xen:if is="{$node_id} == '200'"><script type="text/javascript" src="../verzeichnis/online.php?mode=2"></script></xen:if></a>

Ohne die Conditionals läuft das Script - jedoch bei jedem ExtraTab. Mit den Conditionals wie gezeigt wird nichts ausgeführt.

Könnte mir da jemand bei helfen? Im Idealfall würde die Zahl in einer roten Blase angezeigt wie eben auch bei neuen Beiträgen oder den Benachrichtigungen. Notfalls eben nur als rot gefärbter Text. Danke schon mal. :)
 
Es gibt doch ein Add On von Waindigo für HTML in Nodes. Vielleicht damit?
 
Öhm das hilft nur bei den Node Namen - aber wie es scheint nicht bei den Tabs zu nem Node. Hmmm...

html_01.png

Also brauch ich doch noch nen anderen Tipp...
 
Zuletzt bearbeitet:
Ich würde das vermutlich völlig anders angehen, und die Werte mit JavaScript einfügen.

Jeder Tab von Waindigo hat eine Klasse wie z.B. nodetab147. Ich vermute das die 147 die Forum oder nodeID ist.

So kannst du in JavaScript mit jQuery jeden Tab ansteuern mittels $('.nodetab147') und dann kannstz du das DOM dort beliebig verändern.

Die JS Datei mittels <xen:require is="pfad/zu/deiner/datei.js"> einbinden.

Wie kommen die Daten in das JS? Wo kommen die her?
Notfalls kannst du die über Templatemodifikationen und data- attribute einschleusen.
 
Uih... das muss ich mir mal in Ruhe durch den Kopf gehen lassen.

Fragen:
1. Wie machen das andere Add-ons die da an einem Tab (zB. den neuen Beiträgen mit Zähler) diese roten Alert Blasen anhängen?

Der Zähler wird vom Blab!Chat geliefert, welcher mit dem Forum gekoppelt ist (Benutzer, Gruppenrechte, Profile). Und dort aus der Datei "online.php" die ich hier mal reinhaue (ist nicht groß):
PHP:
<?php
require_once 'config.php';
require_once 'incl/main.inc';

$separator=', ';
$hyb_style='position:fixed;color:#000;background-color:#eee;border:1px solid #333;padding:5px;';

if(isset($_GET['mode'])){$mode=(int)$_GET['mode'];}else{$mode=0;}

dbconnect();
$query='SELECT usr_name FROM '.$dbss['prfx']."_online WHERE rtime=0 OR ($timestamp-rtime)<20 AND status<3";
$result=neutral_query($query);

$online=array();
while($row=neutral_fetch_array($result)){
$online[]=addslashes(htmrem($row['usr_name']));}

sort($online);
$numonl=count($online);
$online=implode($separator,$online);


switch($mode){
case 0 : print 'document.write(\''.$numonl.'\');';break;
case 1 : print 'document.write(\''.$online.'\');';break;
case 2 :
$create_dv_nmbr='<a href="#" onclick="sho_list(event);return false"><span id="blab_online_nmbr">(<b>'.$numonl.'</b>)</span></a>';
$create_dv_list='<span id="blab_online_list" onclick="set_empty();return false" style="'.$hyb_style.';display:none">&nbsp;'.$online.'&nbsp;</span>';
break; default: print 'document.write(\'No such mode...\');';break;}

if($mode<>2){die();}
?>

function set_empty(){
document.getElementById('blab_online_list').style.display='none';
document.getElementById('blab_online_nmbr').innerHTML='';}

function sho_list(evt){
if(typeof window.external=='object' && typeof document.all=='object'){cX=parseInt(evt.clientX);cY=parseInt(evt.clientY)}else{cX=evt.pageX;cY=evt.pageY}
document.getElementById('blab_online_list').style.top=cY+'px';
document.getElementById('blab_online_list').style.left=cX+'px';
document.getElementById('blab_online_list').style.display='block';}

document.write('<?php print $create_dv_nmbr.$create_dv_list;?>');
setTimeout('set_empty()',20000);

Abgerufen werden kann diese Datei/Script so: http://hot-things.net/cs/article.php?aid=192
Man kann die online.php also ohne oder mit 2 Parametern aufrufen, Mode1 oder Mode2.

Mit Javascript kenne ich mich nicht wirklich aus - ich hab da nie wirklich was gelernt zu. Bei mir ist wie bei vielen learning by doing bzw. schlicht try and error :D ;). Das schaut bei HTML deutlich besser aus, bei PHP und CSS zumindest noch ausreichend. ;)
 
OMG! Das ist ja Vanilla JS. Schrecklich, mit jQuery ist das etwas einfacher.

Ich vermute das einfach ein DOM Element mit einer bestimmten Klasse generiert werden muss. Heute schaff ich das aber nicht.
 
Nur kein Stress - bin ja froh wenns denn dann mal läuft. Ne Spende wäre dann freilich auch drinne. :) ;)
 
Zurück
Oben