taitava/silverstripe-cmseditlink

在CMS中编辑任何DataObjects的链接生成方式。

安装: 2,285

依赖者: 0

建议者: 0

安全: 0

星标: 2

关注者: 2

分支: 1

开放问题: 1

类型:silverstripe-vendormodule

0.5.1 2019-06-04 07:34 UTC

This package is auto-updated.

Last update: 2024-09-19 21:05:35 UTC


README

在最简单的形式中,此模块通过一个Extension提供了一个->CMSEditLink()方法,可以应用于任何你想要的DataObject类。此方法返回一个CMSEditLink实例,可以转换为表示编辑器页面的URL的字符串,在此页面中可以编辑所需的DataObject

为了增加复杂性,你还可以创建链式链接,将编辑器路由到通过另一个DataObject编辑DataObject,甚至通过多个DataObject

此模块目前处于开发阶段。在发布稳定版本之前需要更多测试。此外,某些方法名称可能仍然会改变。此模块不大,所以我确实认为它可以用于生产项目 - 只是要确保对其进行充分的测试 :)。 注意,目前无法为Member对象创建编辑链接。这是因为Members是通过SecurityAdmin管理的,而SecurityAdmin不是ModelAdmin的子类。此模块目前需要一个ModelAdmin来生成链接。

此外,目前的文档也不是最佳。

要求

  • SilverStripe 4.x

安装

composer require taitava/silverstripe-cmseditlink:*

简单用法

首先,你需要将此扩展模块应用于你想要的所有DataObject类。以下示例配置代码将应用于所有DataObject类。将此放入一个名为app_config\cmseditlink.yml的新文件中

SilverStripe\ORM\DataObject:
  extensions:
    - Taitava\CMSEditLink\DataObjectExtension

现在你可以创建这样的简单链接

$book = Book::get()->byID(1);
$link = $book->CMSEditLink();

返回的链接不是一个字符串,而是一个CMSEditLink实例。然而,很容易将此实例转换为格式化的URL字符串:$link_url = (string) $book->CMSEditLink();$link_url = $book->CMSEditLink()->URL();

或者另一种创建链接的方式

$book = Book::get()->byID(1);
$link = Taitava\CMSEditLink\CMSEditLink::LinkFor($book);

如果你使用的是->CMSEditLink()方法,你需要确保为所有你想要使用此方法的数据对象启用Taitava\CMSEditLink\DataObjectExtension扩展。例如,将以下内容放入你的app/_config/cmseditlink.yml文件中

SilverStripe\ORM\DataObject:
  extensions:
    - Taitava\CMSEditLink\DataObjectExtension

另一方面,你可以使用Taitava\CMSEditLink\CMSEditLink::LinkFor($any_data_object)为任何DataObjects创建链接 - 即使对于没有启用上述扩展的DataObjects也可以。

关于ModelAdmin的说明

DataObjects的唯一要求是在你的项目中必须存在一个定义了DataObject类名称的ModelAdmin类,它位于其$managed_models配置数组中。如果没有此类ModelAdmin,你需要自己创建一个或可以使用上面描述的“链式”功能首先为具有可用ModelAdmin的另一个DataObject类生成链接,然后将链接链到目标对象。这需要两个DataObject类之间的ORM关系(实际上:任何在$has_one$has_many$many_many$belongs_to中定义的关系都适用)。

该模块试图自动找到一个能够管理所需 DataObjectModelAdmin 类。通常它会选择一个合适的类,但在某些情况下,如果有多个 ModelAdmin 类在它们的 $managed_models 配置数组中列出了 DataObject 的类,那么模块会选择它遇到的第一个。如果您愿意,可以通过在您的 DataObject 子类中定义一个 getModelAdminForCMSEditLink() 方法来覆盖 ModelAdmin 的自动选择。

class Book extends DataObject
{
        public function getModelAdminForCMSEditLink()
        {
                return BookAdminWhichHandlesBooksWithSoftGloves::class;
                // Or:
                return BookAdminWhichHandlesBooksWithSoftGloves::create();
        }
}

class BookAdminWhichTearsPagesAndBurnsThemToAshes
{
        $managed_models = [
        	Book::class,
        ];
}

class BookAdminWhichHandlesBooksWithSoftGloves extends ModelAdmin
{
        $managed_models = [
        	Book::class,
        ];
}

链接链和“面包屑”

链接可以无限级联以创建指向实际编辑页面的“面包屑”。例如,如果您有一个 Book 对象,并且您想提供一个表示 Library 对象的 CMS 编辑链接,您可以创建链接如下

$book = Book::get()->byID(1);
$book->CMSEditLink()->via($book->Library(), 'Books');

或者以另一种方式创建相同的链接

$library = Library::get()->byID(1);
$library->CMSEditLink()->hereon($library->Books()->first(), 'Books');

自定义操作

默认情况下,所有创建的链接都将使用 CMS 中的 'edit' 动作。如果您在 CMS 中定义了自定义操作,您可以在链接中使用它们,就像这样

$book = Book::get()->byID(1);
$link = $book->CMSEditLink()->action('customAction');

或者使其更短

$book = Book::get()->byID(1);
$link = $book->CMSEditLink('customAction');

自定义 ->CMSEditLink() 将返回的链接

除了在从 ->CMSEditLink() 收到链接后对其进行修改之外,您还可以在 DataObject 层面上进行一些默认的修改

class Book extends DataObject
{
        private static $has_one = [
                'Library' => Library::class,
        ];

        public function ProvideCMSEditLink($action)
        {
                if ($action == 'edit') $action = 'tagAuthors'; // Switch the default 'edit' action to an author tagging action, or whatever.
                $link = CMSEditLink::LinkFor($this,$action);
                $link->via($this->Library(), 'Books'); // Scaffold the link via the book's holder Library
                return $link; // The alterations made in this function ...
        }
}

class Library extends DataObject
{
        private static $has_many = [
                'Books' => Book::class,
        ];
}

$book = Book::get()->byID(1);
$link = $book->CMSEditLink(); // ... will be in place here.

未来

请查看 GitHub 问题跟踪器以获取任何当前的开发计划和建议。如果您有开发想法、错误报告或任何实现/使用相关的问题,可以创建新问题。

也欢迎提交拉取请求!

作者

Jarkko Linnanvirta。许可:MIT。

还要感谢 PsychoMo 在一个相关的 SilverStripe 论坛主题中帮助我:[https://forum.silverstripe.org/t/modeladmin-how-to-get-a-cms-edit-link-url-for-a-specific-dataobject/1958/5](https://forum.silverstripe.org/t/modeladmin-how-to-get-a-cms-edit-link-url-for-a-specific-dataobject/1958/5)