Archiv verlassen und diese Seite im Standarddesign anzeigen : Conditionals in zusätzlicher Navbar
Hi,
ich habe die zusätzliche Navbar (http://www.vbulletin-germany.com/forum/showthread.php?threadid=24813) ins 3.8 eingebaut und jetzt stellt sich die Frage, sind da die von Pathor genannten Conditionals (http://www.vbulletin-germany.com/forum/showthread.php?t=24195) ganz normal einsetzbar?
Im speziellen gehts mir ums eigene Menü, ich würd da gerne alles vom Kontrollzentrum was unter "Neue.... Bilder usw." steht, da rein packen wollen.
Irgendwie ging da aber nicht wie sonst, hab es im Plugin als <if...> versucht, aber das hat es nich angenommen.
Kurz und gut, sind da die normalen Conditionals möglich?
LG Franzis
Hi,
ich habe die zusätzliche Navbar (http://www.vbulletin-germany.com/forum/showthread.php?threadid=24813) ins 3.8 eingebaut und jetzt stellt sich die Frage, sind da die von Pathor genannten Conditionals (http://www.vbulletin-germany.com/forum/showthread.php?t=24195) ganz normal einsetzbar?Nein! Der Unterschied besteht hierbei, das bei Plugins (PHP) die Conditions etwas anders aussehn...
Beispiel: Obere navbar ist nur für Mitglieder sichtbar
if ($vbulletin->userinfo['userid'])
{
// navbar
}
Beispiel: Die obere navbar ist nur für Benutzer einer bestimmten Benutzergruppe sichtbar
// <!-- SMod's / Admins Only -->
if (in_array($vbulletin->userinfo['usergroupid'], array(5, 6)))
{
$output = str_replace('<!-- breadcrumb, login, pm info -->', '<!-- Navbar Addon -->
...
Nachtrag: Hab soeben gesehn, das in der von Pathor beschriebenen Conditions alles auf Seite 2 ab Beitrag #36 beschrieben steht. Dies hat Mystics dort sehr schön erklärt ;)
Thx MikeD,
schau mir das mal genauer an, aber du hast mir schon geholfen, weil es geht nun mal als erstes um Adminaktionen :)
LG Franzis
Also ich hab nun 2 Stunden probiert, aber ich schaff es nicht :(
Please helf me!!
Wo gehört das nun hin, bei dem Plugin:
$output = str_replace('<!-- breadcrumb, login, pm info -->', '<!-- Navbar Addon -->
<div class="tborder" style="padding: 1px; border-bottom-width: 0px;">
<table align="center" border="0" cellpadding="0" cellspacing="0" width="100%">
<tr align="center">
<td class="vbmenu_control"><a href="/vbcms.php">Startseite</a></td>
<td class="vbmenu_control"><a href="/forum/calendar.php">Kalender</a></td>
<td class="vbmenu_control"><a href="/forum/faq.php" accesskey="5">Hilfe</a></td>
<td class="vbmenu_control"><a href="/forum/arcade.php" accesskey="5">Spielhalle</a></td>
<td class="vbmenu_control"><a href="/forum/misc.php?do=donate">Spende</a></td>
<td class="vbmenu_control"><a href="' . $vbulletin->options['contactuslink'] . '">' . $vbphrase['contact_us'] . '</a></td>
<td class="vbmenu_control"><a href="staff.php">SuS-Team</a></td>
<td id="eigenesmenue" class="vbmenu_control"><a href="#">Moderation</a> <script type="text/javascript"> vbmenu_register("eigenesmenue"); </script></td>
<td class="vbmenu_control"><a href="/vbcms.php?area=vbcmsarea_content&contentid=11">Impressum</a></td>
</tr>
</table>
</div>
<!-- Eigenes Menue -->
<div class="vbmenu_popup" id="eigenesmenue_menu" style="display:none">
<table cellpadding="4" cellspacing="1" border="0">
<tr><td class="thead">Neue ....</td></tr>
<tr><td class="vbmenu_option"><a href="moderation.php?do=viewvms&type=new">Profilnachrichten</a></td></tr>
<tr><td class="vbmenu_option"><a href="moderation.php?do=viewgms&type=new">Nachrichten in IG</a></td></tr>
<tr><td class="vbmenu_option"><a href="moderation.php?do=viewdiscussions&type=new">Diskussionen in IG</a></td></tr>
<tr><td class="vbmenu_option"><a href="moderation.php?do=viewpcs&type=new">Bildkommentare</a></td></tr>
<tr><td class="vbmenu_option"><a href="moderation.php?do=viewpics&type=new">Bilder in Alben</a></td></tr>
<tr><td class="thead">Post Templates</td></tr>
<tr><td class="vbmenu_option"><a href="profile.php?do=posttemplates">Verwaltung</a></td></tr>
</table>
</div>
<!-- / Eigenes Menue -->
<!-- / Navbar Addon -->
<!-- breadcrumb, login, pm info -->', $output);
Ich will den Bereich "eigenesmenue" eben nur für Usergruppen 5,6,7 sichtbar machen, aber alle Versuche scheitern.
Wäre nett wenn mir da jemand auf die Sprünge helfen könnt :)
LG Franzis
StGaensler
30.12.2008, 01:23
Hallo,
man könnte das so direkt lösen, ich teile den Code der Übersicht halber aber auf zwei Teile auf:
$output = str_replace('<!-- breadcrumb, login, pm info -->', '<!-- Navbar Addon -->
<div class="tborder" style="padding: 1px; border-bottom-width: 0px;">
<table align="center" border="0" cellpadding="0" cellspacing="0" width="100%">
<tr align="center">
<td class="vbmenu_control"><a href="/vbcms.php">Startseite</a></td>
<td class="vbmenu_control"><a href="/forum/calendar.php">Kalender</a></td>
<td class="vbmenu_control"><a href="/forum/faq.php" accesskey="5">Hilfe</a></td>
<td class="vbmenu_control"><a href="/forum/arcade.php" accesskey="5">Spielhalle</a></td>
<td class="vbmenu_control"><a href="/forum/misc.php?do=donate">Spende</a></td>
<td class="vbmenu_control"><a href="' . $vbulletin->options['contactuslink'] . '">' . $vbphrase['contact_us'] . '</a></td>
<td class="vbmenu_control"><a href="staff.php">SuS-Team</a></td>
<!-- ###eigenesmenue### -->
<td class="vbmenu_control"><a href="/vbcms.php?area=vbcmsarea_content&contentid=11">Impressum</a></td>
</tr>
</table>
</div>
<!-- / Navbar Addon -->
<!-- breadcrumb, login, pm info -->', $output);
if (in_array($vbulletin->userinfo['usergroupid'], array(5, 6, 7)))
{
$output = str_replace('<!-- ###eigenesmenue### -->', '<td id="eigenesmenue" class="vbmenu_control"><a href="#">Moderation</a> <script type="text/javascript"> vbmenu_register("eigenesmenue"); </script></td>', $output);
$output = str_replace('<!-- breadcrumb, login, pm info -->', '<!-- Eigenes Menue -->
<div class="vbmenu_popup" id="eigenesmenue_menu" style="display:none">
<table cellpadding="4" cellspacing="1" border="0">
<tr><td class="thead">Neue ....</td></tr>
<tr><td class="vbmenu_option"><a href="moderation.php?do=viewvms&type=new">Profilnachrichten</a></td></tr>
<tr><td class="vbmenu_option"><a href="moderation.php?do=viewgms&type=new">Nachrichten in IG</a></td></tr>
<tr><td class="vbmenu_option"><a href="moderation.php?do=viewdiscussions&type=new">Diskussionen in IG</a></td></tr>
<tr><td class="vbmenu_option"><a href="moderation.php?do=viewpcs&type=new">Bildkommentare</a></td></tr>
<tr><td class="vbmenu_option"><a href="moderation.php?do=viewpics&type=new">Bilder in Alben</a></td></tr>
<tr><td class="thead">Post Templates</td></tr>
<tr><td class="vbmenu_option"><a href="profile.php?do=posttemplates">Verwaltung</a></td></tr>
</table>
</div>
<!-- / Eigenes Menue -->
<!-- breadcrumb, login, pm info -->', $output);
}
else
{
$output = str_replace('<!-- ###eigenesmenue### -->', '', $output);
}(Den else-Zweig könntest du dir auch sparen, der Platzhalter wird nicht angezeigt, da er ein HTML-Kommentar ist.)
Für den "unübersichtlicheren" Weg kannst du die Kurzschreibweise für if-Bedingungen verwenden:
$condition ? 'true' : 'false'Damit kannst du die Bedingungen direkt in den vorhandenen Quelltext eintragen, nur ist der dann nicht mehr ganz so übersichtlich ;)
Viele Grüße
Stefan
Passt perfekt, vielen vielen Dank Stefan.
Aber so einfach wie du es hinstellst, so is es nicht :P
Also wieder was gelernt, thx noch mal an alle Mitwirkenden.
LG Franzis
Kleiner Verbesserungsvorschlag:
Statt
if (in_array($vbulletin->userinfo['usergroupid'], array(5, 6, 7))) würde ich is_member_of verwenden, hat den Vorteil das nicht nur die Primäre Benutzergruppe überprüft wird.
Und wo würde das genau hingehören ragtek?
Nur usergroupid gegen is_member_of tauschen?
LG Franzis
Sorry.
if (is_member_of($vbulletin->userinfo['usergroupid'], 5, 6, 7))
{
$output =
Perfekt, klappt, danke!
LG Franzis
Allein schon wegen der Performace würde ich dieses AddOn entsprechend abändern. Möglichkeiten gibt es hier genug. TMS wäre zum Beispiel die bessere Wahl. Oder man schreibt sich den Template Code entprechend neu und verwendet dafür zwei ensprechende Plugins mit den Hooks "cache_templates" / "global_start". Somit würde vB nicht zu sehr im Speicherbereich belastet!
Begründung: Es wäre besser, hier keine $output Variable zu benutzen. Der String $output enthält den kompletten Inhalt der Seite - ist also riesig. Eventuell kann es hier passieren, das dadurch die vorhandene Speicherauslastung zu groß wird.
Beispiel: Besser wäre es, hier ein zusätzliches Template zu erstellen und anschließend per (Beispiel: $navbar_top) im enstprechendem Plugin auf global_start sowie cache_templates abzurufen! Also Template erstellen und $navbar_top per TMS einbauen. Fertig ;)
Nochimmer zu kompliziert.
Dann kann man ja gleich alles per TMS machen und spart sich das 2. Template...
Puh, ihr verwirrt mich :P
Ok, ich denk ich bin nicht allein, wenn man von sich behaupten muss - ich hab keinen Plan von PHP
Aber solche wie ich müssen uns nun mal auf Profis wie euch verlassen und wenn es weitere Verbesserungen gibt, dann immer gerne her damit ;)
Es erfüllt aber nun mal seinen Zweck, in wie weit es sich problematisch auf Performance auswirkt, das mag ich nicht bewerten.
LG Franzis
Nochimmer zu kompliziert.Kompliziert? Ganz im Gegenteil :)
Dann kann man ja gleich alles per TMS machen und spart sich das 2. Template...Eben nicht! Ein ganzes Template per TMS auszutauschen wäre nicht effizient, denn diese Idee hatte ich Anfangs auch - wurde aber später eines besseren belehrt ;) Und drei mal darfst Du raten, von wem :D
Wer redet von ganzes Template austauschen?
Die zusätzliche Navbar ist doch nur eine zusätzliche Tabelle über der eigentlichen Navbar.
Suche=> <!-- breadcrumb, login, pm info --> drüber deine Tabelle, fertig?!
Meinen wir vielleicht 2 paar verschiedene Schuhe?
Wer redet von ganzes Template austauschen?So hab ich aber Deine Ausage Dann kann man ja gleich alles per TMS machen und spart sich das 2. Template... verstanden :)
Aso.
Nein, eben nicht das ganze Template austauschen, sondern einfach nur die obere Tabelle per TMS ins original Navbartemplate einbinden.
Das ist das, was ich eigentlich versuche zu erklärn:D
Euer Fachkauderwelsch soll heißen, wenn es als Template eingebaut ist, dann verbraucht es weniger Performance-Power?
Ich hatte es ja mal al Temlateerweiterung, also ich fand nur den Einbau via Plugin praktisch :(
Franzis
Weil wir gerade beim Kauderwelschen sind. Ich versuche das Blog Menü der Navbar in die zusätzliche Navbar zu bekommen, genau wie das Community Menü da ich die originale Navbar nicht nutze.
Das mit dem Blog Menü hab ich noch nicht hinbekommen.
Nein, eben nicht das ganze Template austauschen, sondern einfach nur die obere Tabelle per TMS ins original Navbartemplate einbinden.Dann hab ich Dich mißverstanden :o Ja, so in etwa ist es bei mir auch.
Das heißt: Ich hab den kompletten HTML Code für die obere Navbar in ein separates Template navbar_top eingefügt und die entsprechenden Plugins per Hook 'global_start und cache_templates gesetzt. Ist für mich jedenfalls der einfachste Weg :)
<plugin active="1" executionorder="5">
<title>Top Navbar 'Global'</title>
<hookname>global_start</hookname>
<phpcode><![CDATA[$insert = '$navbar_top';
$vbulletin->templatecache['navbar'] = str_replace($insert,$insert.fetch_template('navbar_top'),$vbulletin->templatecache['navbar']);]]></phpcode>
</plugin>
<plugin active="1" executionorder="5">
<title>Top Navbar 'Cache'</title>
<hookname>cache_templates</hookname>
<phpcode><![CDATA[$globaltemplates = array_merge($globaltemplates, array('navbar_top'));]]></phpcode>
</plugin>
Alles was dann noch gemacht wird, ist im Template navbar einfach per TMS die Variable $navbar_top einzufügen. Fertig :)
Euer Fachkauderwelsch soll heißen, wenn es als Template eingebaut ist, dann verbraucht es weniger Performance-Power?Heutzutage spielt es sowie u.A. eine wesentliche Rolle, viel RAM zu haben. Je mehr RAM, destor besser. Trotzallerdem sollte man, wenn möglich, auch vermeiden, vBulletin mit unnötiger Ballast zu belasten. Wenn man sich mal alles per print_r($vbulletin); anzeigen lassen möchte und sieht, was vBulletin da so alles verwaltet, denkt man anders. Das Ergebnis füllt so einige Seiten ;)
Powered by vBulletin® Version 4.1.12 Copyright ©2012 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.