2010-10-17 4 views
1

Je mets une session var à la fonction de prétraitement de modèle dans un thème que j'utilise, mais la première fois que j'ouvre le site je ne peux pas lire la session var, si je rafraîchis la page ça fonctionne bien peut être le problème ??Fonction et session de prétraitement Drupal

C'est le code que j'utilise dans la fonction prétraiter:

function m_preprocess(&$vars, $hook) { 
    $default_location = array(
     'country_code' => 'ec', 
     'province_code' => 'p', 
     'province' => 'Pichincha', 
     'city' => 'Quito', 
     'city_path' => 'lugares/u/ec/p/*' 
    ); 
    if (isset($_COOKIE['proximity_path'])) $default_location['proximity_path'] = $_COOKIE['proximity_path']; 
    $default_location['path'] = isset($_COOKIE['sort-by']) && $_COOKIE['sort-by']=='proximity'? $_COOKIE['proximity_path'] : $default_location['city_path']; 
    $_SESSION['location'] = $default_location; 
} 

Répondre

0

Je n'ai pas trouvé de solution, je pense que pour utiliser les variables de session sans problème, vous devez l'utiliser uniquement dans les fichiers tpl.php .

0

Quelques choses:

  1. Essayez dsm ($ _ SESSION); pour voir quel est le contenu de var quand le site charge d'abord. Je ne sais pas où vous créez $ _COOKIE ['proximity_path'], mais ce n'est pas dans le code que vous montrez.

  2. Vérifiez les fautes de frappe

+0

$ _COOKIE ['proximity_path'] est créé du côté client, autre chose à considérer, j'utilise la variable $ _SESSION var dans le contenu du noeud en utilisant le filtre php-code – juanca

+0

C'est la première valeur: Array ([mobile-tools- mobile-device] => Array ([type] => desktop [groupe] =>) [mobile-tools-site-type] => mobile) et ceci est la valeur après actualisation de la page: Array ([mobile-tools- mobile-device] => Tableau ([type] => desktop [groupe] =>) [type-site-type-mobile] => mobile [emplacement] => Tableau ([country_code] => ec [code_province] => p [province] => Pichincha [ville] => Quito [chemin_pays] => lugares/u/ec/p/* [chemin] => lugares/u/ec/p/*)) – juanca

+0

Je teste print_r ($ _ SESSION) dans le page.tpl.php et dans le contenu du nœud, le problème est uniquement dans le contenu du nœud – juanca

0

Le modèle fonction de pré-processus est appelé avant node.tpl.php (c'est pourquoi il est appelé pré-traitement) et qui est la raison pour laquelle la valeur de la variable $ _SESSION n'est pas disponible dans la fonction de prétraitement du modèle.

Comme vous l'avez souligné, cela fonctionne après le chargement de la première page. Cela se produit uniquement après que la variable $ _SESSION est définie dans le corps du noeud (en utilisant le filtre PHP)

+0

que recommandez-vous de faire ?? – juanca