(gelöst) Neues Template (page--simplepage_privat.tpl.php) wird auch nach Cache leeren nicht erkannt
am 27.01.2015 - 11:18 Uhr in
Hallo Leute,
ich habe für einen meiner Inhaltstypen ein Template angelegt.
Und zwar heißt dieser mit maschinenlesbarem Namen: simplepage_privat
Für diesen Inhaltstypen existieren auch schon ein paar Nodes.
Jetzt will ich aber die Gestaltung dafür etwas anders machen und habe
hierfür in meinem /templates-Ordner zwei neue Template-Dateien kopiert:
1. /sites/all/themes/meintheme/templates/node.tpl.php >>
/sites/all/themes/meintheme/templates/node--simplepage_privat.tpl.php
2. /sites/all/themes/meintheme/templates/page.tpl.php >>
/sites/all/themes/meintheme/templates/page--simplepage_privat.tpl.php
3. Cache gelöscht
4. CRON ausgeführt
Trotzdem alles beim Alten: es werden weiterhin node.tpl.php und page.tpl.php
angezeigt.
Habe ich was vergessen? Muss ich noch woanders eine Angabe machen?
Danke für Hilfe!
Liebe Grüße
Soezkan
- Anmelden oder Registrieren um Kommentare zu schreiben
Es müssen im Theme auch die
am 27.01.2015 - 12:23 Uhr
Es müssen im Theme auch die "normalen" node.tpl.php und page.tpl.php Dateien existieren, damit die speziellen erkannt werden.
.
Werner
drupal-training.de
Moderator und Drupal Trainer
* - - - - - - - - - - - - - - - - - - - - - - - - - - - *
Ja, die existieren beide
am 27.01.2015 - 12:27 Uhr
Ja, die existieren beide noch. Liegen parallel zu den beiden neuen im /template Ordner.
EIgentlich habe ich doch alles richtig gemacht, oder?
Liebe Grüße
Soezkan
Das page-Template hat
am 27.01.2015 - 13:12 Uhr
Das page-Template hat definitiv einen falschen Namen. Page berücksichtigt nicht den Nodetyp sondern nur den internen Pfad. Siehe https://www.drupal.org/node/1089656. Wenn Du ein eigenes Template für die Seite basierend auf dem Nodetyp brauchst, mußt Du eine preprocess_page-Funktion in Deinem Theme haben, die das Template umdefiniert.
.
Werner
drupal-training.de
Moderator und Drupal Trainer
* - - - - - - - - - - - - - - - - - - - - - - - - - - - *
Danke schonmal für den
am 27.01.2015 - 14:36 Uhr
Danke schonmal für den Tipp.
Ich glaube aber ich verstehe nicht was Du meinst.
Du schreibst:
Wenn Du ein eigenes Template für die Seite basierend auf dem Nodetyp brauchst, mußt Du eine preprocess_page-Funktion in Deinem Theme haben, die das Template umdefiniert.
"In Deinem Theme haben"? Welche Datei ist damit gemeint?
Kennst Du eine Anleitung die Schritt für Schritt erklärt, wie man eine .tpl-Datei für einen eigens zusammengestellten
Inhaltstyp definiert?
Mein Inhaltsstyp soll nur für "authorized users" zugänglich sein - aber daran liegt's wohl nicht.
Sorry bin mit dieser Aufgabe etwas überfordert, darum meine Fragen.
Danke für weitere Hilfe.
Liebe Grüße
Soezkan
meinem Wissen nach
am 27.01.2015 - 14:56 Uhr
meinem Wissen nach funktioniert die die Zuweisung eines Inhaltstyps zu einer speziellen page.tpl.php so nicht.
In der page.tpl.php liegen aber alle Informationen über die Node, die das Template anzeigen soll, vor. Insbesondere der Node-Typ (meist $node->type).
Damit kann man dann natürlich die Ausgabe so beeinflussen, wie man das gerne hätte.
Was die node--simplepage_privat.tpl.php angeht, so müßte das sehr wohl funktionieren, vorausgesetzt der Maschinenname des Inhaltstyps ist simplepage_privat und die Templates werden in dem Verzeichnis:
/sites/all/themes/meintheme/templates/node.tpl.php überhaupt gesucht.
Das kannst du ja leicht prüfen, indem du in die node.tpl.php einfach "1234" hineinschreibst und wenn die Template-Datei verwendet wird, wird diese "1234" ja auch wieder ausgegeben.
Gruß
Berthold Lausch
Drupal Video-Tutorials
Hallo,das ist ja genau das
am 27.01.2015 - 15:23 Uhr
Hallo,
das ist ja genau das Dilemma: ich habe bereits versucht einfach nur "xyz" in die
page--simplepage_privat.tpl.php zu schreiben, aber er nimmt mir immer die
page.tpl.php - der Beweis: wenn in der page.tpl.php "xyz" steht und ich einen
Node von meinem Simplepage-Inhaltstyp anzeige, dann zeigt er mir eben "xyz"
an, d. h. er nimmt die page.tpl.php.
Echt seltsam. Und bin ratlos :(
Noch ne Ahnung woran es liegen könnte das er sich auf das page.tpl.php festgebissen hat?
schätze mal dass das nonstop ignoriert wird!
am 27.01.2015 - 16:07 Uhr
wenn in der page.tpl.php "xyz" steht und ich einen
Node von meinem Simplepage-Inhaltstyp anzeige, dann zeigt er mir eben "xyz"
an, d. h. er nimmt die page.tpl.php.
ich gehe davon aus dass besagte page.tpl.php nicht vom System benutzt gesehen wird, so wie Du das beschreibst.
Nutze mal den theme developer und schau mal was der Dir ausgibt.
Die spezielle
am 27.01.2015 - 16:08 Uhr
Die spezielle page--simplepage_privat.tpl.php kann nicht greifen, da das im Standard nicht vorgesehen ist. Also braucht Du in der template.php in Deinem Theme in einer preprocess_page-Funktion folgende Zeilen:
<?php
function DEINTHEME_preprocess_page(&$variables) {
if (isset($variables['node'] && $variables['node']->typ == 'simplepage_privat') {
$variables['theme_hook_suggestions'][] = 'page__simplepage_privat';
}
}
?>
Ich habe das jetzt nicht getestet und Du mußt auch überprüfen, ob eine solche Funktion schon existiert. Dann mußt Du nur die Abfrage selbst in diese Funktion einbauen.
.
Werner
drupal-training.de
Moderator und Drupal Trainer
* - - - - - - - - - - - - - - - - - - - - - - - - - - - *
soezkan schriebNoch ne
am 27.01.2015 - 17:02 Uhr
Noch ne Ahnung woran es liegen könnte das er sich auf das page.tpl.php festgebissen hat?
Das habe ich doch genau erklärt, das geht SO nicht und es ist auch nicht seltsam. Die page.tpl.php ist unabhängig vom Inhaltstyp, außer du machst es so, wie Werner es vorgeschlagen hat.
Drupal Video-Tutorials
wla schrieb Die spezielle
am 27.01.2015 - 19:29 Uhr
Die spezielle page--simplepage_privat.tpl.php kann nicht greifen, da das im Standard nicht vorgesehen ist. Also braucht Du in der template.php in Deinem Theme in einer preprocess_page-Funktion folgende Zeilen:
<?php
function DEINTHEME_preprocess_page(&$variables) {
if (isset($variables['node']) && $variables['node']->typ == 'simplepage_privat') {
$variables['theme_hook_suggestions'][] = 'page__simplepage_privat';
}
}
?>
Ich habe das jetzt nicht getestet und Du mußt auch überprüfen, ob eine solche Funktion schon existiert. Dann mußt Du nur die Abfrage selbst in diese Funktion einbauen.
Danke für den Tipp. Nur geht es leider noch immer nicht. Ich habe die Änderungen in der template.php hinzugefügt, Cache geleert: aber es geht einfach nicht.
Ich finde das echt seltsam, zumal ich das mit dem Theming eines Inhaltstyps bisher schon so oft gemacht habe und es hat immer geklappt, auch ohne den Eingriff in die template.php
Ich dachte erst es liegt daran, dass die Seite nur für "authorized users" zugänglich ist.
Aber jetzt habe ich mal testweise einen neuen Inhaltstyp angelegt, der "öffentlich" ist, nach selbem Muster. Nichts! Es wird immer nur auf die page.tpl.php zugegriffen.
Noch ne Ahnung?
Danke auf jeden Fall für eure Tipps!
Danke torfnase! Ich habe
am 27.01.2015 - 19:35 Uhr
Danke torfnase!
Ich habe jetzt mal versucht etwas an der node--simplepage_privat.tpl.php etwas zu ändern und
er hat mir jetzt auch drauf reagiert. Also anscheinend greift die node--simplepage_privat.tpl.php.
Da das Theme ja aber von der page--simplepage_privat.tpl.php geliefert wird, die dem System
aber anscheinend "egal" ist, weiß ich nicht wie ich beim Theming vorgehen soll.
Hättest Du bitte noch einen Vorschlag?
Ist das denn wirklich so
am 27.01.2015 - 21:48 Uhr
Ist das denn wirklich so schwer zu verstehen ?
Ich fasse noch mal zusammen:
Du hast einen Inhaltstyp: simplepage_privat
Wenn du eine Node-Template Datei node--simplepage_privat.tpl.php anlegst, dann wird die genommen, wenn die Node den Inhaltstyp: simplepage_privat hat.
Soweit so gut.
Die page.tpl.php hat nichts mit dem Inhaltstyp zu tun und die Erfindung: page--simplepage_privat.tpl.php ist deine Erfindung und hat nichts mit Drupal zu tun. Diese Template-Datei wird auch nie verwendet werden, außer du schreibst in der preprocess_page() - Funktion in der template.php vor, dass eine "andere" Template-Datei, z.B. deine page--simplepage_privat.tpl.php verwendet werden soll.
Das gibt du genau so an:
<?php
function DEIN_THEME_preprocess_page(&$variables) {
if (isset($variables['node']) && $variables['node']->type == '23454') {
$variables['theme_hook_suggestions'][] = 'page__simplepage_privat';
}
......
?>
Das hat Werner aber ja oben schon geschrieben. Ich habe die Syntax auch noch einmal überprüft und bis auf das vergessen e bei dem Wort typ(e) hat Werner das genau richtig formuliert.
Bitte auf die zwei Unterstriche achten, es muß heißen: page__simplepage_privat.
Getestet und für gut befunden :-)
Berthold
Drupal Video-Tutorials
Hallo Berthold,vielen,
am 28.01.2015 - 08:01 Uhr
Hallo Berthold,
vielen, vielen Dank für Deine Ausführungen und eure Geduld. Ich habe es jetzt kapiert.
Jetzt frage ich mich, wie ich für den einen Inhaltstyp ein anderes Layout hinbekomme.
Im Moment ist es so, das mein Layout aus drei Divs besteht, die nebeneinander liegen.
Für den Inhaltstyp simplepage_privat brauche ich aber nur ein
einspaltiges DIV-Layout.
<?php
function THEME_preprocess_page(&$variables) {
if(isset($variables['node']) && $variables['node']->type == 'simplepage_privat') {
$variables['theme_hook_suggestions'][] = 'page__simplepage_privat';
}
}
?>
Diese Funktion steht in meiner template.php bereits drin.
Glaub mir ich habe glaube ich 10 Varianten durchgespielt, die ich auf anderen
Seiten - wo dieses Thema behandelt wurde - gefunden habe. Cache gelöscht ...
alles beim Alten.
Ich kriegs einfach nicht hin.
Vielleicht wenn ich wüsste was die THEME_preprocess_page letztendlich
genau macht, dann wüsste ich vielleicht einen Weg.
Naja, ich hoffe ich nerve nicht länger, aber nach einer Lösung sieht es bisher nicht aus.
Danke für eventuell noch einen Tipp.
Liebe Grüße
Soezkan
Hast Du THEME durch den Namen
am 28.01.2015 - 08:10 Uhr
Hast Du THEME durch den Namen deines Themes ersetzt???
Ja! Klar habe ich gemacht.Es
am 28.01.2015 - 08:40 Uhr
Ja! Klar habe THEME in meinenTemplatenamen geänder. Trotzdem nix.
Es ist echt zum Mäuse melken...
Was ich mich frage, ist woher eigentlich die $variables kommen?
Kann es sein, dass das Objekt $variables einfach leer ist?
Sorry, ich bin kein Drupal-Coder und kenne mich mit den Funktionalitäten der
template.php nicht gut aus. (Das ist wohl bald anders hahah lol)
bei aktiviertem devel Modul
am 28.01.2015 - 08:49 Uhr
bei aktiviertem devel Modul in die Funktion THEME_preproces...
in die erste Zeile schreiben:
dpm($variables);
Cache leeren und gucken was rauskommt.
Ich hab es so
am 28.01.2015 - 09:04 Uhr
Ich hab es so gemacht:
<?php
function THEME_preprocess_page(&$variables) {
dpm($variables);
if(isset($variables['node']) && $variables['node']->type == 'simplepage_privat') {
$variables['theme_hook_suggestions'][] = 'page__simplepage_privat';
}
}
?>
Cache geleert: nichts!
Anscheinend wird für $variables einfach nix übergeben?
Richtige template.php?
am 28.01.2015 - 09:11 Uhr
Also, in Deinem Theme, das ich jetzt mal soezkan nenne, steht in der darin enthaltenen template.php:
function soezkan_preprocess_page(&$variables) {
dpm($variables);
if(isset($variables['node']) && $variables['node']->type == 'simplepage_privat') {
$variables['theme_hook_suggestions'][] = 'page__simplepage_privat';
}
}
Du hast das devel Modul aktiviert?
dann schreibe mal unter dpm($variables); noch
dpm('hallo');
Kommt dann nichts, wird diese in drupal gängige Funktion nicht aufgerufen. Dann teste mal ob deine template.php überhaupt genutzt wird.
Ich habe das Devel-Modul
am 28.01.2015 - 09:29 Uhr
Ich habe das Devel-Modul aktiviert.
Allerdings bin ich in diesem Bereich nicht sehr bewandert.
Das von Dir vorgeschlagene
dpm('hallo');
habe ich eingefügt.
Wenn ich jetzt eine Seite des gefragten Inhaltstyps aufrufe bekomme ich
das "hallo" aber nicht angezeigt.
Also die template.php wird
am 28.01.2015 - 09:29 Uhr
Also die template.php wird aufgerufen.
Ich habe mal testweise an den Anfang der template.php
dpm('hallo'); geschrieben und ich bekomme eine Meldung auf
der HTML-Seite angezeigt.
Nur die Funktion scheint nicht zu greifen.
da wo bei dir alle ausgaben von devel gemacht werden.
am 28.01.2015 - 09:30 Uhr
normalerweise im message container.
Copy paste mal die Funktion in bartik oder so, benenne dann "soezkan" (siehe oben) in bartik um, nimm bartik als default theme und schue was da raus kommt.
Also das war schonmal einen
am 28.01.2015 - 09:41 Uhr
Also das war schonmal einen Schritt weiter.
Ich habe es gemacht wie Du vorgeschlagen hast - im Bartik-Theme werden mir
beide Zeilen in meiner Funktion ausgegebene:
<?php
function bartik_preprocess_page(&$variables) {
dpm($variables);
dpm('hallole');
...
}
?>
Was könnte das Problem sein?
Was kann ich tun?
Sorry für meine Hilflosigkeit, aber ich bin eher HTML/CSS-Mann als Coder.
Danke für Hilfe!
Und Du bist ganz sicher dass
am 28.01.2015 - 09:41 Uhr
Und Du bist ganz sicher dass der Funktionsname korrekt ist?
Ich hab's ich hab's ich
am 28.01.2015 - 09:53 Uhr
Ich hab's ich hab's ich hab's!!!
Hurraaa!
Es lag wohl irgendwie an der Namensgebung.
Uns zwar waren in der soezkan.info bei
name =
und bei
project =
zwei unterschiedliche Namen drin gestanden.
Habe ich beide auf soezkan geändern und dann
gings.
Man, ich bin so froh, dass es dieses Forum gibt.
Hier bekommt man immer Hilfe.
Dank an euch allen!
Liebe Grüße
Soezkan