web-dev-qa-db-fra.com

Comment remplacer le page.tpl par défaut d'un module, pour une page spécifique?

Je code un module qui contient une page "veuillez patienter".

Sur cette page, je dois remplacer le modèle page.tpl par défaut afin de pouvoir afficher le message "veuillez patienter" seul sans toutes les autres régions et "site chrome".

Comment dire à drupal de ne pas utiliser le page.tpl par défaut et d'utiliser ma page-special.tpl pour la page spécifique "veuillez patienter"?

MODIFIER

Veuillez noter que je code un module, pas un thème. Donc tout doit être fait depuis l'intérieur du module.

6
redben

Selon conseil de Stuart Clark

Tout ce que vous avez à faire est de créer un modèle, par exemple: mymodule/theme/special-page.tpl.php

et ajoutez ceci à votre module

function mymodule_theme(){
  return array(
    'special_page' =>  array(
      'template' => 'theme/special-page',
      'render element' => 'page'
    ),
  );
}

function mymodule_preprocess_page(&$variables, $hook) {
  if ( my_condition() ) {
    $variables['theme_hook_suggestions'][] = 'special_page';
  }
}
18
redben

Vous voyez, presque chaque rappel de page déclaré dans hook_men est encapsulé à la fois dans html.tlp.php et page.tpl.php. C'est parce que la plupart des modules ne déclarent pas le rappel de livraison de l'élément de menu, et il est par défaut drupal_deliver_html_page . Vous pouvez déclarer votre propre rappel de livraison et utiliser une fonction de thème personnalisée (voir hook_theme ) pour afficher votre page. Cela facilitera également les remplacements pour les utilisateurs.

2
Capi Etheriel

Vous devez faire une copie de page.tpl.php et renommez-le page--node--1.tpl.php Ensuite, vous pouvez styliser la nouvelle page. Lorsque vous créez le nouveau fichier, n'oubliez pas de vider le cache. Vous pouvez trouver plus d'informations ici http://drupal.org/node/1089656 et ici

0
Tyler Durden

Vous pouvez utiliser ce crochet

function theme_preprocess_page(&$variables, $hook) {
$variables['theme_hook_suggestions'][] = 'page__special';
}

mais vous devriez avoir un tpl appelé page - special.tpl.php

0
Ahmed

essayez d'utiliser ceci

function mymodule_menu()
{
 $items['test'] = array(
        'title' => t('Testing'),
        'page callback' => 'test',
        'access arguments' => array('access content'),
        'type' => MENU_CALLBACK,
    );
return $items;
}

function test()
{
    return theme('test');
}
function mymodule_theme(){
    return array(
        'test' => array(
            'template' => 'test'//name of template file, place test.tpl.php in your module
        )
    );
}
0
Ashu