PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [gelöst] nochmal node-eigenes_template.tpl.php



mefista
10.01.2008, 12:57
Hallo,

ich möchte einen Node-Type haben, der auf Page basiert, oben aber den Seitentitel nicht anzeigt, also wie im page.tpl.php ohne
<?php if ($title) { ?><h2 class="title"><?php print $title ?></h2><?php } ?> im Content-Bereich. Die Vorgehensweise an sich wurde ja schon geschildert, neuen Node-Type anlegen, Template mit node-node_name.tpl.php anegen und ins YAML-Verzeichnis legen, die Dummys in die einzelnen Subtemplates einbauen. So weit so gut.
Jetzt hat klein Erna aber irgendwie einen Denkfehler drin ... ich habe die page.tpl.php genommen, den Titel-Snippet gelöscht und das so als neues Template für no-head-Seiten gespeichert und wenn ich das einbinde, erhalte ich die Seite (ich habe das zweispaltige, links ausgerichtete Subtemplate in Benutzung) mit dem normalen Aufbau, dem Seitentitel, dem Content und im Content nochmal das gesamte neue Template, also

<div id="col3_inside" class="floatbox">
<h2 class="title">Startseite neu</h2>
<div id="page_margins"> ... usw.
Öhm, ja ... irgendwas muss ich anders machen ... schlussendlich geht es mir ja nur darum, endlich diesen doofen Seitentitel aus dem Content zu bekommen, das ist ja einfach nur ein Unding ... kann mich bitte jemand von der Leitung schubsen? Oder geht das nicht per Template ...

... fragt
Martina

mefista
10.01.2008, 13:41
... und schon selbst anders gelöst, wobei die ursprüngliche Frage, bzw. die Lösung dazu, was ich denn falsch gemacht habe, mich schon interessiert ... und wenn sich einer bemüßigt fühlt, darauf zu antworten, auch für zukünftige, andere Einsatzzwecke, wäre es prima.

Jetzt aber die Lösung (an der ich schon mal dran war, ich hatte sie nur noch nicht ganz kapiert ... äh, ja, scheint öfter vorzukommen):
in sämtliche template.php kommt der Schnipsel

if (preg_match('/^__(.*)__$/', $vars['title'], $regs)) {
$vars['title'] = '';
$vars['head_title'] = $regs[1];
}
zum Beispiel gleich nach

function _phptemplate_variables($hook, $vars = array()) {
switch ($hook) {
case 'page':
global $user;

Wenn man jetzt eine neue Seite erstellt, egal ob page oder story oder sonstwas, gibt man im Titel-Feld vor und nach dem Titel einen doppelten Unterstrich ein, also __mein Seitentitel, den niemand sehen soll außer mir und dem Browser meines Herzens__ und er wird ausgeblendet. Wichtig bei der Lösung: der Seitentitel oben in der Browserleiste wird trotzdem ausgegeben, damit die Seitenbesucher wissen, wo sie sind.
Drupal ist nicht ganz leicht ... und dann mit einem so komplexen Theme wie YAML, mein lieber Schwan! Aber ich habe mich so an YAML gewöhnt, dass ich Layouts damit inzwischen schneller erstelle als ohne, und sie funktionieren auch, das ist das Wichtigste ...

Also: halb gelöst, das Problem ...

hass
10.01.2008, 19:43
Frage mich ernsthaft, wie das alles klappen soll. Ein Node type ist eine "node" und keine Page. In einem Node Template gibt es standardmässig nur einen Bruchteil der Variablen, die es in einer Page gibt. Das ganze macht auch überhaupt keinen Sinn, geschweige denn das ich glaube das dies alles wirklich klappt.

Kann es sein, dass hier eher ein Node Template auf basis der node.tpl.php gebaut werden soll? Dann wird die node.tpl.php kopiert zu "MeinNodeTyp.tpl.php" und dort werden dann alle Anpassungen gemacht.

mefista
10.01.2008, 21:10
Was macht dir jetzt keinen Sinn? Dass ich den Seitentitel ausblenden will? Dass ich irgendwo einen Denkfehler mache, weiß ich selbst, vielen Dank, ich bin nur im Drupal noch nicht so erfahren, dass ich weiß, wo, wie, warum ... das Ausblenden des Seitentitels klappt ja nun mit dem php-Snippet (das ist selbstverständlich YAML-unabhängig, so wie die ganze Frage wohl anscheinend eher mit Drupal an sich als mit YAML zu tun hat?), aber ich dachte, pages und storys sind node-types, und ich kann weitere dazudefinieren. Page und story unterscheiden sich ja auch in Details, die in den Template-Dateien festgelegt sind, also page.tpl.php und story.tpl.php. Und ich dachte mir, genauso kann ich einen neuen node-type definieren und ein Template dazu bauen. Also ist mein Denkfehler, dass ich die Hierarchie der Templates noch nicht geblickt habe? *kopfkratz*
Das wäre gut möglich, aber es ist nicht leicht, sich die Infos darüber aus all den Bruchstücken, die man hier und dort findet, zusammenzusuchen.

hass
11.01.2008, 00:58
Die page.tpl.php ist die Webseite selbst.

Um die Inhaltstypen "Story" und "Page" getrennt zu unterscheiden musst Du die Datei node-page.tpl.php bzw. node-story.tpl.php nennen...

Denke Du willst den Node-Titel entfernen... nicht den Webseitentitel. Das geht übrigens in den YAML Themes schon automatisch, wenn Du den Titel einfach leer lässt.

D5: Theming nodes by content type - http://drupal.org/node/17565
D6: Default templates and template suggestions - http://drupal.org/node/190815

mefista
11.01.2008, 14:03
Okay, da haben wir meine Verwirrung: dadurch dass es die page.tpl.php gibt und das etwas anders ist als eine node-page.tpl.php. Da habe ich mich zwar gewundert, aber es nicht richtig verstanden. Das ist von der Benennung her finde ich auch ein bisschen unglücklich, aber gut. Der, der's entwickelt hat, fand's in dem Moment gut.

Natürlich will ich im Content den Node-Titel entfernen, der aber trotzdem in den <title>-Tag im Head übernommen wird zusammen mit der Bezeichnung der Website. Hier gibt es wohl einen Kuddelmuddel der Begrifflichkeiten, aber ich dachte, ich hätte mich klar ausgedrückt.

Allerdings weiß ich nicht, mit welcher Drupal-Version du arbeitest ... meine Standardinstallation (aktuelles Release) verlangt von mir immer die Eingabe eines Titels, wenn ich einen neuen Node erstelle, da kann ich nichts leer lassen. Das ist doch völlig unabhängig vom Theme ... oder meinst du deine Komplettinstallation Drupal+Theme, hast du da irgendwas dran rumgeschraubt?

Danke für die Links. Die Infos sind etwas erhellend, aber immer noch recht rudimentär, aber das bin ich ja bei Drupal gewöhnt, da sucht man sich die Krümel halt zusammen und sammelt sie zum Kuchen. Das Prinzip scheinen sich Leute, die mit Drupal schon länger arbeiten, allmählich zu verinnerlichen. Sei's drum.

hass
11.01.2008, 20:56
Hm... ich muss gestehen ich habe noch nie eine Node ohne Titel erstellt... nimm halt den Platzhalter für den Titel aus der Vorlage raus, dann ist er auf jeden Fall nur dort weg.

mefista
12.01.2008, 18:17
Nicht schlau, denn ich will das nicht auf jeder Seite (oder im Drupal-Sprech: in jedem Node) machen, sondern nur auf manchen. Im Joomla z.B. kein Problem, in älteren Drupal-Versionen auch nicht. Aber mit dem oben aufgezeigten Lösungsweg eben machbar. Ich schrubste ja, dass es geht, ich wollte nur noch wissen, wo mein Denkfehler mit der node-eigeneernodestyle.tpl.php war und dem wundersamen Einfügen des page_margins-divs und dem gesamten Seiteninhalt in meinen Content in Spalte 3 des YAML-Layouts. Der Aufbau der Themes in Drupal ist nicht so einfach, da muss ich mich halt noch reinfuchsen, und das werde ich denn auch tun, Bröckchen für Bröckchen ... ;)

torstenzenk
28.11.2008, 15:21
Hi, ich habe ein ähnliches Problem mit Drupal DE 5.12 und Yaml 5.x-3.0.4.8. Laut diesem Posting http://forum.yaml.de/index.php?topic=4300.0 und einigen anderen Howtos habe ich es bis heute noch nicht hinbekommen mit YAML eine eigene node-contenttype.tpl.php einzubinden. Gibt es abgesehen von den oben angegebenen links dazu irgnwo eine drupal/YAML speziifsche Erklärung/HowTo?

Beste Grüße
Torsten Zenk

hass
28.11.2008, 16:33
Nein, theming ist theming und die Namen der Dateien ist das ganze Geheimnis, wie Drupal diese Dateien findet bzw. nach ihnen sucht.

mefista
28.11.2008, 17:59
Hi, ich habe ein ähnliches Problem mit Drupal DE 5.12 und Yaml 5.x-3.0.4.8. Laut diesem Posting http://forum.yaml.de/index.php?topic=4300.0 und einigen anderen Howtos habe ich es bis heute noch nicht hinbekommen mit YAML eine eigene node-contenttype.tpl.php einzubinden. Gibt es abgesehen von den oben angegebenen links dazu irgnwo eine drupal/YAML speziifsche Erklärung/HowTo?


Viel Zeit ist ins Land gegangen, und just heute habe ich problemlos ein eigenes Seitenlayout, sprich Nodelayout (für mich ergibt sich dann halt eine ganze Seite, page und node, deswegen sage ich "Seiten"layout, obwohl man mich dafür gerne mit schimmeligen Gurken bewerfen würde, ich weiß) erstellt ... jetzt zwar für Drupal 6, aber es ist Jacke wie Hose, denke ich, das Vorgehen hat sich nicht geändert. Und es hat sofort funktioniert. Übung macht den Meister ...

Also: Neuen Inhaltstyp erstellen, der bekommt unter "Typ" die Bezeichnung, die ich später auch fürs Template nehme. "Maschinenlesbarer Name" steht im kleinen Hilfetext unter dem Feld, daran hält man sich auch. Sagen wir, er heißt "nudelsuppe". Soweit die Vorbereitungen im Drupal.

Jetzt erstelle ich eine neue Templatedatei. Die heißt node-nudelsuppe.tpl.php.

Wie soll sie aussehen? Machen wir es einfach, sie soll den Titel als h1 anstatt als h2 anzeigen, also kopiere ich aus der normalen node.tpl.php-Datei den gesamten Inhalt, packe ihn in die node-nudelsuppe.tpl.php, ändere den Tag von h2 in h1 und speichere das nun entweder im Ordner mit dem Layout, das ich verwende (sites/all/themes/yaml/layouts/yaml_2col_31 zum Bleistift) oder im yaml-Ordner (sites/all/themes/yaml), dann muss ich aber in alle Layout-Ordner (oder die, die ich verwende) noch eine node-nudelsuppe.tpl.php reinspeichern, die folgendes enthält


include(realpath(dirname(__FILE__) .'/../../node-nudelsuppe.tpl.php'));

Einfach mal in die anderen tpl-Dateien in den Layouts schauen, da findet man alles, was man braucht.

Jetzt sollten alle Nodes, die dem Inhaltstyp "Nudelsuppe" angehören, eine h1-formatierte Überschrift haben. Wenn nicht, hast du dich irgendwo verschrieben oder deine Datei im falschen Ordner geparkt oder den Cache nicht gelöscht. ;)

Ich bin sonst nicht so blöd, aber ich habe auch eine ganze Weile gebraucht, bis ich das Prinzip verstanden habe. Die Denke hinter den Drupal-Templates ist erst einmal etwas anders als anderswo. Heute finde ich sie total logisch und einfach, aber am Anfang saß ich wie der Ochs vorm Scheunentor (und unter einem Berg schimmeliger Gurken, weil ich immer alles falsch ausgedrückt habe). Also nicht verzweifeln. Eher mal ausprobieren, wenn es nicht klappt, eine Nacht drüber schlafen, nochmal probieren ... es funktioniert, garantiert. Wenn man den Fehler beseitigt hat, den man die ganze Zeit macht. ;D

hass
28.11.2008, 18:08
include(realpath(dirname(__FILE__) .'/../../node-nudelsuppe.tpl.php')); brauchst Du unter D6 nicht mehr machen! Da muss die .tpl Datei nur noch irgendwo in einem Unterordner des Themes liegen... was auch zu neuem Durcheinander führen kann ;)

mefista
28.11.2008, 18:09
Er nimmt D5. D5 war die Frage.

hass
28.11.2008, 18:11
Ei jo - ok... dachte Du meinst es auch für Dein D6...

mefista
28.11.2008, 18:24
Nö, D6 überraschte mich damit, mich gleich mit dem neuen Template zu verwöhnen ... ;) Man drückt ja doch immer schon mal nervös F5, in der Hoffnung, dass sich was tut auf dem Bildschirm, und siehe da ... :)

torstenzenk
12.12.2008, 18:26
Ich bin sonst nicht so blöd, aber ich habe auch eine ganze Weile gebraucht, bis ich das Prinzip verstanden habe. Die Denke hinter den Drupal-Templates ist erst einmal etwas anders als anderswo. Heute finde ich sie total logisch und einfach, aber am Anfang saß ich wie der Ochs vorm Scheunentor (und unter einem Berg schimmeliger Gurken, weil ich immer alles falsch ausgedrückt habe). Also nicht verzweifeln. Eher mal ausprobieren, wenn es nicht klappt, eine Nacht drüber schlafen, nochmal probieren ... es funktioniert, garantiert. Wenn man den Fehler beseitigt hat, den man die ganze Zeit macht. ;D


Danke fürs Aufstossen dieser Tür ;) endlich ist es auch bei mir angekommen :)...

torstenzenk
12.12.2008, 18:35
Da muss die .tpl Datei nur noch irgendwo in einem Unterordner des Themes liegen... was auch zu neuem Durcheinander führen kann ;)


und DAS war dann der entscheidende Hinweis und macht mir schlagartig klar was es in der Vergangenheit verhindert hat.
Wenn ich das YAML SubCol3 Theme nutze welches unter sites/all/themes/yaml/layouts/yaml_3col_subcol/zu finden ist, aber einen Inhaltstypen themen möchte dann tue ich das auf Basis der node.tpl die im YAML Root Verzeichnis liegt, also sites/all/themes/yaml/ und diese Datei verändere ich euren gemachten Angaben gemäss, speichere sie dann aber im Verzeichnis sites/all/themes/yaml/layouts/yaml_3col_subcol/node-nudelsuppe.tpl.php.