zirak/linkable-dataobjects

此模块添加了在TinyMCE中链接DataObjects的功能

安装: 70

依赖者: 0

建议者: 0

安全性: 0

星标: 7

关注者: 3

分支: 9

开放问题: 1

语言:JavaScript

类型:silverstripe-module

1.2 2018-03-13 10:25 UTC

This package is not auto-updated.

Last update: 2024-09-14 16:00:12 UTC


README

Linkable DataObjects是一个模块,允许从TinyMCE中链接DataObjects。

介绍

页面并不总是实现事物的最佳方式。例如,网站新闻可能会迅速增长,第一个副作用就是一个庞大且难以管理的网站树。DataObjects有助于保持事物的整洁和直接,但遗憾的是,它们不包括在前端搜索中。此模块允许您在搜索中插入DataObject。

此模块通过TinyMCE添加了链接DataObjects的能力,就像内部页面一样。可链接的DataObjects显然需要实现Link()函数。

需求

  • SilverStripe >=3.1 <4.0

安装

通过 composer 安装此模块

composer require zirak/linkable-dataobjects
composer update

使DataObject实现Linkable接口(您需要实现Link()、LinkLabel()、link_shortcode_handler())

class DoNews extends DataObject implements Linkable {

	private static $db = array(
			'Title' => 'Varchar',
			'Subtitle' => 'Varchar',
			'News' => 'HTMLText',
			'Date' => 'Date',
	);
	private static $has_one = array(
			'Page' => 'PghNews'
	);

	/**
	* Link to this DO
	* @return string
	*/
 public function Link() {
	 return $this->Page()->Link() . 'read/' . $this->ID;
 }

 /**
	* Label displayed in "Insert link" menu
	* @return string
	*/
 public static function LinkLabel() {
	 return 'News';
 }

 /**
	* Replace a "[{$class}_link,id=n]" shortcode with a link to the page with the corresponding ID.
	* @param array  $arguments Arguments to the shortcode
	* @param string $content   Content of the returned link (optional)
	* @param object $parser    Specify a parser to parse the content (see {@link ShortCodeParser})
	* @return string anchor Link to the DO page
	*
	* @return string
	*/
 static public function link_shortcode_handler($arguments, $content = null, $parser = null) {
	 if (!isset($arguments['id']) || !is_numeric($arguments['id'])) {
		 return;
	 }

	 $id =  $arguments['id'];
	 $do = DataObject::get_one(__CLASS__, "ID=$id");

	 if (!$do) {
		 $do = DataObject::get_one('ErrorPage', '"ErrorCode" = \'404\'');
		 return $do->Link();
	 }

	 if ($content) {
		 return sprintf('<a href="%s">%s</a>', $do->Link(), $parser->parse($content));
	 } else {
		 return $do->Link();
	 }
 }
}

这里是一个示例页面持有者,用于在DataObject中实现Link()函数

class PghNews extends Page {

	private static $has_many = array(
			'News' => 'DoNews'
	);

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

		/* News */
		$gridFieldConfig = GridFieldConfig_RelationEditor::create(100);
		// Remove unlink
		$gridFieldConfig->removeComponentsByType('GridFieldDeleteAction');
		// Add delete
		$gridFieldConfig->addComponents(new GridFieldDeleteAction());
		// Remove autocompleter
		$gridFieldConfig->removeComponentsByType('GridFieldAddExistingAutocompleter');
		$field = new GridField(
						'Faq', 'Faq', $this->News(), $gridFieldConfig
		);
		$fields->addFieldToTab('Root.News', $field);


		return $fields;
	}
}

class PghNews_Controller extends Page_Controller {

	private static $allowed_actions = array(
			'read'
	);

	public function read(SS_HTTPRequest $request) {
		$arguments = $request->allParams();
		$id = $arguments['ID'];

		// Identifico la faq dall'ID
		$Object = DataObject::get_by_id('DoNews', $id);

		if ($Object) {
			//Popolo l'array con il DataObject da visualizzare
			$Data = array($Object->class => $Object);
			$this->data()->Title = $Object->Title;

			$themedir = $_SERVER['DOCUMENT_ROOT'] . '/' . SSViewer::get_theme_folder() . '/templates/';
			$retVal = $this->Customise($Data);
			return $retVal;
		} else {
			//Not found
			return $this->httpError(404, 'Not found');
		}
	}
}

在您的_config.php中注册您的短代码处理程序

:::php
ShortcodeParser::get('default')->register('yournamespace_yourclass_link', array('YourNamespace\YourClass', 'link_shortcode_handler'));

刷新您的缓存并开始链接您的DataObjects。

建议模块