2009-08-12 9 views
3

en utilisant un module personnalisé pour créer le contenu de ma page d'accueil sur example.com/frontpage.drupal 6: comment obtenir les données d'un module personnalisé dans un fichier modèle

Dans le module, je lance une requête qui obtient les données dont j'ai besoin, dans un tableau. quand je retourne le thème ('page', $ mon_array) je reçois la "page d'accueil à l'intérieur de la page d'accueil", ie le logo drupal par défaut et le nom du site s'affiche une seconde fois dans la zone de contenu principale.

Quelle est la meilleure façon d'y parvenir, créer un fichier tpl.php spécifique, dont le contenu devrait être ...?

Je réalise sa une question très générale, mais en 2 heures d'essayer des choses et la lecture des tutoriels ive obtenu pas très loin du tout ...

grâce

Répondre

2

Si je comprends bien votre question, tout ce que vous avez à faire est de retourner le contenu sans le faire passer par theme_page. theme_page prend votre contenu et l'enveloppe dans le modèle de site, donc l'appeler manuellement dans votre cas est la duplication du modèle.

Une solution alternative est d'avoir la fonction de rappel de votre page ne retourne rien, à la place l'impression la sortie de theme_page. Si une fonction de rappel ne renvoie aucun texte, le modèle du site n'est pas inclus automatiquement.

<?php 

function mymodule_menu() { 
    $items = array(); 

    $items['option1'] = array(
    'title' => 'Front page option #1', 
    'access arguments' => array('access content'), 
    'page callback' => 'mymodule_option1', 
    'type' => MENU_CALLBACK, 
); 

    $items['option2'] = array(
    'title' => 'Front page option #2', 
    'access arguments' => array('access content'), 
    'page callback' => 'mymodule_option2', 
    'type' => MENU_CALLBACK, 
); 

    return $items; 
} 

function mymodule_option1() { 
    // build HTML content here 
    return $content; 
} 

function mymodule_option2() { 
    // build HTML content here 
    print theme('page', $content); 
    return null; 
} 
+0

L'option 1 fonctionne, ne s'est pas rendu compte que le nom var devait être $ content. maintenant je vois Array sur ma page d'accueil. donc j'ai besoin de construire le html complet à l'intérieur de la fonction mymodule_option1? Arent vous avez voulu mettre php en html pas html en php? – stef

+0

l'option 2 fonctionne encore mieux; merci ceejayoz! – stef

+1

Si vous voulez rendre réel Drupalish, vous devriez faire une fonction de thème qui rend le HTML réel, tandis que votre rappel de menu fait la logique. C'est ce que font les modules contrib pour permettre de surcharger leur sortie. Dans un site-module personnalisé à usage unique seulement, ce n'est pas si important, cependant.A part ça, une bonne réponse +1 – googletorp

0

Vous pouvez être mieux avec « vues » qu'un module personnalisé, unles la requête pour la page d'accueil est vraiment bizarre, des vues devraient être mieux qu'un module personnalisé pour ce genre de chose.

Si vous avez votre propre thème (ou êtes prêt à créer un), vous pouvez utiliser la page-front.tpl.php (comme expliqué here)

+0

Panneaux + Vues serait encore mieux dans de nombreux cas. – ceejayoz

+0

essayé depuis des siècles avec un collègue utilisant, ne fonctionne pas. J'ai besoin d'un peu de logique dans la vue, ce qui n'est pas possible. – stef

+0

qui aurait dû être "en utilisant des vues, ne fonctionne pas" – stef

0

Ce qui est dans votre fichier de modèle? Est-il possible que ces éléments soient rendus deux fois parce qu'ils sont inclus deux fois, c'est-à-dire une fois dans la page page.tpl.php de votre thème et à nouveau dans la variable $content (qui semble être générée par votre module)?

De nombreux fichiers modèles ont la structure suivante:

print $head; 
print $logo, $search, $navbar, $messages; 
print $content; 
print $footer, $closure; 

Si theme('page', $my_array) est responsable de la création de la déjà variables $content et $content comprend $logo et amis, ils vont être rendus deux fois.

La première étape je prendrais dans ce cas est la mise en œuvre hook_preprocess_page() dans le fichier template.php de mon thème, et jeter dans certains dsm() appels (si vous avez le module devel installé - que vous devez), ou print_r() s », à voir exactement ce qui le rend au modèle de page.
HTH

Questions connexes