silverstripers/silverstripe-linkable

为DataObjects管理外部和内部链接提供了一些方便的表单字段和对象。基于sheadawson/silverstripe-linkable的分支。

安装: 449

依赖项: 0

建议者: 0

安全: 0

星级: 0

关注者: 2

分支: 70

类型:silverstripe-vendormodule

1.3.7 2017-05-30 04:40 UTC

README

本模块已不再维护。请查看以下优秀的替代方案

需求

查看1.x分支/releases以获取SilverStripe 3.x支持

维护者

描述

本模块包含了一些方便的FormFields / DataObjects,用于管理DataObjects上的外部和内部链接,包括oEmbed链接。

使用Composer安装

composer require "sheadawson/silverstripe-linkable"

链接 / 链接字段

链接对象可以链接到URL、电子邮件、电话号码、SilverStripe实例中的内部页面或文件。例如,页面这样的DataObject可以拥有多个通过网格字段管理的链接对象,或者通过链接字段管理一个链接对象。

示例用法

class Page extends SiteTree
{
	private static $has_one = [
		'ExampleLink' => 'Link',
	];

	public function getCMSFields()
	{
		$fields = parent::getCMSFields();

		$fields->addFieldToTab('Root.Link', LinkField::create('ExampleLinkID', 'Link to page or file'));

		return $fields;
	}
}

在您的模板中,您可以使用以下方式渲染链接的锚点标签

$ExampleLink

添加自定义类到链接

锚点标签可以通过传递类字符串到模板中的setCSSClass()方法以渲染您选择的类或类。

$ExampleLink.setCSSClass(your-css-class)

自定义链接模板

链接标签使用Link.ss模板渲染。您可以通过将其复制到您的主题或项目文件夹并按要求进行修改来覆盖此模板。

您还可以通过调用renderWith函数并传入自定义模板的名称来指定自定义模板以渲染任何链接。

$ExampleLink.renderWith(Link_button)

最后,您可以选择性地向CMS用户提供选择模板列表的能力,让他们选择如何渲染链接。要启用此功能,创建您自定义的模板文件,并在您的site config.yml文件中注册它们,如下所示。

Sheadawson\Linkable\Models\Link:
  templates:
    button: Description of button template # looks for Link_button.ss template
    iconbutton: Description of iconbutton template # looks for  Link_iconbutton.ss template

限制允许的链接类型

限制每个字段的链接类型。

LinkField::create('ExampleLinkID', 'Link Title')->setAllowedTypes(array('URL','Phone'))

您还可以全局限制链接类型。要限制类型,请按以下方式在您的site config.yml文件中定义它们。

Sheadawson\Linkable\Models\Link:
  allowed_types:
    - URL
    - SiteTree

默认可用的类型有

URL: URL
Email: Email address
Phone: Phone number
File: File on this website
SiteTree: Page on this website

添加自定义链接类型

有时您可能有一些自定义DataObject类型,希望CMS用户能够创建链接。这可以通过向链接DataObject添加DataExtension来实现,以下是一个将Product对象设置为可链接的示例。

class CustomLink extends DataExtension
{
    private static $has_one = [
        'Product' => 'Product',
    ];

    private static $types = [
        'Product' => 'A Product on this site',
    ];

    public function updateCMSFields(FieldList $fields)
    {
		// update the Link Type dropdown to contain your custom Link types
        $fields->dataFieldByName('Type')->setSource($this->owner->config()->types);

		// Add a dropdown field containing your ProductList
		$fields->addFieldToTab(
            'Root.Main',
            DropdownField::create('ProductID', 'Product', Product::get()->map('ID', 'Title')->toArray())
                ->setHasEmptyDefault(true)
                ->displayIf('Type')->isEqualTo('Product')->end()
        );
	}

在您的config.yml中

Sheadawson\Linkable\Models\Link:
  extensions:
    - CustomLink

有关更多自定义示例,请参阅wiki

嵌入式对象/字段

使用嵌入式对象/字段轻松将oEmbed内容添加到DataObject或页面。

示例用法

class Page extends SiteTre
 {
	private static $has_one = [
		'Video' => 'EmbeddedObject',
	];

	public function getCMSFields()
	{
		$fields = parent::getCMSFields();

		$fields->addFieldToTab('Root.Video', EmbeddedObjectField::create('Video', 'Video from oEmbed URL', $this->Video()));

		return $fields;
	}
}
	...

在您的模板中,您可以使用具有has_one关系的对象名称来渲染对象。

$Video

您还可以通过以下方式访问对象的其他元数据

<h1>$Video.Title</h1>
$Video.Description
$Video.ThumbURL

请参阅EmbeddedObject.php以获取在$db中保存的可用属性列表。

自定义查询参数

有时您可能需要在获取LinkEditForm的GET请求中添加自定义查询参数。这在您想要根据特定情况自定义表单时非常有用。自定义查询参数是提供LinkEditForm上下文的一种方式。

要添加自定义参数,您需要添加data-extra-query

$linkField->setAttribute('data-extra-query', '&param1=value1');

您可以使用 updateLinkForm 扩展点,并通过以下代码提取参数值:

$param1 = Controller::curr()->getRequest()->requestVar('param1');

开发

前端使用预处理,需要使用 Yarn