PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Template Hooks


Andreas
09.08.2007, 17:16
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!

alluidh
28.12.2007, 14:35
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?

Andreas
28.12.2007, 14:39
Ich werde die Liste aktualisieren. Danke für den Hinweis :)

hjmaier
10.02.2008, 13:24
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

Andreas
10.02.2008, 13:52
Hook cache_templates :)

ragtek
10.02.2008, 13:54
$globaltemplates[] = "memberinfo_mystuff";


Edit: zu langsam

hjmaier
10.02.2008, 13:59
Vielen Dank für das Verkürzen meiner langen Leitung :)

Viele Grüße
hj

MikeD
10.02.2008, 22:18
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 :)

Vossi
11.02.2008, 00:24
$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

ragtek
11.02.2008, 08:14
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)

Andreas
11.02.2008, 08:25
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.

Vossi
11.02.2008, 08:46
Stimmt, klar... ich war schon nicht mehr bei dem PlugIn und den Template Hooks... :o

MikeD
11.02.2008, 10:45
@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

Andreas
11.02.2008, 18:13
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

Andreas
11.02.2008, 18:35
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 :)

Andreas
11.02.2008, 18:45
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

MikeD
11.02.2008, 19:54
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 :)

ragtek
11.02.2008, 20:07
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 ;)

Boothby
11.02.2008, 22:29
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: