sheadawson/silverstripe-linkable

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

安装: 301 522

依赖者: 35

建议者: 0

安全: 0

星标: 40

关注者: 7

分支: 70

类型:silverstripe-vendormodule


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以获取更多自定义示例。

嵌入对象/字段

使用EmbeddedObject/Field轻松将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