Mysteriöses Problem mit theme() tpl.php laden
am 18.02.2012 - 14:35 Uhr in
Einen angehehmen Samstag Nachmittag,
dies hier ist mein erster Eintrag, ich bin wirklich verzweifelt.
Ich versuche seit Stunden heute (als auch gestern) ein tpl file einzuladen und anzuzeigen.
Komischerweiße funktioniert das bei genau einem Punkt nichtmehr, und ich kann definitiv nicht dahhinter steigen wieso. Ich habe alles möglich probiert, rumgedoktort.
Von PHP Errors (die es nicht gibt), Cache leeren, Theme wechseln... hat alles nichts geholfen.
Ich poste hier mal den Code um das ganze zu verdeutlichen:
<?php
function file_stats_eu() { return file_stats("stats_eu").theme('spacer').theme('entry_footer'); }
?><?php
$items['file/stats/eu'] = array(
'page callback' => 'file_stats_eu',
'access arguments' => array('access file_numbers content'),
'type' => MENU_CALLBACK
);
?>Die Funktion file_stats ist mit dem return Wert
<?php
function file_stats($theme)
{
//[.....]
return theme('stats_eu', $values);
}
?>Komische hierbei, er ladet das template stats_eu.tpl.php nicht ein. Sobald ich aber ein existierendes template nehme (also was von anderen benutz wird) funktioniert es einwandfrei.
Egal was für ein neuen Dateinahmen ich nehme, ich mag einfach nicht funktionieren. Nehme ich ein existierendes, funktioniert es.
Hat irgendjmd eine Idee? Den Cache leere ich immer nach dem Uploaden der neuen Datein.
Vielen herzlichen Dank!
Mit freundlichen Grüßen,
s1x
- Anmelden oder Registrieren um Kommentare zu schreiben

Woher soll Drupal etwas über
am 18.02.2012 - 18:11 Uhr
Woher soll Drupal etwas über
theme('stats_eu', $values)wissen? Das sieht mir nach einer von Dir verfaßten Funktion aus, die Du aber scheinbar nicht über hook_theme definiert hast. Außerdem, wenn Du schon eine eigene Funktion schreibst, warum dann ein Template-File und nicht eine Theme-Funktion namens theme_stats_eu. Die Theme Funktion wäre etwas performanter, aber auch die muß über hook_theme angemeldet werden.Beste Grüße
Werner
Hallo, erstmal vielen Dank
am 18.02.2012 - 18:28 Uhr
Hallo,
erstmal vielen Dank für deine Antwort.
Die Funktion theme() ist keine von mir selber geschrieben Funktion. Sie befindet sich bei mir in includes/theme.inc . Dort wird definitv jedes theme angemeldet (registry).
Das komische an der Sache ist, ich habe ja schonmal genau gleiches benutzt, auch die theme funktion mit einem neuen template, in der selben Datei, und dort hat es funktioniert.
ich verstehe nicht wieso er das neue template nicht annehmen will und nur ein weiße inhaltsseite anzeigt (footer wird korrekt ausgelesen!). Das ist für mich ein Mysterium.
Ja, theme() ist eine
am 18.02.2012 - 20:56 Uhr
Ja, theme() ist eine Core-Drupal Funktion. Die kann aber mit Deinem Argument 'stats_eu' standardmäßig nicht anfangen (wieso auch). Daraus wird üblicherweise die Funktion theme_stats_eu, die dann gesucht wird. Hast Du die irgendwo definiert? Das heißt, hast Du in einem Modul
mittels der Implementation von hook_theme diese Funktion bei Drupal registriert? Vermutlich nicht, denn Du willst ja mit einem Template-File arbeiten. Hast Du denn das von Dir eingestellte Template auch in die Template-Suggestions eingetragen?
Sieh Dir bitte auf Drupal.org die Infos zu Template Suggestions an. Drupal findet Dein Template nicht automatischn nur weil es im Theme Verzeichnis liegt. Was für ein Typ ist dieses Template-File bzw. welche Drupal Funktion wird es letztlich aufrufen? Node Templates werden über das Node-Modul aufgerufen, Page-Templates werden über das System-Modul eingebunden. Du kannst nicht irgend ein Template-File erstellen und meinen irgendwie wird das schon aufgerufen werden.
Die einfachste Möglichkeit ist es die Funktion theme_stats_eu in einem eigenen Modul zu schreiben und mittels hook_theme zu registieren.
Beste Grüße
Werner
Ich glaube das habe ich
am 19.02.2012 - 02:21 Uhr
Ich glaube das habe ich ansich nicht gemeint.
Nachgeschaut habe ich jetzt mal deine Schlagwörter, tatsächlich wenn ich noch registriere und "file"=> dazuhänge wird die Seite angezeigt, sie wird aber nicht in den Content eingefügt. Wahrscheinlich bin ich einfach zu unerfahren mit Drupal und dem node/page system & Co.
Danke dir trotzdem sehr für deine Hilfe, im Endeffekt haben mich deine Punkte zu dem entsprechenden Lösungsweg gebracht den ich irgendwo im WWW gefunden habe.
Relativ unsauber der Code, aber ich habe momentan nicht die Zeit diesen doofen Fehler ausfindig zu machen, und solang es funktioniert ist es erstmal okay.
<?php// workaround (i actually dont know why it doesnt work the normal way...!?)
$template_file='file_eu.tpl.php';
extract($values, EXTR_SKIP); // Extract the variables to a local namespace
ob_start(); // Start output buffering
include "modules/file_numbers/$template_file"; // Include the template file
$contents = ob_get_contents(); // Get the contents of the buffer
ob_end_clean(); // End buffering and discard
return $contents;
?>
Trotzdem noch mal vielen herzlichen Dank!