2010-10-15 12 views
1

J'ai donc créé un module personnalisé pour Drupal 6.x et fonctionne comme je peux voir les résultats souhaités dans la page page.tpl.php, mais quand je modifie une page à partir de l'interface graphique (il permet les balises php) l'objet n'est pas accessible.Objet du module personnalisé Drupal non accessible depuis les balises PHP de l'interface graphique

Je peux définir les valeurs dans une session à laquelle je peux accéder à partir de l'interface graphique ainsi que le module, mais est-ce la bonne façon de faire cela?

Voici l'erreur que je reçois:

Fatal error: Call to a member function getEmail() on a non-object in /var/www/domain/includes/common.inc(1695) : eval()'d code on line 221 

Call Stack 
# Time Memory Function Location 
1 0.0003 64108 {main}() ../index.php:0 
2 0.0965 11659504 menu_execute_active_handler() ../index.php:18 
3 0.1040 12626908 call_user_func_array () ../menu.inc:348 
4 0.1040 12627316 node_page_view() ../menu.inc:0 
5 0.1040 12627532 node_show() ../node.module:1797 
6 0.1040 12627848 node_view() ../node.module:1101 
7 0.1040 12628192 node_build_content() ../node.module:1006 
8 0.1041 12648832 node_prepare() ../node.module:1085 
9 0.1041 12649112 check_markup() ../node.module:1041 
10 0.1047 12671980 module_invoke() ../filter.module:457 
11 0.1047 12693240 call_user_func_array () ../module.inc:462 
12 0.1047 12693900 php_filter() ../module.inc:0 
13 0.1048 12694164 drupal_eval() ../php.module:82 
14 0.1059 12883728 eval(''?> 

getEmail() est une fonction dans une classe qui est dans mon module personnalisé. Je peux l'appeler à partir de la page.tpl.php très bien, alors pourquoi ne puis-je l'appeler à partir d'une page que j'ai édité dans l'interface graphique d'administration?

EDIT:

Ajout de code à partir du module:

//wrapperFunction() is calling the class and setting the values 
// this is just a getter/setter class w/ 1 function that formats a phone number, nothing special 
$custom = new CustomObj(); 
$custom->setEmail('[email protected],com'); 

return $custom; 

page.tpl.php

// calls the wrapper function and returns the object 
$custom_obj = wrapperFunction(); 
echo $custom_obj->getEmail(); // this prints the email just fine 

Modifier la page à travers l'interface graphique d'administration (Permet des balises PHP) L'ajout de ce code la page

<?php echo $custom_obj->getEmail(); ?> // throws the error 

Désolé, c'est mon premier module Drupal de sorte que toute idée serait génial que je suis aussi nouveau à l'aide de Drupal, soupir ...

+1

Pouvez-vous coller le code où vous appelez getEmail()? –

Répondre

0

Eh bien pour résoudre mon problème j'ai déplacé toute la logique vers le module et les champs que je voulais changer la mouche que je mets à la séance. donc dans la page page.tpl.php j'ai vérifié si la valeur SESSION a été définie, si elle était utilisée, sinon utiliser une valeur par défaut. En utilisant SESSION, j'étais capable de passer toutes les valeurs désirées à n'importe quelle page indépendamment de l'endroit où la page a été faite (GUI ou Hard coded).

1

Vous devriez essayer de mettre l'extrait

// calls the wrapper function and returns the object 
$custom_obj = wrapperFunction(); 
echo $custom_obj->getEmail(); // this prints the email just fine 

dans node.tpl.php au lieu de page.tpl.php. node.tpl.php est exécuté avant page.tpl.php afin que votre erreur survienne car $ custom_obj n'existe pas car il est créé uniquement dans page.tpl.php (en appelant le wrapperFunction() qui fait new).

[Je ne sais pas ce que vous essayez d'atteindre exactement. Ce n'est généralement pas une bonne idée d'avoir une logique métier dans vos fichiers tpl que vous semblez avoir ici ...]

+0

@phill: cela a-t-il fonctionné? –

+0

va tester cela aujourd'hui, mais pouvez-vous me dire où ajouter la logique métier, le besoin d'être sur chaque page? serait-il préférable d'utiliser node.tpl.php au lieu de page.tpl.php? Nouveau à la création de modules ainsi que Drupal donc toute aide dans la bonne direction –

+0

Aussi j'utilise mon propre thème, juste FYI si cela change vous répondez –