lucasff/cakephp-facebook-plugin

CakePHP Facebook 插件

安装: 15

依赖: 0

建议者: 0

安全: 0

星标: 0

关注者: 1

分支: 138

类型:cakephp-plugin

v3.1.2 2013-10-04 03:49 UTC

This package is auto-updated.

Last update: 2024-09-06 08:21:49 UTC


README

Facebook 插件旨在提供一个无缝的方式将您的 CakePHP 应用连接到最受欢迎的社会化网站——Facebook。这个插件的目标不仅是提供非常实用的动态功能,而且还提供完整的 Facebook API 接口。

变更日志

  • 1.0 初始 alpha 版本
  • 1.1 添加了 API 功能
  • 1.2 初始 beta 版本
  • 1.2.1 小型错误修复和测试
  • 1.3 添加 FacebookInfo 类,以便在插件详细信息中的任何位置进行轻松引用。
  • 1.4.0 添加 FacebookApi 库。可用于从任何地方访问 FacebookApi。
  • 1.5.0 添加了 Facebook 权限提示
  • 1.5.1 Facebook Connect 可以接受类似于 cake 1.3 核心组件的设置
  • 1.5.2 添加了 Facebook.Connect 用户方法,类似于 Auth 来检索用户数据。
  • 1.5.3 在 helper 中添加 Facebook status() 函数。
  • 1.5.4: 修复了 Facebook.Connect 中的错误,如果会话状态不稳定,将会出现空白屏幕。
  • 1.5.5: 仅在初始化时修复 helper 使用,不再依赖于 Connect 组件。
  • 1.6: 如果存在用户表但没有找到 facebook_id,Facebook.Connect 将更新用户表。
  • 1.6.1: Facebook::share 现在如果未传递 URL,将正确设置起始 URL。
  • 1.7.0: 更新到最新版本的官方 Facebook PHP SDK,使一切更加面向未来(Theaxiom / https://www.kinspir.com
  • 1.7.1: 修复了 1.7.0 更新中的损坏测试。
  • 2.0.0: 功能更新
    • FacebookHelper::loader() 现在不再需要,已被弃用
    • 如果检测到身份验证且没有找到已登录的 facebook_id,则将创建用户
    • FacebookHelper::logout 重定向选项现在允许基于数组 cakephp URL
    • 新功能
      • FacebookHelper::like() 使用各种选项创建喜欢按钮
      • FacebookHelper::activity() 使用各种选项创建活动流
      • FacebookHelper::friendpile() 使用各种选项创建好友堆叠小部件
      • FacebookHelper::recommendations() 使用各种选项创建推荐小部件
  • 2.0.1: 新设置 ConnectComponent::createUser 布尔值。如果设置为 true(默认),在成功的 Facebook 登录后且未在用户表中找到 facebook_id,组件将尝试从 Auth 组件的反思中创建新用户。通过在设置 Connect 组件时传递 'createUser' => false 来关闭此功能。
  • 2.0.2: 新增 helper 方法 getConfig() 可在 FacebookInfo 库中使用。使用此方法代替依赖其他来源加载的配置文件。
  • 2.0.3: 更新 Facebook::share,允许使用 fbxml 选项而不是默认不使用 fbxml。如果页面加载了 facebook->init();,则 fbxml => true 是必需的。
  • 2.1.0: 提高性能和新 Facebook::disconnect 函数。
  • 2.1.1: 修复了一些小错误。
  • 2.2.0: 更新 Facebook PHP SDK
  • 2.3.0: 添加了新的 Facebook::likebox 来替换 Facebook::fanbox()
  • 2.3.1: 安全更新:现在 Facebook 用户创建将生成随机密码。
  • 2.4.0: 添加了三个身份验证回调:beforeFacebookSave、beforeFacebookLogin 和 afterFacebookLogin
  • 2.4.1: 为插件添加了自定义区域设置。
  • 2.4.2: 修复了一些小错误。
  • 2.4.3: 修复了当 User primaryKey 不是 'id' 时重复的用户条目问题。
  • 2.5.0: 优化和微调(特别感谢 https://github.com/bar
    • 为 FacebookHelper::init() 新增回调功能(页面刷新仍然是默认设置)。
    • FacebookHelper::share() 更好,现在使用 Router 而不是环境和 $this->here
    • 优化,将 __syncFacebookUser 移动到 Controller->beforeFilter() 之后,以便在需要时可以在 beforeFilter 中更改 $noAuth。
  • 3.0.0: 升级到 Facebook PHP SDK v 3.1.1
  • 3.0.1: 添加 CakePHP 2.0 支持
    • 2.0 版本的 AuthComponent 已大幅重设计,使得 FacebookPlugin 所做的猜测工作变得很难实现

    • 因此,如果您想通过数据库实现用户/身份验证集成,必须设置 Facebook 插件要交互的模型

    • 您必须在定义 Facebook.Connect 组件时设置此设置

    • 如果您未设置 'model' 键,则您的 Auth Model 与集成不会自动发生。

        //Example AppController setup
        public $components = array('Session',
        	'Auth' => array(
        		'authenticate' => array(
        			'Form' => array(
        				'fields' => array('username' => 'email')
        			)
        		),
        		'authorize' => 'Controller'
        	),
        	'Facebook.Connect' => array('model' => 'User')
        );
      
  • 3.1.0: 添加了新的 Facebook 社交功能(注册和发送)
    • FacebookHelper::registration() 创建一个预先填充其 Facebook 信息的注册表单。
    • ConnectComponent::registrationData() 是解析成功注册帖子到 Facebook 的有用快捷方式。
    • FacebookHelper::sendbutton() 创建一个漂亮的发送按钮。
  • 3.1.1: 将 Facebook PHP SDK 更新到最新版本。
  • 3.1.2: 将 Facebook PHP SDK 更新到最新版本 v3.2.1。
  • 3.1.3: 将 Facebook PHP SDK 更新到最新版本 v3.2.3。

关于插件

功能列表

  • 通过 Facebook 实现全面的认证功能。Facebook 认证将与或没有用户登录系统一起工作。与 AuthComponent 建立的现有用户认证无缝工作 - 或者它可以作为您的主要认证系统。
  • 以极大的便捷创建动态可定制的 Facebook 内容。
    • 分享(让您的用户分享他们在您网站上找到的内容)
    • 喜欢(让您的用户喜欢他们在您网站上找到的内容)
    • 发送(让您的用户发送他们在您网站上找到的内容)
    • 登录/登出(Facebook 用户可以单点登录和登出,无需注册)
    • 注册(Facebook 用户可以使用其个人资料中的预先填充数据在您的应用程序中注册)
    • 活动(允许用户显示您的应用程序和朋友的动态)
    • 朋友堆(显示您应用程序的朋友)
    • 推荐(根据当前页面显示推荐的 URL)
    • 粉丝盒子(允许用户成为您应用程序的粉丝)
    • 个人照片(显示登录用户的个人照片)
    • 实时流(通过 Facebook 创建动态实时活动并通过您的网站提供访问权限)
    • 评论(通过允许用户使用 Facebook 评论在您的网站的任何部分进行评论来与您的用户建立联系)
    • 状态(显示用户的状态)
  • 在任何地方访问完整的 Facebook API。使用内置的完全访问 Facebook API 来构建自定义内容

安装和设置

  • 首先将仓库克隆到您的 app/Plugin/Facebook 目录

      git clone git://github.com/webtechnick/CakePHP-Facebook-Plugin.git app/Plugin/Facebook
    
  • 在您的 app/Config/bootstrap.php 文件中加载插件

      //app/Config/bootstrap.php
      CakePlugin::load('Facebook');
    

安装完成后,如果您想使用除分享按钮之外的其他功能,您需要获取您的应用程序的 api_key 和 secret。

  • 在此 URL 上创建一个 Facebook 应用程序: https://#/developers/createapp.php

  • 一旦生成api_key和密钥,您需要创建一个文件app/Config/facebook.php。您可以在/Facebook/Config/facebook.php.example中找到所需的示例及其布局。

      //app/Config/facebook.php
      $config = array(
      	'Facebook' => array(
      		'appId'  => 'YOUR_APP_ID',
      		'apiKey' => 'YOUR_API_KEY',
      		'secret' => 'YOUR_SECRET',
      		'cookie' => true,
      		'locale' => 'en_US',
      	)
      );
    

使用方法

您可以根据需要使用所有或部分Facebook插件。至少,您可能需要使用Facebook Helper。

public $helpers = array('Facebook.Facebook');

如果您只想使用Facebook插件的分享功能,那么您已经完成了。

$this->Facebook->share('http://www.example.com/url_to_share'); //(default is the current page).

对于Facebook分享功能,不需要其他任何东西。然而,要使用更高级的功能,您需要稍微准备一下页面来处理fbxml标签。

编辑布局以利用高级 Facebook功能

  1. 在您的布局中,强烈建议您将<html>标签替换为<?php echo $this->Facebook->html(); ?>这对于某些Facebook功能在IE中工作是必需的。
  2. 在页面底部包含<?php echo $this->Facebook->init(); ?>以加载Facebook JavaScript API,扫描您的页面以查找fbxml并将其替换为各种动态内容。

示例布局

<?php echo $this->Facebook->html(); ?>
	<head>
		<title><?php echo $title_for_layout ?></title>
	</head>
	<body>
		<?php echo $content_for_layout; ?>
	</body>
	<?php echo $this->Facebook->init(); ?>
</html>

身份验证(Facebook Connect/Graph系统)

尽管名为Facebook Connect组件,但它立即利用了新的强大Facebook Graph API http://developers.facebook.com/docs/api

要使用此功能,您首先需要更新您的Facebook应用程序,包括应用程序URL的connect URL。这可以在Facebook应用程序设置中完成。https://#/developers/apps.php现在,您只需要将Facebook.Connect组件添加到您的app_controller中。

public $components = array('Facebook.Connect');

就是这样。现在您可以接受Facebook身份验证了。

登录/注销按钮

创建登录按钮:Facebook->login() ?>

创建请求扩展权限的登录按钮(http://developers.facebook.com/docs/authentication/permissions

<?php echo $this->Facebook->login(array('perms' => 'email,publish_stream')); ?>

创建注销按钮

<?php echo $this->Facebook->logout() ?>

每个按钮都有多个选项,请查看API以查看所有可用选项 http://projects.webtechnick.com/docs/facebook/default/FacebookHelper.html

注册表单

创建具有默认字段和宽度的注册表单。默认情况下,将内容发布到自身。

<?php echo $this->Facebook->registration(); ?>

创建自定义注册表单。

<?php echo $this->Facebook->registration(array(
	'fields' => 'name,gender,location,email',
	'width' => 600,
	'redirect-uri' => 'http://www.example.com/process_facebook_registration'
)); ?>

处理注册数据。

要访问由您的注册用户发布的注册数据,请使用方便的ConnectComponent::registrationData()函数。

if($user = $this->Connect->registrationData()){
	print_r($user);
}

使用$user中的数据来完成您的注册过程(保存新用户,查找/更新用户等)。

CakePHP身份验证 + Facebook.Connect

Facebook.Connect将与各种身份验证系统很好地协同工作。它与CakePHP AuthComponent具有几乎无缝的集成。

注意 由于CakePHP 2.0 AuthComponent的重大更新,ConnectComponent不再有 introspection 功能。为了让自动功能正常工作,您需要告诉Connect您存储用户数据模型的位置,如下所示:

//Example AppController.php components settup with FacebookConnect
public $components = array('Session',
			'Auth' => array(
				'authenticate' => array(
					'Form' => array(
						'fields' => array('username' => 'email')
					)
				),
				'authorize' => 'Controller'
			),
			'Facebook.Connect' => array('model' => 'User')
		);

要与CakePHP Auth集成,您需要修改您的用户表(或Auth组件使用的任何表)并添加一个新的字段 -> facebook_id

ALTER TABLE `users` ADD `facebook_id` BIGINT(20) UNSIGNED NOT NULL

由于您已经有了一个身份验证系统,注销步骤也需要从您的身份验证系统中注销用户。您可以通过将重定向传递到$facebook->logout()来实现这一点,到您的系统的注销身份验证操作。

在这种情况下,如果您想显示注销按钮,应设置标签或img选项。

<?php echo $this->Facebook->logout(array('label' => 'Logout', 'redirect' => array('controller' => 'users', 'action' => 'logout'))); ?>

或者

<?php echo $this->Facebook->logout(array('redirect' => array('controller' => 'users', 'action' => 'logout'), 'img' => '/Facebook/img/facebook-logout.png')); ?>

这将退出Facebook认证,然后重定向到您的认证注销页面,以便您完成注销。

Facebook认证回调

有三种可用的回调函数,每个都在控制器中定义,并且使用它们是可选的。

  • beforeFacebookSave 处理用户保存到用户表中。如果返回false,创建将中断。

      //Add an email field to be saved along with creation.
      function beforeFacebookSave(){
      	$this->Connect->authUser['User']['email'] = $this->Connect->user('email');
      	return true; //Must return true or will not save.
      }
    
  • beforeFacebookLogin 处理在用户登录认证之前。

      function beforeFacebookLogin($user){
      	//Logic to happen before a facebook login
      }
    
  • afterFacebookLogin 在认证登录成功后处理所需的任何功能。

      function afterFacebookLogin(){
      	//Logic to happen after successful facebook login.
      	$this->redirect('/custom_facebook_redirect');
      }
    

高级辅助功能示例

<?php echo $this->Facebook->comments(); ?>
<?php echo $this->Facebook->picture($facebook_id); ?>
<?php echo $this->Facebook->recommendations(); ?>
<?php echo $this->Facebook->like(); ?>
<?php echo $this->Facebook->livestream(); ?>
<?php echo $this->Facebook->activity(); ?>
<?php echo $this->Facebook->friendpile(); ?>

Facebook API

您可以从应用程序的任何位置访问Facebook API。您首先需要包含API。

App::uses('FB', 'Facebook.Lib');

然后您可以实例化它,或者如果您正在运行PHP 5.3.x,您可以对其进行静态调用。

PHP版本 5.2.x

	$Facebook = new FB();
	$Facebook->api('/me');

PHP 5.3.x

	FB::api('/me');

国际化

您可以通过辅助声明或通过config/facebook.php配置文件(见文档顶部)设置插件的区域设置。

public $helpers = array('Facebook.Facebook' => array('locale' => 'en_US'));

Facebook区域设置:http://developers.facebook.com/docs/internationalization/

阅读文档

我鼓励您阅读此插件的文档和API,以查看每个功能的全部功能和选项。API在此:http://projects.webtechnick.com/docs/facebook/