tractorcow / silverstripe-opengraph
SilverStripe对Facebook Open Graph协议的实现
Requires
- silverstripe/recipe-core: ^1 || ^4 || ^5
Requires (Dev)
- silverstripe/recipe-cms: ^1 || ^4 || ^5
- silverstripe/recipe-testing: ^3
README
本模块提供了Open Graph类型(如http://ogp.me/所记录)的完整实现。
可以通过应用适当的接口将Open Graph对象类型应用于任何页面或数据对象。
例如,如果您的页面代表一张音乐专辑,则应实现IOGMusicAlbum接口。
默认情况下,模块将尝试将页面分类为og:website类型,并自动为其生成适当的元标签。这对于大多数网站与Facebook交互来说是足够的。
致谢及作者
- Damian Mooyman - https://github.com/tractorcow/silverstripe-opengraph
需求
- SilverStripe 4+
- PHP 5.6+
安装说明
- 使用composer进行安装
composer require "tractorcow/silverstripe-opengraph" "4@dev"
- 确保在模板中定义了命名空间,使用
<html $OGNS>
- 如果您需要向
<head />
标签添加前缀属性,则应在模板中直接进行此操作。 - 如果您正在处理视频文件,则可能需要安装https://github.com/tractorcow/silverstripe-mediadata以提取视频尺寸用于Open Graph标签。
配置
此模块的主要配置选项可在OpenGraph.yml中找到。
在您的自己的mysite/_config/OpenGraph.yml
或mysite/_config.php
中覆盖这些设置
--- Name: myopengraphsettings After: '#opengraphsettings' --- TractorCow\OpenGraph\OpenGraph: application_id: 'SiteConfig' admin_id: 'SiteConfig' default_locale: 'en_US' default_tagbuilder: 'TractorCow\OpenGraph\ObjectBuilders\OpenGraphBuilder'
- 将application_id设置为
SiteConfig
(在CMS中设置)或一个字面量的facebook应用ID - 将admin_id设置为
SiteConfig
(在CMS中设置)或一个字面量的facebook admin_id - 默认_locale是作为区域设置标签使用的字面量值(如果i18n没有设置区域设置)
- 默认_tagbuilder是要使用的用于生成标签的类的名称(除非类型已明确指定)。有关详细信息,请参阅下文[添加新类型][#adding-new-types]。
任何值都可以设置为空字符串以完全禁用它。例如。
--- Name: myopengraphsettings After: '#opengraphsettings' --- TractorCow\OpenGraph\OpenGraph: application_id: '' admin_id: ''
如何操作
实现Open Graph对象属性
要获取关于每个字段的具体信息,可以查看src/Interfaces/ObjectTypes文件夹中每种实现的各个部分,或在_config/OpenGraphTypes.yml文件中查看类型及其对应的接口列表。
基本的Open Graph对象有一组必需属性(由TractorCow\OpenGraph\Interfaces\ObjectTypes\IOGObjectRequired
定义)和一组可选属性(由TractorCow\OpenGraph\Interfaces\ObjectTypes\IOGObjectExplicit
定义)。
由于大多数字段值都由页面扩展类OpenGraphPageExtension自动生成,因此不需要显式实现这些属性。然而,它们应该用作指定什么可以指定的指南。
例如,如果您想覆盖getOGImage属性(og:image元标签),则应在您的页面类中实现以下内容
class MyPage extends Page { function getOGImage() { return $this->Thumbnail(); } }
通过在页面类中显式实现这些属性,您可以覆盖OpenGraphPageExtension中定义的默认属性。
设置Open Graph默认图像
Open Graph图像是必需的属性,应提供默认图像。您可以在yml配置中设置默认图像的路径。
TractorCow\OpenGraph\Extensions\OpenGraphObjectExtension: default_image: 'app/images/logo.png' theme_name_default_image: 'app/images/theme-logo.png'
请注意,您可以通过在默认_image配置名称前加上主题名称来为每个主题指定不同的图像(用_替换所有非字母字符)。如果您想在子站上设置不同的默认图像,这非常有用。
添加新类型
如果您想添加新的og:type,您需要做以下操作:
- 创建一个扩展IOGObject的接口,该接口定义了您的对象将发布的字段(如果有的话)
- 扩展OpenGraphBuilder类,并覆盖BuildTags函数以生成接口中的实际HTML标签
- 在新的类型页面上实现您的接口
- 使用以下代码注册您的对象类型
TractorCow\OpenGraph\OpenGraph::register_type('type-name', IOGMyObjectInterface, MyObjectTagBuilder);
或者更好,直接在下面的yaml中这样做
TractorCow\OpenGraph\OpenGraph: types: 'type-name': interface: IOGMyObjectInterface tagbuilder: MyObjectTagBuilder
创建自定义标签构建器
为了将Open Graph元标签添加到您的页面,您需要编写描述如何将对象转换为HTML片段的代码。这可以通过使用PHP中的TagBuilder
对象来实现。
请注意,每个请求都有两个对象;正在查看的实体(页面或DataObject)和应用程序(SiteConfig)。它们各自有自己的标签集。
例如:
class MyObjectTagBuilder extends OpenGraphBuilder { public function BuildTags(&$tags, $object, $config) { parent::BuildTags($tags, $object, $config); $this->appendTag($tags, 'appnamespace:nameofthetag', $object->getOGNameOfTheTag()); } }
我们的接口可能看起来像这样:
interface IOGMyObjectInterface extends IOGObject { function getOGNameOfTheTag(); }
将标签添加到默认类型
如果您需要向所有对象类型添加额外的标签,则可以装饰OpenGraphBuilder对象而不是扩展它。
下面的示例显示了如何将来自Page和SiteConfig的额外字段添加到OpenGraph标签集中。
TractorCow\OpenGraph\ObjectBuilders\OpenGraphBuilder::add_extension('OpenGraphBuilderExtension'); class OpengraphBuilderExtension extends Extension { function updateApplicationMetaTags(&$tags, $siteconfig) { $this->owner->AppendTag($tags, 'og:application-name', $siteconfig->Title); } function updateDefaultMetaTags(&$tags, $page) { $this->owner->AppendTag($tags, 'og:page-menu-name', $page->MenuTitle); } }
禁用单个页面(或页面类型)的Open Graph
如果您需要禁用任何页面的Open Graph,则getOGType()的null值将禁用标签生成。
NonOGPage extends Page { function getOGType() { return null; } }
使用DataObjects作为页面
有关如何使用TractorCow\OpenGraph\Extensions\OpenGraphObjectExtension
扩展您的DataObject
的说明,请参阅https://github.com/tractorcow/silverstripe-opengraph/wiki/Using-DataObjects-as-Pages。
- 将
TractorCow\OpenGraph\Extensions\OpenGraphObjectExtension
扩展添加到您的对象中 - 在您的对象上实现
AbsoluteLink
- 在您的对象上实现
MetaTags
,确保调用$this->extend('MetaTags', $tags);
- 确保正在查看的实际页面类型将元标签生成委托给您的dataobject
需要更多帮助吗?
给我发消息或发邮件至damian.mooyman@gmail.com,或者,好吧,看看代码!
许可协议
版权(c)2013,Damian Mooyman。保留所有权利。
保留所有权利。
在满足以下条件的情况下,允许重新分发和使用源代码和二进制形式,无论是否修改:
- 源代码的重新分发必须保留上述版权声明、本条件列表和以下免责声明。
- 二进制形式的重新分发必须在文档和/或其他与分发提供的材料中复制上述版权声明、本条件列表和以下免责声明。
- 未经具体事先书面许可,不得使用Damian Mooyman的名字来推广或支持从本软件派生出来的产品。
本软件由版权所有者和贡献者提供,"现状"提供,并放弃任何明示或暗示的保证,包括但不限于适销性和特定用途适用性的暗示保证。在任何情况下,本软件的使用引起的任何直接、间接、偶然、特殊、示范性或后果性损害(包括但不限于替代货物或服务的采购;使用、数据或利润的损失;或业务中断),无论基于何种原因和何种责任理论(包括疏忽或其他),均不承担责任,即使被告知了此类损害的可能性。
抱歉
我对这个模块有点疯狂!老式的接口不错吧?