webtechnick/cakephp-facebook-plugin

CakePHP Facebook 插件

安装次数: 11,972

依赖者: 0

建议者: 0

安全: 0

星标: 445

关注者: 50

分支: 138

公开问题: 66

类型:cakephp-plugin

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

This package is not auto-updated.

Last update: 2024-09-23 16:11:32 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 添加 Facebook status() 函数到助手。
  • 1.5.4: 修复了 Facebook.Connect 的一个错误,如果会话状态不稳定,会出现白屏。
  • 1.5.5: 仅在初始化时修复了助手使用错误。以前依赖于 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() 创建具有各种选项的 friendpile 小部件
      • FacebookHelper::recommendations() 创建具有各种选项的推荐小部件
  • 2.0.1: 新设置 ConnectComponent::createUser 布尔值。如果设置为 true(默认值),在成功的 Facebook 登录时,如果用户表中没有找到 facebook_id,组件将尝试从 Auth 组件的 introspection 创建新用户。通过在设置 Connect 组件时传递 'createUser' => false 来关闭此功能。
  • 2.0.2: 新助手方法 getConfig() 可在 FacebookInfo 库中使用。使用此方法获取 Facebook 配置,而不是依赖于其他来源加载的配置文件。
  • 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访问权限直接从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。

  • 在此网址创建一个Facebook应用程序:[https://#/developers/createapp.php](https://#/developers/createapp.php "https://#/developers/createapp.php")

  • 一旦生成api_key和secret,您需要创建一个名为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(); ?> 这对于一些在IE中工作的Facebook功能是必需的。
  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](http://developers.facebook.com/docs/api "http://developers.facebook.com/docs/api")

要使用此功能,您首先需要更新您的Facebook应用程序,使用应用程序的连接URL。这是在Facebook应用程序设置中完成的。[https://#/developers/apps.php](https://#/developers/apps.php "https://#/developers/apps.php") 现在,您只需要将Facebook.Connect组件添加到您的app_controller中。

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

就这样。现在,您已准备好接受Facebook身份验证。

登录/注销按钮

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

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

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

创建一个注销按钮

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

每个按钮都有多个选项,请查看API以查看所有可用选项。[http://docs.webtechnick.com/facebook/classes/FacebookHelper.html](http://docs.webtechnick.com/facebook/classes/FacebookHelper.html "http://docs.webtechnick.com/facebook/classes/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 Auth + Facebook.Connect

Facebook.Connect将与各种认证系统很好地配合。它与CakePHP AuthComponent的集成几乎无缝。

注意 由于CakePHP 2.0 AuthComponent的重新设计,ConnectComponent不再具有可用的内省功能。要使自动功能正常工作,需要告诉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在用户登录到Auth之前进行处理。

      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://docs.webtechnick.com/facebook/