[gelöst] Eigene page.tpl.php für node-inhaltstyp (content-type) per .modul
am 17.02.2010 - 13:48 Uhr in
Ich habe ein Gallerie modul erstellt mit dem kann man Bilder uploaden und die erscheinen dann in einer flash gallerie.
Jetzt möchte ich ein fullscreen node implementieren. Das heist wenn der content-type flashgallery aufgerufen wird ändert sich die page.tpl.php ($left, $right , usw) werden entfernt es wird auf der
page-simpleplugin.tpl.php nur noch der content->body ausgegeben also die swf datei.
Bis jetzt bin ich so vorgegangen :
<?php
function simpleplugin_preprocess_page(&$variables) {
foreach ($variables['template_files'] as $file) {
$template_files[] = $file;
if ($file == 'page-node') {
$template_files[] = 'page-'. $variables['node']->type;
}
}
$variables['template_files'] = $template_files;
}
?>
Nach dem ich diesen code in mein Modul implementiert habe zeigt mir
das devel Modul folgendes an:
template file aufgerufen
page.tpl.php
welches file benutzt wird :
themes/garland/page.tpl.php
mögliche template files:
page-node-78.tpl.php < page-simpleplugin.tpl.php < page-node.tpl.php
Anhand der möglichen template files habe ich dann die page.tpl.php in meine module ordner kopiert und zu page-simpleplugin.tpl.php umbenannt, dann den cache geleert. Aber drupal ruft nach wie vor die Datei themes/garland/page.tpl.php auf.
Wenn ich die datei page-simpleplugin.tpl.php in den ordner themes/garland kopiere funktioniert es drupal ruft die seite page-simpleplugin.tpl.php auf .
Wie kann ich drupal beibringen das die Datei page-simpleplugin.tpl.php in meinem sites/modules/mymodul/page-simpleplugin.tpl.php liegt?
- Anmelden oder Registrieren um Kommentare zu schreiben
Probier mal, ohne
am 26.02.2010 - 14:52 Uhr
Probier mal, ohne Garantie:
/**
* Implementation of hook_theme_registry_alter().
*/
function simpleplugin_theme_registry_alter(&$theme_registry) {
array_unshift($theme_registry['page']['theme paths'], drupal_get_path('module', 'simpleplugin'));
}
hook_theme_registry_alter()
am 17.02.2010 - 16:01 Uhr
hatte leider nicht den gehoften erfolg
Ich würde das in der
am 17.02.2010 - 16:15 Uhr
Ich würde das in der page.tpl.php Datei regeln. Du bekommst da doch den Node über die Node-ID geliefert. Dann kannst Du auch den Typ abfragen. Danach über ein if- oder switch-Statement aufspalten in normalen Ablauf oder "Special Handling".
Das geht sicher.
Beste Grüße
Werner
Modul der community zur verfügung stellen
am 17.02.2010 - 18:05 Uhr
Ich würde das modul gerne später mal der community zur verfügung stellen, aber wenn man dann erst mal selbst ein bischen code hinzufügen muss oder eine datei dann ist es unbrauchbar.
Inzwischen hab ich mal ein wenig mit der function hook_theme() gespielt hatte aber auch kein erfolg.
folgenden code habe ich hinzugefügt:
<?php
/**
* Implements hook_theme().
*/
function simpleplugin_theme($existing, $type, $theme, $path) {
return array(
'page_simpleplugin' => array (
'arguments' => array('type' => NULL),
'template' => 'page-simpleplugin',
),
);
}
?>
aber leider auch kein erfolg :(
hook_theme_registry_alter
am 26.02.2010 - 14:52 Uhr
Hm, komisch... hook_theme_registry_alter() sollte aber auf jeden Fall der richtige Ansatz sein.
Schau mal hier, das müsste die Lösung enthalten: http://11heavens.com/theming-Drupal-6-from-the-module-layer
Vielen dank derjochenmeyer@
am 18.02.2010 - 10:16 Uhr
Vielen dank derjochenmeyer@ mit dem link konnte ich mein problem löse. :)
für alle die sich auch für das problem interessieren können meinen code ansehen:
<?php
/**
*
* Implementation of hook_node_info().
*/
function simpleplugin_node_info() {
return array(
'simpleplugin_gallery' => array(
'name' => t('Simpleplugin Gallery'), // Required.
'module' => 'simpleplugin_gallery', // Required.
'description' => t('Create a Fullscreen SWF Gallery'), // Required.
'has_title' => TRUE,
'title_label' => t('SWF Gallery Name'),
'has_body' => TRUE,
'body_label' => t('Text'),
'locked' => TRUE
)
);
}
function simpleplugin_gallery_form( $node ) {
// Title.
$type = node_get_types('type', $node);
$form['title'] = array(
'#type' => 'textfield',
'#title' => check_plain($type->title_label),
'#required' => TRUE,
'#default_value' => $node->title,
'#weight' => -10,
'#maxlength' => 255,
);
$form['body_filter']['body'] = array(
'#type' => 'textarea',
'#title' => check_plain($type->body_label),
'#default_value' => $node->body,
'#rows' => 6,
'#weight' => -9,
'#required' => TRUE,
);
return $form;
}
//preprocess
function simpleplugin_preprocess_page(&$variables) {
// If this is a node page (not a list of nodes page) and
// the node is shown in 'view' mode rather than 'edit' or whatever.
if (isset($variables['node']) && (arg(2) === NULL)) {
// If the content type of that one node is 'CONTENT_TYPE_NAME'.
if ($variables['node']->type == 'simpleplugin_gallery') {
$variables['template_file'] = 'page-simpleplugin_gallery';
}
}
}
/*
* Implementing of hook_theme_registry_alter
*/
function simpleplugin_theme_registry_alter(&$theme_registry) {
$theme_hook = 'page'; // my hook name
// Get the path to this module
$modulepath = drupal_get_path('module', 'simpleplugin');
// Add the module path on top in the array of paths
array_unshift($theme_registry[$theme_hook]['theme paths'], $modulepath);
// dsm($theme_registry[$theme_hook]['theme paths']);
}
?>
geholfen hat mir dieser link von derjochenmeyer@ :
falls die tpl.php datei in deinem themes ordner liegt
hook_theme_registry_alter
Noch interresante links zum thema :
screencast:
Different 5.x page templates depending on node type
hook_theme and tpl.php files: registering them with drupal, and passing variables
Theming Modules in Drupal 6