PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Conditionals in zusätzlicher Navbar



franzis
29.12.2008, 14:18
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

MikeD
29.12.2008, 18:09
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 -->
...

MikeD
29.12.2008, 18:14
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 ;)

franzis
29.12.2008, 18:20
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

franzis
30.12.2008, 00:40
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

franzis
30.12.2008, 08:43
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

ragtek
30.12.2008, 08:55
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.

franzis
30.12.2008, 09:04
Und wo würde das genau hingehören ragtek?

Nur usergroupid gegen is_member_of tauschen?


LG Franzis

ragtek
30.12.2008, 09:12
Sorry.



if (is_member_of($vbulletin->userinfo['usergroupid'], 5, 6, 7))
{
$output =

franzis
30.12.2008, 09:22
Perfekt, klappt, danke!

LG Franzis

MikeD
30.12.2008, 12:26
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 ;)

ragtek
30.12.2008, 12:33
Nochimmer zu kompliziert.
Dann kann man ja gleich alles per TMS machen und spart sich das 2. Template...

franzis
30.12.2008, 12:38
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

MikeD
30.12.2008, 13:15
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

ragtek
30.12.2008, 13:21
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?

MikeD
30.12.2008, 14:01
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 :)

ragtek
30.12.2008, 14:09
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

franzis
30.12.2008, 14:19
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

hcmagix
30.12.2008, 17:01
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.

MikeD
30.12.2008, 20:36
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 ;)