Contemplates -> Seiteninhalte/Variablen auch für Pages?
![](http://www.drupalcenter.de/files/noavatar_mini.gif)
am 25.03.2009 - 13:55 Uhr in
Hallo, ich schaue mir gerade das Video-2-Brain Tutorial von Hagen Graf an. Dort wird Content verschiedener Inhaltstypen manuell ausgerichtet und gestaltet. Also node.tpl.php --> node-"Inhaltstyp".tpl.php.
Meine Frage ist, ob ich das auch mit Pages statt Inhaltstypen realisieren kann? Sprich page.tpl.php --> page-"Pagename".tpl.php...
Sodass jede Page seine eigene PHP-Datei besitzt und man sich nicht mehr mit den Editoren auseinander setzen muss.
Ich hab das auch schon ausprobiert, doch es ändert sich nichts!
- Anmelden oder Registrieren um Kommentare zu schreiben
page.tpl.php
am 25.03.2009 - 14:07 Uhr
Sprich page.tpl.php --> page-"Pagename".tpl.php...
Sodass jede Page seine eigene PHP-Datei besitzt und man sich nicht mehr mit den Editoren auseinander setzen muss.
Könntest Du mal bitte näher erläutern, was Du damit meinst? Der Sinn der page.tpl.php ist er nämlich eine globale (sprich seitenübergreifende) Struktur der Homepage zu liefern.
Stefan
Übrigens fand Morten
am 25.03.2009 - 14:15 Uhr
Übrigens fand Morten gestern die richtigen Worte zum Thema Contemplate, siehe meine Signatur ;)
Im Zweifelsfalle verkompliziert man das Theming mit Contemplate so dermaßen, dass man gar nicht mehr weiß wo was passiert.
--
mortendk: everytime you use contemplate... Thor is striking down from above with his mighty hammer - crushing and killing a kitten!
webseiter.de
Ich will ganz einfach jede
am 25.03.2009 - 14:17 Uhr
Ich will ganz einfach jede erstellte Page, Blogeintrag usw. manuell bearbeiten.
Der Sinn der page.tpl.php ist er nämlich eine globale (sprich seitenübergreifende) Struktur der Homepage zu liefern.
Genau das wollte ich nicht hören, aber dank dir!
Wie kann ich denn trotzdem Seite für Seite manuell bearbeiten, ohne das die Struktur seitenübergreifend ist?
Ist das überhaupt möglich?
Inhaltstypen
am 25.03.2009 - 14:29 Uhr
Wenn Du Inhaltstypen anders darstellen willst, kannst Du das über die node-<type>.tpl.php machen. Siehe dazu auch Core templates and suggestions.
Die umfassende Struktur (page.tpl.php) lässt sich übrigens auch pro Inhaltstyp, Kategorie, Pfad, ... anpassen.
http://drupal.org/node/139766
http://drupal.org/node/249726
usw.
hth,
Stefan
wohooo! Genau das suchte
am 25.03.2009 - 14:33 Uhr
wohooo! Genau das suchte ich!
Danke, Danke, Danke!
Verschiedene Templates pro Seite
am 26.03.2009 - 09:19 Uhr
Guten Tag nochmal,
nochmal zum Problem:
Ich möchte gerne via URL-aliase für jede erstellte Seite eine individuelle page-.tpl.php, um Design, Anordnung usw. zu bearbeiten. Das unten stehende Snippet in der template.php macht irgendwie nichts bei mir. Könnt ihr helfen?
Das Snippet:
<?php
/**
* Different page templates depending on URL aliases
*/
function phptemplate_preprocess_page(&$vars) {
if (module_exists('path')) {
$alias = drupal_get_path_alias(str_replace('/edit','',$_GET['q']));
if ($alias != $_GET['q']) {
$suggestions = array();
$template_filename = 'page';
foreach (explode('/', $alias) as $path_part) {
$template_filename = $template_filename . '-' . $path_part;
$suggestions[] = $template_filename;
}
}
$vars['tabs2'] = menu_secondary_local_tasks();
// Hook into color.module
if (module_exists('color')) {
_color_page_alter($vars2);
}
$vars2['template_files'] = $suggestions;
}
}
?>
Dateiendung
am 26.03.2009 - 09:41 Uhr
Moin!
Lass Dir doch mal die Variable
$suggestions
ausgeben. Dann siehst Du, nach welchen Templates Drupal sucht.<?php
drupal_set_message('<pre>'. print_r($suggestions, 1) .'</pre>');
?>
hth,
Stefan
Keine Ausgabe
am 26.03.2009 - 10:09 Uhr
Bekomme keine Ausgabe, wie kann das sein?
Debug
am 26.03.2009 - 10:17 Uhr
Bekomme keine Ausgabe, wie kann das sein?
Wenn keine Ausgabe kommt, wird die Anweisung wohl auch nicht ausgeführt. Soll heissen, dass die
if
-Anweisung nicht greift.Hast Du das Modul path aktiviert?
Vielleicht ist
$alias == $_GET['q']
.Mach mal in verschiedenen Zeilen Ausgaben, dann siehst Du, was ausgeführt wird und wie die Inhalte der Variablen gesetzt sind.
hth,
Stefan
Re: Debug
am 26.03.2009 - 10:34 Uhr
Ja, das path Modul ist aktiviert.
drupal_set_message(''. print_r($_GET['q']) .''); --> gibt mit den Pfad der Seite, ohne Alias Namen also z.B. note/...
drupal_set_message(''. print_r($alias) .''); --> liefert nichts
Alias
am 26.03.2009 - 10:45 Uhr
drupal_set_message(''. print_r($alias) .''); --> liefert nichts
Dann findet Drupal zu diesem Pfad keinen Alias, kann also auch dafür keine Template-Vorschläge zusammenbauen.
Stefan
Aliase
am 26.03.2009 - 11:33 Uhr
Komisch ich hab doch allen Pfaden Aliase vergeben.
![Aliase](http://going4drupal.trackbytrack.com/sites/all/graphics/Aliase.jpg)
Siehe:
Kann mir das jemand erklären?
Aliase
am 26.03.2009 - 11:38 Uhr
Die Funktion
drupal_get_path_alias()
arbeitet sprachspezifisch. Soll heissen, dass ohne Angabe der korrekten Sprache kein Alias zu "node/57" gefunden werden kann (nur für node 65-69).hth,
Stefan
Hab den Fehler korrigiert
am 26.03.2009 - 12:02 Uhr
Hab den Fehler korrigiert und alle Pages auf Sprachneutral gestellt, allerdings liefert
drupal_set_message(''. print_r($alias) .'');
immer noch keine Ausgabe...
common.inc
am 26.03.2009 - 14:53 Uhr
Muss vielleicht etwas in der common.inc geändert werden? Da stand nämlich ne Menge drin, was rund um den Begriff "Alias" ging?
Änderungen
am 26.03.2009 - 14:59 Uhr
Nein, bloss nichts am Drupal-Kern ändern.
Kannst Du mal die Funktion so ändern und dann die Ausgabe posten:
<?php
function phptemplate_preprocess_page(&$vars) {
if (module_exists('path')) {
drupal_set_message('<pre>'. print_r($_GET['q'], 1) .'<pre>');
drupal_set_message('<pre>'. print_r(str_replace('/edit','',$_GET['q']), 1) .'<pre>');
$alias = drupal_get_path_alias(str_replace('/edit','',$_GET['q']));
drupal_set_message('<pre>'. var_export($alias, 1) .'<pre>');
if ($alias != $_GET['q']) {
...
?>
Ausgabe | Neue Funktion Aliase
am 26.03.2009 - 15:13 Uhr
Das spuckt er nun aus:
![](http://going4drupal.trackbytrack.com/sites/all/graphics/Ausgabe.jpg)
Startseite
am 26.03.2009 - 15:20 Uhr
Öhm, Du bist auf der Startseite? Also /node? Da kann das nicht auch nicht funktionieren. Nur auf node/xxx.
Stefan
Es funzt!
am 26.03.2009 - 15:25 Uhr
Es funktioniert!
P.S. ich war auf einer Unterseite, habe aber vergessen zu refreshen, als ich den Screenshot gemacht hab.
So jetzt versuche ich mal einzelne Templates zu schreiben!
Schau oben auf den Screenshot, der wurde nun aktualisiert.
Ich hb gerade nochmals
am 26.03.2009 - 15:37 Uhr
Ich hb gerade nochmals versucht
<?php
drupal_set_message('<pre>'. print_r($suggestions, 1) .'</pre>');
?>
anzeigen zu lassen, doch ich bekomme keine Ausgabe.
Wie gehts nun weiter?
debug
am 26.03.2009 - 15:43 Uhr
Weiter debuggen.
<?php
/**
* Different page templates depending on URL aliases
*/
function phptemplate_preprocess_page(&$vars) {
if (module_exists('path')) {
$alias = drupal_get_path_alias(str_replace('/edit', '', $_GET['q']));
drupal_set_message('<pre>'. var_export(($alias != $_GET['q']), 1) .'</pre>');
if ($alias != $_GET['q']) {
$suggestions = array();
$template_filename = 'page';
foreach (explode('/', $alias) as $path_part) {
drupal_set_message('<pre>'. var_export($path_part, 1) .'</pre>');
$template_filename = $template_filename . '-' . $path_part;
$suggestions[] = $template_filename;
}
$vars2['template_files'] = $suggestions;
}
}
$vars['tabs2'] = menu_secondary_local_tasks();
// Hook into color.module
if (module_exists('color')) {
_color_page_alter($vars2);
}
}
?>
Jetzt bekomme ich folgende
am 27.03.2009 - 10:02 Uhr
Jetzt bekomme ich folgende Ausgabe:
![](http://going4drupal.trackbytrack.com/sites/all/graphics/debug.jpg)
Suggestions klappt nun auch.
Also hab ich doch nun theoretisch die Möglichkeit eine page-testseite-zum-editieren.tpl.php zu schreiben.
Verstehe ich das richtig?
template
am 27.03.2009 - 10:13 Uhr
Also hab ich doch nun theoretisch die Möglichkeit eine page-testseite-zum-editieren.tpl.php zu schreiben.
Verstehe ich das richtig?
Jup.
Btw: schickes Theme
Stefan
page-testseite-zum-editieren.tpl.php geschrieben, doch...
am 27.03.2009 - 10:23 Uhr
wird nichts verändertes ausgegeben.
Ich könnte doch nun einfach den Klassiker "Hallo Welt" einfügen, allerdings passiert nichts.
Hast du eine Idee, ratschlag?
Btw. Das Theme ist erstmal obligatorisch, mir gefällts :D
theme registry
am 27.03.2009 - 10:31 Uhr
Wie auch in Overriding themable output beschrieben, solltest Du nach dem Anlegen eines Templates die ThemeRegistry leeren. Sonst kennt Drupal das Template einfach nicht.
hth,
Stefan
re: theme registry
am 27.03.2009 - 10:36 Uhr
Dank dir dafür! Das wird sicherlich weiterhelfen.
Ich melde mich dann nochmal!
THX4YH!
Cool, endlich klappt's! Auch
am 30.03.2009 - 08:39 Uhr
Cool, endlich klappt's!
Auch wenn ich die Seiten mit ihren Node-Nr. ansprechen muss, was mir aber total egal ist.
Vielen Dank nochmal für die Hilfe!