2015-03-05 3 views
0

Я хочу установить глобальную переменную, которую может видеть любой модуль в моем проекте Drupal и получить его значение. Вот мой код:Использование drupal_static var для модулей

  • Мой модуль 1:

    function setGlobalDocId($params){ 
        $global_selected_DocId = &drupal_static(__FUNCTION__); 
        $global_selected_DocId=$params; 
    } 
    
  • Мой модуль 2:

    $selectedId=&drupal_static('setGlobalDocId'); 
        echo (" selectedId = ".$selectedId); 
    

Я уверен, что setGlobalDocId() в моем модуле 1 был выполнен перед вызовом глобальной переменной в моем модуле 2. Я что-то пропустил? У меня ничего не получилось.

+1

Я исправил форматирование; вам нужно в общей сложности 8 ведущих мест, чтобы поставить код под маркой. Кроме того, я изменил название, чтобы быть более конкретным. Я не знаю Drupal, но кажется, что недостаточно ответа на вопрос. Может быть, вы могли бы добавить минимальный пример того, как вы выполняете эти модули? –

+0

спасибо @JonEricson, на самом деле моя статическая переменная должна быть установлена ​​первым модулем, и мне нужно получить ее значение через вторую. Т думал, что 'drupal_static' решит проблему, но это не сработало. Я не знаю, почему, я попробовал переменную' cache', но я думаю, что это не оптимально, так как моя переменная имеет конфиденциальные данные, поэтому я решил объедините два модуля в один, чтобы избежать проблемы связи, это временное решение, но до сих пор все в порядке, спасибо вам, и я сожалею о своем английском. – Oumaya

ответ

0

В вашем примере кода вы создаете $global_selected_DocId в setGlobalDocId как глобальную переменную. Но в вашем module 2 вместо запроса глобального $global_selected_DocId вы запрашиваете переменную с именем setGlobalDocId, которого нет в вашем случае.

Для решения этой проблемы, вы должны использовать эту же структуру кода в module 2, что и в module 1.

$global_selected_DocId = &drupal_static(__FUNCTION__, null); 
if ($global_selected_DocId === null) { 
    //global_selected_DocId is not set, do a fallback or someting else to capture exception 
} 

//global_selected_DocId should contain value set through setGlobalDocId in module 1 
+0

нет такой же результат !!, в любом случае я использовал cache_set(), и это прекрасно, спасибо за ваше время Майк. – Oumaya

+0

Странно ... вы уверены, что 'setGlobalDocId' вызывается перед модулем 2 и на том же запросе страницы? –

+0

Да, я объединил два модуля как временное решение лучше, чем кэш-переменную. – Oumaya

Смежные вопросы