toastnz/linkable

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

安装次数: 11,432

依赖项: 3

建议者: 0

安全: 0

星标: 0

关注者: 1

分支: 69

类型:silverstripe-vendormodule


README

https://github.com/sheadawson/silverstripe-linkable 分支创建

需求

查看1.x分支的发布版以获取SilverStripe 3.x支持

维护者

描述

此模块包含一些方便的FormFields / DataObjects,用于管理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

添加自定义链接类型

有时您可能有一些自定义DataObject类型,希望CMS用户能够创建链接。这可以通过向Link 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