Florians Forum » Webmaster » Xobor (Homepagemodules & Dynamicboard) » Funktionen & Template » Business-Template: Statistik über Link öffnen

Hallo Florian,
in meinem Forum (Business-Template) habe ich die Statistik zugeklappt. Bei Bedarf wird sie per Klick geöffnet.
Frage:
Wie kann ich es erreichen, das ich per Link zur Statistik gelange und sie gleich geöffnet wird?
Kannst Du mir da helfen?
Hier einige Ansätze:
Der Link (funktioniert leider nicht):
Der Container:
<div class="box cat" id="cat_100">
<div class="boxheader2"><a name="category100" class="cat">Forum Statistiken</a></div>
<div class="boxcontent" style="display:none;">
Test Test Test
</div></div></div>
Das JavaScript (XOBOR):
$plus = $("<img style='margin:3px;float:right;' class='toggle_img expand' src='{{global_toggle_expand}}' alt='Ausklappen' title='Ausklappen' />");
$minus = $("<img style='margin:3px;float:right;' class='toggle_img contract' src='{{global_toggle_contract}}' alt='Einklappen' title='Einklappen' />");
$('.main').find('.boxheader').css('cursor','pointer');
$('.main').find('.cat').find('.boxheader').prepend($minus.clone());
$('.main').find('.cat').find('.boxheader2').prepend($plus.clone());
$('.main').find('.cat').find('.boxheader').click(function(){$(this).parent().find('.boxcontent').toggle(); switchToggler($(this));});
$('.main').find('.cat').find('.boxheader2').click(function(){$(this).parent().find('.boxcontent').toggle();switchToggler($(this));});
var hidden_cats;
hidden_cats = xGetCookie('cats_h') ? xGetCookie('cats_h').split(",") : [];
function switchToggler($el){
$i = $el.find('.toggle_img');
id = $i.closest('.cat').attr('id');
int_id = id.replace('cat_','');
if($i.hasClass('expand')){$i.replaceWith($minus.clone());cur_i = hidden_cats.indexOf(int_id); hidden_cats.splice(cur_i,1); xSetCookie('cats_h',hidden_cats.join(','),365);}
else{$i.replaceWith($plus.clone());if(hidden_cats.indexOf(int_id)==-1){hidden_cats.push(int_id); xSetCookie('cats_h',hidden_cats.join(','),365);}}
}
try{
if(hidden_cats.length){ $.each(hidden_cats,function(){cat = $('#cat_'+this); if(cat.find('.toggle_img').hasClass('contract')){cat.find('.boxheader').trigger('click');}});}
}catch(e){}
</script>

Gruß
Wolfgang

Hallo Wolfgang,
ich denke hiermit kannst wirst du was anfangen können:
<a href="#ende2" onclick="$('#cat_100').find('.boxheader2').trigger('click');">Zur Forum Statistik</a>
Nach aktuellem Stand in deinem Forum habe ich hier "#ende2" als Anker verwendet und der Balken war mit der Klasse boxheader2 ausgestattet. Da hier ohnehin nur der Header aus cat_100 angeklickt wird, kannst du evtl. auf deine extra boxheader2-Klasse verzichten und wieder die standardmäßige verwenden, spart ja auch CSS-Anweisungen.
Die Funktion click ist keine global definierte Funktion, sondern kann nur über die entsprechenden HTML-Elemente ausgelöst werden. Alternativ zu .trigger('click'); würde auch .click(); funktionieren, trigger löst allgemein eine Aktion aus. Innerhalb von onclick brauchst du auch kein "javascript:" voranstellen, alles darin enthaltene wird automatisch als JavaScript interpretiert.
Bei dieser Vorgehensweise werden nicht die einzelnen für das gewünschte Verhalten wirklich benötigten Funktionen aufgerufen, sondern nur ein bestehendes Verhalten, in diesem Fall bei einem Klick, verwendet. So in etwa siehst du das auch ganz am Ende im geposteten Xobor-Skript, dort wird auch nur ein Klick ausgelöst anstatt das Verhalten korrekt nachzubilden. Ist meistens die etwas einfachere Methode, da man sich keine genauen Gedanken mehr über den Ablauf machen muss.

Hallo Florian,
funktioniert, wenn ich in den Link in z.B. "Untere Leiste" einfüge. Super!
Aber!
Ich wollte den Link ins Portal, in die Box "Statistik" einfügen. Den Link musste ich etwas abändern, aber die Statistik selber öffnet sich nicht. Geht es aus der Box dann nicht?
Habe den Link erstmal eingebaut.
Portal: Portal
<a href="/forum.php#ende2" onclick="$('#cat_100').find('.boxheader2').trigger('click');">Zur Forum Statistik</a>
Gruß
Wolfgang

Hallo Wolfgang,
das funktioniert so nicht, da noch ein Seitenwechsel dazwischen erfolgt. Alles in onclick wird noch im Portal ausgeführt. JavaScript lässt sich nicht ohne weiteres auf der nächsten Seite fortsetzen. Websites, die das augenscheinlich können, wechseln meistens nicht die aktuelle Seite sondern tauschen nur deren Inhalte aus (Ajax).
In deinem Fall musst du mit einem Trick nachhelfen. Eine Möglichkeit wäre es, ein Cookie zu setzen und nach dem Seitenwechsel abzufragen. Da du aber einen Anker für die Statistik hast, bietet sich eine Variante ohne Cookies an.
2
3
4
5
6
$(document).ready(function(){
var isStatOpen = (document.URL.search(/#ende2/) != -1);
if (isStatOpen) {
$('#cat_100').find('.boxheader2').trigger('click');
}
});
Dieses Skript musst du einfach nur irgendwo auf der Seite mit der Statistik einbinden. Wenn am Ende der URL der Anker #ende2 steht, wird der Klick auf die Statistik simuliert und damit auch das Öffnen ausgelöst. Das Attribut onclick im Portal kannst du somit wieder entfernen, wichtig ist eben nur #ende2 hinten im href-Attribut.

Hallo Florian,
es funktioniert jetzt!
Am Anfang gab es Schwierigkeiten. Irgendwie öffnete die Statistik nicht immer, besonders im angemeldeten Zustand.
Als Gast hat es funktioniert.
Ich habe den Cache gelöscht. Dann ging es.
PS: Das Plugin "Schnellzugriff-Seitenmenü" von Olaf, funktioniert komischerweise auch nur als Gast tadellos (ist z.Z aber nicht installiert).
Auf jeden Fall geht es. Ich werde mal alles durchprobieren, aufrufen, anklicken, ....
Mal sehen, ob das Öffnen dann noch tadellos geht. An Deinem klasse Script, denke ich, liegt es dann nicht.
Portal: Portal
Bis dann
Wolfgang