Archiv verlassen und diese Seite im Standarddesign anzeigen : Template Hooks
Template-Hooks?
vBulletin verfügt seit Version 3.6.6 über 'Template-Hooks'.
Template Hooks sind in Templates eingefügte Variablen der Form $template_hook[varname].
Varname ist hierbei ein eindeutiger Bezeicher für den Template-Hook.
Wozu ist das gut?
Über Template Hooks lassen sich vorhandene Templates mit eigenen Inhalten erweitern, ohne dass man diese dazu anpassen muss.
Hierzu sind an verschiednene, häufig für Erweiterungen genutzten, Stellen in den Templates entsprechende Template-Hooks eingefügt.
Aktuell (vBulletin 3.7.0 Beta 1) sind folgende Template-Hooks verfügbar:
FORUMDISPLAY
inlinemod_thread_bottom
Am Ende das Abschnitts 'Option' im Inline Moderation Dropdown.
MEMBERINFO
Muss noch überarbeittet werden
memberinfo_css
memberinfo_css
Am Ende des Template, vor dem schließenden </style>
modifyoptions
usercp_options_start
Nach dem <form>-Tag
usercp_options_privacy
Am Ende des Abschnitts 'Anmeldung & Privatsphäre'
usercp_options_messaging
Am Ende des Abschnitts 'E-Mails, Private Nachrichten & Benachrichtigungen'
usercp_options_threadview
Am Ende des Abschnitts 'Anzeige von Themen'
usercp_options_datetime
Am Ende des Abschnitts 'Datum & Zeit'
usercp_options_other
Am Ende des Abschnitts 'Verschiedene Einstellungen'
usercp_options_end
Em Ende des Template, vor dem schließenden </form>
navbar
navbar_buttons_left
Links nach dem ersten Eintrag
navbar_buttons_right
Rechts vor 'Abmelden'
navbar_search_menu
Im Popup Suche unter 'Erweiterte Suche'
navbar_quick_links_menu_pos1
Im Popup 'Nützliche Links' unter 'Buddy Liste anzeigen'
navbar_quick_links_menu_pos2
Im Popup 'Nützliche Links' unter 'Einstellungen ändern'
navbar_quick_links_menu_pos3
Am Ende des Popup 'Nützliche Links'
postbit[_legacy]
postbit_start
Am Beginn des Template
postbit_userinfo_left
Unter dem Benutzerrang
postbit_userinfo_right_after_posts
postbit_userinfo_right
Unter der Karma-Anzeige
postbit_messagearea_start
Über der Beitrags-Titelzeile
postbit_signature_start
Über der Signatur
postbit_signature_end
Unter der Signatur
postbit_controls
In der Button-Zeile ganz rechts
postbit_end
Am Ende des Templates, vor dem Popup-Menü
postbit_user_popup
Am Ende des Popup-Menü
search_results
inlinemod_thread_bottom
Am Ende das Abschnitts 'Option' im Inline Moderation Dropdown (für Themen).
inlinemod_post_bottom
Am Ende das Abschnitts 'Option' im Inline Moderation Dropdown (für Beiträge).
SHOWTHREAD
inlinemod_post_bottom
Am Ende das Abschnitts 'Option' im Inline Moderation Dropdown.
tag_search
inlinemod_thread_bottom
Am Ende das Abschnitts 'Option' im Inline Moderation Dropdown.
USERCP
usercp_main_pos1
Am Anfang des Template
usercp_main_pos2
Unter den Privaten Nachrichten
usercp_main_pos3
Unter den abonnierten Themen
usercp_main_pos4
Unter den abonnierten Foren
usercp_main_pos5
Unter den Verwarnungen
usercp_main_pos6
Unter den Beitragsbewertungen
USERCP_SHELL
usercp_navbar_bottom
Am Ende der Navigationsleiste
Wie kann ich diese für eigene Erweiterungen nutzen?
Hierzu muss der benötigte Code in der entsprechenden Variablen gespeichert werden, bevor das zugrundeliegende Template ausgewertet wird.
Um beispielsweise im Template MEMBERINFO unter der Signatur einen weiteren Abschnitt anzuzeigen:
eval('$template_hook[\'memberinfo_pos4\'] .= "' . fetch_template('memberinfo_mystuff') . '";');
Wobei das Template memberinfo_mystuff den einzufügenden Code enthält.
Zu beachten ist hierbei dass das Template gecached werden sollte!
Hallo Andreas
Scheinbar sind nun mit den Beta-Versionen der 3.7 die Anzahl der Hooks noch etwas erweitert worden. Bringst du deine Liste hier auf den aktuellen Stand oder soll angefügt werden?
Ich werde die Liste aktualisieren. Danke für den Hinweis :)
Danke für die Info!
Eins ist mir aber unklar: Wie cache ich ein Template? Mir ist klar was ich machen muss wenn ich ein neues Add-On erstelle. Aber wie mache ich dass wenn ich Hooks vewende? Wie würdest Du das Template memberinfo_mystuff aus Deinem obigen Beispiel cachen?
Viele Grüße
hj
$globaltemplates[] = "memberinfo_mystuff";
Edit: zu langsam
Vielen Dank für das Verkürzen meiner langen Leitung :)
Viele Grüße
hj
Ich beziehe mich mal hier auf diese Erweiterung Erweiterte Forensuche (http://www.vbulletin-germany.org/showthread.php?t=98). Dort wird folgendes genommen, um zum Beispiel die Such-Optionen zu erweitern...
PHP:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------
Also mit: $template_hook[navbar_search_menu] und per global_setup_complete. Soweit verstehe ich es auch.
Aber wie funktioniert es und welchen Hook nimmt man hier, wenn man zum Beispiel neue Links einbauen will oder den vorhanden Link 'Neue Beiträge' in der Navbar ausbauen möchte? Darunter meine ich die Erweiterung durch Pulldown Menüs.
Also bitte nicht falsch verstehn: Ich weiss wie der manuelle Umbau funktioniert, nur der Grund meiner Frage bezieht sich vielmehr darauf, das ich meine Navbar so ziemlich umgebaut habe und ich nun endlich das ganze mal per Plugin einbauen will. Denn die ganzen geschriebenen Kommentare innerhalb des Templates wird immer mehr und bald wächst mir das ganze über den Kopf. Daher kam ich zu der Idee, als ich diesen Hack hier gefunden habe und nun das ganze komplett per Plugin umbauen möchte. Sicherlich ist TMS die nächste Wahl, keine Frage. Aber ich würde gerne mal wissen, wie das so per Plugin funktioniert.
SchwarzeGenetik
10.02.2008, 23:16
$globaltemplates[] = "memberinfo_mystuff";
Edit: zu langsam
hi ihr!
wenn man das auf diese weiße macht, brauch man das wohl nich mehr über die trationelle methode mit dem bearbeiten der global.php machen?
und wie muß das aussehen, wenn man mehrere eigene templates cachen möchte? etwa so:
$globaltemplates[] = "templat1";
$globaltemplates[] = "templat2";
Gruß SG :)
$globaltemplates[] = "templat1";
$globaltemplates[] = "templat2";
So:
PHP:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------
usw...
Besser ist es aber, dass nicht grundsätzlich alles in $globaltemplates hineingeschrieben, sondern dann mit $actiontemplates gearbeitet wird. :D
wenn man es so macht: PHP:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
---------- wird der array überschrieben;) also nicht so!
eher:
PHP:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------
$actiontemplates nur dann wenn es eine action gibt;) $_REQUEST['do'] == 'xxx'
Wobei ich mich jetzt auf ZUSÄTZLICHE Templates in schon vorhandenen Seiten beziehe und nicht auf eigene Seiten.
(sorry falls ich die Frage falsch aufgefasst habe)
und wie muß das aussehen, wenn man mehrere eigene templates cachen möchte? etwa so:
$globaltemplates[] = "templat1";
$globaltemplates[] = "templat2";
Entweder so oder per array_merge()
@MikeD
Per Template-Hook kannst Du nur Inhalte hinzufügen, aber keine entfernen.
Denn ein 'Template-Hook' ist ja nichts weiter als eine Variable zie z.B. $navbar auch.
Stimmt, klar... ich war schon nicht mehr bei dem PlugIn und den Template Hooks... :o
@MikeD
Per Template-Hook kannst Du nur Inhalte hinzufügen, aber keine entfernen.
Denn ein 'Template-Hook' ist ja nichts weiter als eine Variable zie z.B. $navbar auch.OK, verstanden. Also dann doch per TMS. Nun gut, das ist dann überhaupt kein Problem. Vielen Dank :)
SchwarzeGenetik
11.02.2008, 17:27
hi ihr!
naja, ich dachte das eigentlich für eigene seiten die mit custom_ erstellt wurden.
also doch cachen über die global.php.....
Gruß SG
Templates in bestehenden Scripten: Cachen per Plugin auf cache_templates
Templates in eignene Scripten: Cachen über die Arrays $globaltemplates/$actiontemplates.
SchwarzeGenetik
11.02.2008, 18:30
ich hab das immer so gemacht...
http://www.vbulletin-germany.com/forum/showpost.php?p=81057&postcount=12
versteh ich das falsch, oder ist das hier nur ne andere variante die das selbe tut? :confused:
Gruß SG
Das ist
a) Für vBulletin 3.0
b) funktioniert aber immer noch
c) ineffizient
:)
Templates sollten nur da gecached werden woe man sie wirklich benötigt.
Wir: Siehe meinen letztn Beitrag.
SchwarzeGenetik
11.02.2008, 18:44
ui... peinlich. da muß ich wohl mal meine strategie aktualisieren :rolleyes:
hat ja nix mit deinem thema zutun, und ich möcht das auch nich zumüllen mit meinem zeug, aber kannst du mir mal ne genaue anleitung geben wie ich das jetzt machen soll?
das mit dem: Arrays $globaltemplates/$actiontemplates. hilft mir nicht richtig weiter...
also z.b. ich hab eigene seiten, erstellt mit custom und die heißen custom_seite1, custom_seite2 und custom_seite3.
wie tu ich die am besten cachen?
Gruß SG :)
Siehe
http://www.vbulletin-germany.org/showpost.php?p=12003&postcount=16 und die Beiträge davor.
SchwarzeGenetik
11.02.2008, 18:48
gut, dann werd ich mir das da zusammen suchen...
p.s. sag mal du lauerst wohl schon auf dem thema hier? kaum hat man was geschrieben, steht schon ne antwort von dir da! :D
Gruß SG ;)
SchwarzeGenetik
11.02.2008, 19:33
Templates in bestehenden Scripten: Cachen per Plugin auf cache_templates
Templates in eignene Scripten: Cachen über die Arrays $globaltemplates/$actiontemplates.
also ich versteh das nich, was trifft den jetzt auf meinen fall zu?
ich versteh jetzt den unterschied nich... bestehende, eigene scripts... alles was ich hab ist ein eigenes template mit custom_ erstellt. da ist der code für eine eigene seite drin. z.b.
das eigene template heißt custom_eigene1 und aufgerufen wird es mit
<a href="misc.php?$session[sessionurl]do=page&template=eigene1">eigene1</a>
CODE:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------
was soll ich denn nun genau tun? mit die oberen codeschnipsel kann ich nich recht was anfangen, weil ich net weiß welchen zutrifft und wie ich das nun jetzt realisieren soll :confused:
Gruß SG
SchwarzeGenetik: Lies Dir mal dieses Thema How To Include A Custom Template Via Plugins (http://www.vbulletin.org/forum/showthread.php?t=119933) durch. Das was Ragtek und Andreas bereits beschrieben, ist dort nochmal sehr gut und ausführlich erklärt :)
zusätzlich eventuell noch if (THIS_SCRIPT == 'xxx')
damit es nicht nonstop gecachet wird :)
SchwarzeGenetik
11.02.2008, 20:36
gut ok, danke für eure hilfe...
lassen wir die sache, denn ich kann weder englisch, kann nich coden und weiß auch nix mit if (THIS_SCRIPT == 'xxx')
anzufangen. das mit dem $globaltemplates = array_merge($globaltemplates, array('custom_eigene1'));
hätt ich ja vielleicht noch hinbekommen, aber da war ja wieder der zweifel mit der misc.php... ich will das aber auch nicht erst studieren, denn ich hab noch andere hobbys... aber trotzdem danke das es so viele antworten gab, obwohl es ja nich mein thema war...
Gruß SG
SchwarzeGenetik
11.02.2008, 22:04
jo mache ich Stoebi!
das für denke zu suchen, soll eigentlich schon für die 3.7. sein. aber wenn sich da sowieso einiges geändert hat, wart ich noch bisl ab...
danke dir und Gruß SG ;)
if (THIS_SCRIPT == 'misc' AND $_REQUEST['do'] == 'page' AND $_REQUEST['template'] != '')
{
switch($_REQUEST['template'])
{
// nur die nachfolgenden Templates berücksichtigen
case 'eigene1':
case 'eigene2':
case 'eigene3':
case 'eigene4':
$globaltemplates[]= 'custom_' . $_REQUEST['template'];
break;
default:
// hier Standardseite festlegen, falls erwünscht
$_REQUEST['template'] = 'defaulttemplate';
$globaltemplates[]= 'custom_defaulttemplate';
}
}
SchwarzeGenetik
11.02.2008, 22:54
he Boothby, geile sache!
ich danke dir wie verrückt!!! :)
Gruß SG :rolleyes:
~*Darkangel*~
29.11.2009, 07:17
Tut mir leid, das ich jetzt so einen alten Thread rauskrame, aber ich hätte da eine kleine Frage. Gibt es evtl. auch schon eine Übersicht für die Hooks in vb4 ?
Keine Entschuldigung bitte, wir sind da vollkommen entspannt, was alte Threads anbelangt. ;)
Eine Übersicht über die Hooks bringt rein gar nichts, es sei denn sie ist dokumentiert. Aber wer will sich die Mühe schon machen, da der Quellcode eh lesbar ist. Da heißt, man muß da schon mal reingucken und sich mit ihm vertraut machen.
Ansonsten gibt es in /includes/xml/hooks_vbulletin.xml eine Liste aller Hooks.
~*Darkangel*~
29.11.2009, 10:35
Keine Entschuldigung bitte, wir sind da vollkommen entspannt, was alte Threads anbelangt.
Na dann hab ich ja Schwein gehabt, hab schon mit fliegenden Steinen gerechnet *gg*
es sei denn sie ist dokumentiert. Aber wer will sich die Mühe schon machen, da der Quellcode eh lesbar ist. Da heißt, man muß da schon mal reingucken und sich mit ihm vertraut machen.
Buuh also doch alle php datein selbst Erforschen :confused: Dachte schon es gäbe eine schöne Doku dazu, wo sich welche Hook Position befindet und evtl. weiterführende Erklärungen für vB Neulinge :rolleyes: Frag mich grade auch wieso mein php Code innerhalb eines Testplugins nicht angenommen wird, alles so neu und Verwirrend :D
Christian
29.11.2009, 19:49
Buuh also doch alle php datein selbst Erforschen :confused: Dachte schon es gäbe eine schöne Doku dazu, wo sich welche Hook Position befindet und evtl. weiterführende Erklärungen für vB Neulinge Gibt es nicht und das ist auch ganz gut so, sonst würden viele drauf loscoden ohne sich Gedanken um den Core zu machen, was schnell zu unvorhergesehenen Fehlern und Sicherheitslücken führt. ;)
Von der Performance fang ich garnicht erst an.
Powered by vBulletin™ Version 4.1.3 Copyright ©2012 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.