dynamic/silverstripe-linkable

一些方便的表单字段和对象,用于在DataObjects上管理外部和内部链接

安装次数: 51,677

依赖项: 6

建议者: 0

安全性: 0

星标: 1

关注者: 6

分支: 9

类型:silverstripe-vendormodule

1.1.0 2022-09-06 16:49 UTC

README

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

需求

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

维护者

描述

此模块包含一些方便的表单字段/数据对象,用于在DataObjects上管理外部和内部链接,包括oEmbed链接。

使用Composer安装

composer require "sheadawson/silverstripe-linkable"

链接/链接字段

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

示例用法

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

添加自定义链接类型

有时您可能有一些自定义数据对象类型,您希望CMS用户能够创建链接。这可以通过向链接数据对象添加数据扩展来实现,以下示例展示了如何使产品对象可链接。

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内容添加到数据对象或页面中。

示例用法

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