zirak / linkable-dataobjects
此模块添加了在TinyMCE中链接DataObjects的功能
1.2
2018-03-13 10:25 UTC
Requires
- silverstripe/cms: ~3.1
- silverstripe/framework: ~3.1
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。
建议模块
- 可搜索的DataObjects: http://addons.silverstripe.org/add-ons/zirak/searchable-dataobjects