tractorcow/silverstripe-opengraph

SilverStripe对Facebook Open Graph协议的实现

安装次数: 122,432

依赖项: 4

建议者: 0

安全性: 0

星级: 51

关注者: 9

分支: 18

类型:silverstripe-vendormodule

5.1.0 2023-04-13 20:37 UTC

This package is auto-updated.

Last update: 2024-09-13 23:42:08 UTC


README

本模块提供了Open Graph类型(如http://ogp.me/所记录)的完整实现。

可以通过应用适当的接口将Open Graph对象类型应用于任何页面或数据对象。

例如,如果您的页面代表一张音乐专辑,则应实现IOGMusicAlbum接口。

默认情况下,模块将尝试将页面分类为og:website类型,并自动为其生成适当的元标签。这对于大多数网站与Facebook交互来说是足够的。

致谢及作者

需求

  • 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.ymlmysite/_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的名字来推广或支持从本软件派生出来的产品。

本软件由版权所有者和贡献者提供,"现状"提供,并放弃任何明示或暗示的保证,包括但不限于适销性和特定用途适用性的暗示保证。在任何情况下,本软件的使用引起的任何直接、间接、偶然、特殊、示范性或后果性损害(包括但不限于替代货物或服务的采购;使用、数据或利润的损失;或业务中断),无论基于何种原因和何种责任理论(包括疏忽或其他),均不承担责任,即使被告知了此类损害的可能性。

抱歉

我对这个模块有点疯狂!老式的接口不错吧?