Newbee >> Nodes-Template und Datenbeschaffung
am 01.04.2008 - 13:26 Uhr in
Ich bin absoluter Anfänger mit Drupal, habe aber schon mit diversen CMS-Systemen gearbeitet und mehr als 10 Jahre Berufserfahrung im Bereich Programmierung.. nur so als Background.
Ich habe nun ein bestehendes System vorgesetzt bekommen, in welchem ich Änderungen vornehmen soll.
Nun hab ich beispielsweise in der Datei template.php (im Theme-Ordner sites/all/ymeinTheme>/) ethliche Funktionen drin stehen.
In den Funktionen hab ich dann funktionsaufrufe wie: "views_theme_field", was meiner Meinung nach eine Drupal-Eigene Funktion sein müsste (oder?).
Meine Frage... in welchem Zusammenhang stehen die node-templates zu template.php. Und wie füttere ich die node-templates mit daten?
Hier: http://www.24ix.de/Drupal-Node-Templates.218.0.html hab ich schon gesehen, das es da standardisierte Platzhalter gibt... aber ich versteh noch nicht ganz, wo die die Daten hernehmen.
- Anmelden oder Registrieren um Kommentare zu schreiben

Die Datei "node.tpl.php" ist
am 01.04.2008 - 14:59 Uhr
Die Datei "node.tpl.php" ist die Mama aller anderen Node-Templates.
In der Regel gibt es verschieden Node-Typen. Die Inhaltausgabe der einzelnen Nodetypen kann mit einem entsprechenden Template angepasst werden.
Nodetyp: blabla -> Templatedatei: node-blabla.tpl.php
Nodetyp: meeting -> Templatedatei: node-meeting.tpl.php
Um mit den Templates fuer einzelne Nodetypen arbeiten zu koennen muessen die Templatedateien, der Namenskonvention folgend, einfach nur im Themeordner erstellt werden.
Bei einem neu erstellten Template fuer einen Nodetyp wird zunaechst der Code von der Mama, der Datei "node.tpl.php" eingefuegt.
Nun zur Datei "template.php"
Drupal hat in den einzelnen Modulen sogenannte Theme-Funktionen. Diese Theme-Funktionen Funktionalitaet ist ein Anstatz fuer das Erstellen von Templates, also Template-Dateien fuer spezielle Dinge. Eben dem Code der in einer solchen Theme-Funktion steckt.
In der Regel wird eine Theme-Funktion auch Inhalte ausgeben.
Beispiel:
Es gibt in einem Modul die Funktion
function theme_node_add_list()Um dafuer ein Template verwenden zu koennen muss in der "template.php" zusaetzlich eingefuegt werden:
function phptemplate_node_add_list($type = NULL) {return _phptemplate_callback('node_add_list', array('type' => $type));
}
Aus dem Namen der Theme-Funktion ergibt sich der Name fuer die Template-Datei:
Funktionsname: function theme_node_add_list() -> "template.php": function phptemplate_node_add_list()
Template-Datei: node_add_list.tpl.php
In der Template-Datei wird der Code aus der Funktion "function theme_node_add_list()" eingefuegt.
Meist gibt eine Theme-Funktion zuruck mit
return $output. Dieses return muss im Code der Template-Datei geaendert werden inprint $output!Beispielcode einer "node_add_list.tpl.php" aus einem konkreten Beispiel welches ich verwende:
<?php /* $Id: node_add_list.tpl.php, v 1.0 2008/03/25 quiptime Exp $ */
/**
* Anzeige der Seite mit den möglichen zu erstellenden Inhalten (Link "Inhalt erstellen").
* Es wird geprüft ob ein Benutzer Adresse und Mitgliedsantrag erstellt hat.
* Wenn ja wird jeweils der Link zum Erstellen dieser Inhalte unterdrückt.
*/
$output = '';
global $user;
$roles = $user->roles;
$type_memberapp = 'memberapp';
$memberapp = nodeprofile_load($type_memberapp, $user->uid);
$type_address = 'address';
$address = nodeprofile_load($type_address, $user->uid);
$types = node_get_types();
$type = isset($type) ? str_replace('-', '_', $type) : NULL;
// If a node type has been specified, validate its existence.
...
...
...
if (isset($item)) {
uksort($item, 'strnatcasecmp');
$output = t('Choose the appropriate item from the list:') .'<dl>'. implode('', $item) .'</dl>';
}
else {
$output = t('No content types available.');
}
}
print $output;
?>
Hier ist das "print $output" zu sehen. Zusaetzlich habe ich am Anfang des Templatecode
"$output = '';eingefuegt.Hinweis:
Die Themefunktion in meinem Beispiel hier gibt es nicht wirklich. Sie wurde von mir im node.module erstellt um das Manko von Nodeprofile Nodes auszugleichen, das in der Liste "Inhalt erstellen" einem Benutzer noch die Links zum Erstellen von Nodeprofile Nodes angezeigt werden auch wenn er sie schon erstellt hat (Nodelimit 1).
-------------
quiptime
Nur tote Fische schwimmen mit dem Strom.
Danke schon mal für den
am 01.04.2008 - 17:25 Uhr
Danke schon mal für den kleinen Überblick.
Ich suche irgendwie noch den richtigen Ausgangspunkt.
Also ich habe jetzt ein Newsblog. Dafür ein Template "node-news.tpl.php".
Wenn ich dieses Template ändere, ändert sich die Darstellung des Newsbeitrag, wenn ich Ihn in Vollansicht anzeige.
Unter den Beiträgen kann man noch Kommentare zu den news abgeben, bzw. auch auf die Kommentare anderer Bernutzer antworten.
Diesen Komentarbereich will ich ändern. Und ich finde einfach nicht wo es geht. Im node-news.tpl.php endet der Code mit Darstellung der News...
Was ich suche ist ein Knotenpunkt, von dem aus ich mich in das System einarbeiten kann, um die Struktur zu verstehen.
Ich ziehe jedesmal den Falschen Faden scheint mir,
Gibt es keine Entwickler-Howto, die kurz die Rahmenbedingungen des CMS umreißt... also bezüge der Dateien und Verzeichnisse zueineader erklärt?
api.drupal.org
am 01.04.2008 - 17:49 Uhr
Vermutlich gibst Du in Deinem Template den Code mit
Codeschnipsel:
<?php if ($links): ?><div class="links"><?php print $links; ?></div>
<?php endif; ?>
aus.
In $links steckt der Kommentarlink. Nun kommt es darauf an was Du mit dem Link machen willst.
Um die Links zu themen sehe Dir mal die Drupal API an
http://api.drupal.org
Speziell das hier:
http://api.drupal.org/api/function/theme_links/5
Daraus ergibt sich man kann ein Template mit der Datei "links.tpl.php" erstellen. Wie das geht steht in meiner Uebersicht.
Nur als Ansatz, in der "template.php" wuerde fuer die "links.tpl.php" stehen:
function phptemplate_links($links, $attributes = array('class' => 'links')) {return _phptemplate_callback('links', array('links' => $links, 'attributes' => $attributes));
}
Soviel noch zu meiner Uebersicht.
-------------
quiptime
Nur tote Fische schwimmen mit dem Strom.
Soweit kann ich dir folgen,
am 02.04.2008 - 09:06 Uhr
Soweit kann ich dir folgen, es löst aber nicht mein Problem.
Genauer gesagt möchte ich die Funktion rausnehmen, das man auf den Kommentar eines anderen Useres Antworten kann, und der Titel bei den Kommentaren soll verschwinden (also so das nur die Komentartexte untereinander stehen).
Die theme.inc und die template.inc.php hab ich mir schon angeschaut, aber die scheinen nichts mit dieser Antwortfunktion zu tun zu haben.
Was mir bisher an Drupal fehlt ist die Möglichkeit, sich durch den Code durchzuhangeln... Also das man an einer Ecke anfängt, und dann über die funktionen usw. sich den Code erschließen kann.
Oder ich habe den richtigen Ansatzpunkt zum durchhangeln noch nicht gefunden.
Ok, mein Problemchen ist
am 02.04.2008 - 10:44 Uhr
Ok, mein Problemchen ist gelöst.
Wenn man weiß wo man suchen muss, geht es sicher einfacher von der Hand, aber als Newbee ist es der Horror sich in die Drupal strukturen einzuarbeiten.
Lass doch andere
am 02.04.2008 - 10:51 Uhr
Lass doch andere Hilfesuchende an Deinem neu gewonnenen Wissen teilhaben: Wie hast Du es denn gelöst?
--
bv - drupalcenter.de