Как поделиться экземпляром между несколькими файлами php-а-ля-Wordpress? - PullRequest
3 голосов
/ 11 июля 2010

Приветствую всех,

В настоящее время я использую Wordpress в качестве моей CMS и использую Graph API Facebook для создания учетной записи пользователя.

Мой вопрос заключается в том, как использовать PHP SDK Facebook (находится здесь: http://github.com/facebook/php-sdk/),, когда Wordpress компилирует несколько файлов php для вывода одной веб-страницы? Другими словами, шаблоны Wordpress header.php + index.php + footer.php = то, что вы видите на www.example.com

Если я создаю свой экземпляр приложения Facebook в HEADER.PHP , как я буду ссылаться на них в INDEX.PHP и FOOTER.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();
?>

Ответы [ 4 ]

3 голосов
/ 11 июля 2010

Если вы установите $facebook в header.php, вы не сможете получить доступ к нему в index.php, если вы не глобализируете его.

Это потому, что header.phpзагружается через функцию get_header(), которая сужает область действия всех неглобальных переменных.

Таким образом, вы можете либо глобализировать $facebook ИЛИ , так каквам нужен один экземпляр Facebook, я настоятельно рекомендую использовать одноэлементную вспомогательную функцию ;

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, у вас нетбеспокоиться о возвращении по ссылке.

1 голос
/ 11 июля 2010

PHP обрабатывается по порядку, то есть вам нужно убедиться, что header.php включено, прежде чем вызов произойдет в index.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 Graph API, работает неправильно и возвращает false или что-то еще. Ваш вывод var_dump будет таким же, если $facebook существует и не подключен должным образом (или что-то в этом роде), но будет другим, если вы попытаетесь получить доступ к $facebook до того, как настроите его (один будет NULL и сгенерирует E_NOTICE, другой будет объектом Facebook - или что-либо еще, полученное из вызова API Graph Facebook).

1 голос
/ 11 июля 2010

Как только вы включите клиент Facebook в свой файл header.php и создадите его экземпляр:

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

Вы сможете получить доступ к экземпляру клиента Facebook $facebook из вашего файла index.php или дажеФайл footer.php или любой другой файл, в который включен header.php.

0 голосов
/ 11 июля 2010

Рассмотрите возможность использования подключаемого модуля Wordpress Facebook Connect, который уже реализует это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...