Coder1的建議非常好 - 它使您無法用很多垃圾填充全局變量名稱空間。這可能是最「優雅」的。如果你對PHP比較陌生,那麼它可能不是最容易使用的(如果你很難在返回數組的時候猜測可能是這種情況,但沒關係)。
但是,如果這確實是一個優先事項,那麼您可能並不在意擁有一個額外的全局變量。
我想我可能會在這裏說明一個明顯的問題 - 但是,在幾乎任何執行點(只要你需要的信息已經生成 - 例如$ user變量已經被填充),你可以這樣做:
$GLOBALS['users_friends_ids'] = /* your code goes here */
在你的模板
然後,您可以通過訪問這個...
$friendsArray = $GLOBALS['users_friends_ids'];
或者你可以簡單地使用結構
global $user_friends_ids;
當你想初始化變量,或者在一個函數或類中訪問它時(這是你的模板文件的情況 - 它們被稱爲函數內部,所以你需要全局化或使用$GLOBALS
陣列,它是「自動」在全局命名空間中活動的所有變量)。
要做到這一點的最「合邏輯」的地方是在模塊內使用衆多可用鉤子之一來執行此代碼只需執行一次。 hook_init()
可能會爲你做,如果用戶對象已經加載在這一點(不知道,你將不得不測試)。但是你可能不想弄清楚製作Drupal模塊(這並不困難)。
如果你在模板內部做這件事(雖然這不是一個好習慣,但很多Drupal網站所有者開始瞭解PHP的知識將所有內容都放在模板中),所以你會想知道在什麼時候執行哪個模板代碼。節點模板代碼傾向於在頁面模板代碼之前執行 - 這是合乎邏輯的,因爲否則頁面模板中節點內容的變量將不會被填充。
如果你有節點清單,他們會多次調用這個代碼,所以你最終會做類似Coder1描述的東西。如果你不想創建你自己的小模塊,你可以把它寫在主題的template.php文件中的函數聲明,因爲它只被調用一次。你不想在tpl.php文件中放置函數聲明,因爲它們有時會被調用多次(並且你不允許多次聲明函數)。
如果你很難理解函數和返回值,你可以在你的代碼中這樣做(這是非常非常不雅的 - 但最好是讓你理解的不雅的代碼比優雅的代碼更好)這是你不)。
if(!isset($GLOBALS['users_friends_ids'])) {
$GLOBALS['users_friends_ids'] = /* your code here */
}
我看到你的另一篇文章,關於你如何使用它。實際上不需要重新創建該數組用戶ID。你可以使用這個函數來設置$ users_friends(而不是$ users_friends_ids),然後你可以用下面的命令檢查一個特定的用戶ID是否存在於該數組中:key_exists($ some_uid,$ users_friends) – Coder1 2011-04-18 09:39:21
你怎麼稱呼模塊,它是通過使用module_invoke?在這裏真的很苦惱,你可以看到:( – james6848 2011-04-18 10:22:34
我通常有一個用於通用站點助手功能的模塊,但是如果你不習慣使用模塊,那麼你可以將該函數添加到你的template.php文件中。然後,在每個模板中,你需要訪問該用戶的ids數組,只需做一些事情,如$ users_friends_ids = mymodule_get_friend_ids(); – Coder1 2011-04-18 10:26:34