2 votes

Utilisation de front.tpl dans Drupal 7 pour une autre page

Question assez directe :

J'ai des pages modèles page-front.tpl et page.tpl utilisées dans un site Drupal 7. Cependant, j'aimerais utiliser page-front.tpl sur une autre page. Est-ce possible ou dois-je créer une autre page .tpl pour le faire ?

Le site sur lequel je travaille est divisé en deux sections, il s'agit essentiellement de deux sites Web distincts entre lesquels vous pouvez passer, que vous soyez un consommateur ou un propriétaire d'entreprise. Je veux donc utiliser le modèle front.tpl pour la page d'accueil de chaque site.

A la vôtre.

6voto

Vlad Stratulat Points 1262

Vous pouvez ajouter theme_preprocess_page à la fonction template.php puis ajoutez le nom de votre modèle dans la liste des suggestions de modèles.

function mytheme_preprocess_page(&$vars) {
    // you can perform different if statements
    // if () {...
        $template = 'page__front'; // you should replace dash sign with underscore
        $vars['theme_hook_suggestions'][] = $template;
    // }
}

EDIT

Si vous voulez spécifier le nom du modèle par un alias de chemin, vous pouvez écrire un code comme celui-ci :

function phptemplate_preprocess_page(&$variables) {
    if (module_exists('path')) {
        $alias = drupal_get_path_alias($_GET['q']);
        if ($alias != $_GET['q']) {
            $template = 'page_';
            foreach (explode('/', $alias) as $part) {
                $template.= "_{$part}";
                $variables['theme_hook_suggestions'][] = $template;
            }
        }
    }
}

Sans cette fonction, vous auriez les suggestions de modèles de nœuds suivantes par défaut :

array(
    [0] => page__node
    [1] => page__node__%
    [2] => page__node__1
)

Et cette fonction appliquerait à votre nœud les nouvelles suggestions de modèles suivantes. Exemple de nœud avec node/1 et page/about alias :

array(
    [0] => page__node
    [1] => page__node__%
    [2] => page__node__1
    [3] => page__page
    [4] => page__page_about
)

Donc après cela, vous pouvez utiliser page--page-about.tpl.php pour votre page.

Si vous voulez appliquer page--front.tpl.php à votre, disons node/15 alors dans cette fonction vous pouvez ajouter l'instruction if.

function phptemplate_preprocess_page(&$variables) {
    if (module_exists('path')) {
        $alias = drupal_get_path_alias($_GET['q']);
        if ($alias != $_GET['q']) {
            $template = 'page_';
            foreach (explode('/', $alias) as $part) {
                $template.= "_{$part}";
                $variables['theme_hook_suggestions'][] = $template;
            }
        }
    }

    if ($_GET['q'] == 'node/15') {
        $variables['theme_hook_suggestions'][] = 'page__front';
    }
}

Vous obtiendrez ainsi les suggestions de modèles suivantes :

array(
    [0] => page__node
    [1] => page__node__%
    [2] => page__node__1
    [3] => page__page
    [4] => page__page_about
    [5] => page__front
)

L'indice le plus élevé - la priorité la plus élevée du modèle.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X