CakePHP Facebook插件(webtechnick)只能'分享'工作

时间:2011-07-03 14:42:38

标签: facebook cakephp plugins

我正在尝试使用来自webtechnick的Facebook插件和我的CakePHP 1.3.10应用程序。我按照所有指示进行安装并具备所有功能:

  • 已下载的软件包并安装在 app / plugins / facebook
  • 根据示例配置文件,使用我的应用的ID,密钥和密码创建 app / config / facebook.php
  • app_controller.php
  • 中包含 $ helpers = array('Facebook.Facebook')
  • 在我的布局中回复 $ this-> Facebook-> html()功能(重新定义默认的html标记)
  • 之前,回应布局底部的 $ this-> Facebook-> init()功能

然后,我在我的视图中使用此代码:

echo $this->Facebook->share('link'); 
echo $this->Facebook->like();   
echo $this->Facebook->comments();

但我只收到分享按钮,而不是相似或评论。我错过了任何一步吗?如果我在facebook帮助器 like()函数中回显某些东西,例如它在视图中打印,那么它实际上调用了该函数,但没有生成facbook元素。有任何想法吗?我不知道还有什么可以尝试,我相信我已经按照所有步骤......

---------- UPDATE --------------------------

使用Firebug我看到此脚本错误: FB.provide 不是函数

错误来自的文件是 http://connect.facebook.net/es_ES/all.js ,我认为该插件会调用它。但由于它是在Facebook的服务器上,我能做些什么呢?这是否意味着他们的结局存在问题?我没有看到我能做的更多事情。有任何想法吗?

4 个答案:

答案 0 :(得分:1)

看来all.js文件在IE和Firefox中都会出现问题。我正在使用IE8和Firefox 7。

在查看以下内容后... Stack Overflow AnswerFacebook Bug Report我能够解决这两个问题。对我的修复是编辑facebook.php助手并添加以下内容......

IE修补

FB.UIServer.setActiveNode = function(a,b){FB.UIServer._active[a.id]=b;}

Firefox修复

window.FB = null;
FB = null;

完成init()函数

function init($options = array()){
    if(FacebookInfo::getConfig('appId')){
        $appId = FacebookInfo::getConfig('appId');
        $session = json_encode($this->Session->read('FB.Session'));
        $init = '<div id="fb-root"></div>';
        $init .=  $this->Html->scriptBlock(
            "
            window.fbAsyncInit = function() {
                FB.init({
                    appId   : '{$appId}',
                    session : {$session}, // don't refetch the session when PHP already has it
                    status  : true, // check login status
                    cookie  : true, // enable cookies to allow the server to access the session
                    xfbml   : true // parse XFBML
                });

                /* IE FIX */
                FB.UIServer.setActiveNode = function(a,b){FB.UIServer._active[a.id]=b;}
                /**********/

                // whenever the user logs in, we refresh the page
                FB.Event.subscribe('auth.login', function() {
                    window.location.reload();
                });
            };
            (function() {

                /* FIREFOX FIX */
                window.FB = null;
                FB = null;
                /**********/

                var e = document.createElement('script');
                e.src = document.location.protocol + '//connect.facebook.net/{$this->locale}/all.js';
                e.async = true;
                document.getElementById('fb-root').appendChild(e);
            }());
            ",
            $options
        );
        return $init;
    }
    else {
        return "<span class='error'>No Facebook configuration detected. Please add the facebook configuration file to your config folder.</span>";
    } 
}

有点晚了,但我希望这有助于某人!

答案 1 :(得分:1)

这可能是因为Facebook贬低了FBML。

因此,请在html代码前使用普通$this->Facebook->html();代码而不是HEAD

这对我有用。顺便说一句,Facebook开发变得很痛苦lol。作为开发者的干杯,我想我们会年轻。 &GT;。&LT;

  
    

“2012年1月1日:平台将不再支持FBML。2012年6月1日:FBML应用程序将不再有效。”请在此处阅读更多相关信息:http://developers.facebook.com/docs/reference/fbml/

  

答案 2 :(得分:1)

将facebook目录放入app / plugins目录,并将facebook.php从facebook目录的config文件夹放入app / config文件夹,我相信你的问题会立即得到解决。

由于

答案 3 :(得分:0)

  • 转到:https://developers.facebook.com/apps然后创建新应用。
  • 在“选择您的应用与Facebook集成的方式”部分:勾选网站并输入您的网站网址。
  • 将/plugin/Facebook/config/facebook.php.example复制到app / config / facebook.php,打开facebook.php并修改你的app id和你的秘密。 就是这样。