2010-07-11 52 views
3

問候每個人,如何在多個php文件中共享實例a-la-Wordpress?

我目前使用Wordpress作爲我的內容管理系統,並利用Facebook的Graph API用戶帳戶/註冊「東西」。

我的問題是如何使用Facebook的PHP SDK(在這裏找到:http://github.com/facebook/php-sdk/),當Wordpress編譯幾個php文件輸出一個單一的網頁?換句話說,WordPress的模板的header.php + 的index.php + footer.php =你在www.example.com

看到如果我在HEADER我創建Facebook的應用實例.PHP,我將如何參考INDEX.PHPFOOTER.PHP

在此先感謝!

-----樣品編號---

中的header.php

<?php 
require '/facebook.php'; 

// Create our Application instance. 
$facebook = new Facebook(array(
    'appId' => 'xxx', 
    'secret' => 'xxx', 
    'cookie' => true, 
)); 
?> 

的index.php中

<?php 
$session = $facebook->getSession(); 
?> 

回答

3

如果您在header.php設置$facebook,你不會,除非你是全球化能夠訪問它index.php

這是因爲header.php通過函數get_header()加載,該函數將所有非全局變量的範圍縮小爲the scope

所以,你既可以全球化$facebookOR,因爲你想要的Facebook一個實例,我強烈建議使用singleton helper function;

function get_facebook_instance() 
{ 
    static $f; 
    if (!isset($f)) { 
     if (!class_exists('Facebook')) 
      require('/facebook.php'); 
     $f = new Facebook(array(
      'appId' => 'xxx', 
      'secret' => 'xxx', 
      'cookie' => true, 
     )); 
    } 
    return $f; 
} 

注意:如果您使用的是PHP5,則不必擔心通過引用返回。

+0

謝謝@TheDeadMedic。你是對的。我將實例助手函數放在了functions.php中,現在可以訪問這些變量。 – st4ck0v3rfl0w 2010-07-11 18:16:19

+1

很好的答案@TheDeadMedic和偉大的鏈接引導:) – hsatterwhite 2010-07-12 12:41:39

+0

這個答案看起來像我所需要的。我仍然對如何從模板文件訪問SDK有點好奇。它使用$ facebook還是$ f?我必須首先在每個模板文件中調用get_facebook_instance(),或者在函數中調用一次?我需要從add_action鉤子調用get_facebook_instance嗎? – 2012-08-25 23:19:13

1

一旦你有Facebook的客戶端在你的header.php文件中並創建一個實例:

$facebook = new Facebook('API', 'SECRET'); 

然後,您可以從您的index.php文件甚至footer.php文件或任何其他包含header.php的文件訪問facebook客戶端實例$facebook

+0

你確定嗎?這是我開始在標題中,然後有東西在index.php呼叫後得到的東西,然後在index.php 致命錯誤:調用一個非對象的成員函數getSession()在 – st4ck0v3rfl0w 2010-07-11 08:24:11

+0

@ st4ck0v3rfl0w:您還應該發佈您的示例代碼以查看你是如何做到的。它可以幫助我們進一步。 – Sarfraz 2010-07-11 08:27:18

+0

當然,好點sAc,看我的編輯 – st4ck0v3rfl0w 2010-07-11 08:30:31

1

按照順序處理PHP,即在index.php發生呼叫之前,您需要確保包含header.php。這可能是因爲你總有這樣的事:

在index.php文件

<?php 
// blah blah other code 
$session = $facebook->getSession(); 
// blah blah more code 
include('header.php'); 

這當然會被解讀爲:

<?php 
// blah blah other code 
$session = $facebook->getSession(); 
// blah blah more code 
require '/facebook.php'; 
// Create our Application instance. 
$facebook = new Facebook(array(
    'appId' => 'xxx', 
    'secret' => 'xxx', 
    'cookie' => true, 
)); 

你可以當你看到整個代碼見那$facebook將不存在。

添加var_dump($facebook);到header.php文件的末尾(已設置$facebook也是一個index.php文件(您嘗試使用$facebook)權之前開始後。

其他的事情,它可能是的,你打電話給Facebook圖API不能正常工作,並返回false或其他東西。如果$facebook存在,並且沒有正確連接(或類似的東西),但你的var_dump輸出將是相同的,但將是不同的如果您在設置之前嘗試訪問$facebook(其中一個將會是NULL並且將生成E_NOTICE,另一個將會是Facebook對象 - 或者其他什麼是ret來自Facebook Graph API調用)。

+0

你是對的...... ugh – st4ck0v3rfl0w 2010-07-11 08:56:53

+0

實際上......我只是在header.php中執行vardump,當我在index.php中創建$ facebook實例時,它返回NULL 。我也反過來做了它,並執行在index.php中的vardump當我在header.php中創建實例,它也返回NULL ..... 什麼是關於!? – st4ck0v3rfl0w 2010-07-11 09:11:15

+0

'var_dump($ facebook)'返回'null'或'var_dump($ facebook-> getSession())''返回'null'?如果是前者,那麼你沒有正確連接到Facebook,如果它是後者,那是因爲你沒有Facebook會話,請確保你有「連接到Facebook」按鈕或類似的東西。 – 2010-07-11 11:28:42

0

考慮使用Wordpress Facebook Connect插件,它已經實現了這一點。

相關問題