【问题标题】:What would be the simplest way to automatically have the URL segment updated?自动更新 URL 段的最简单方法是什么?
【发布时间】:2023-03-17 07:00:01
【问题描述】:

这个问题是关于更改 Page Title 字段的值时的 URL 更新功能。该行为被编码到 CMSMain.EditForm.js

我正在精简和自定义 CMS,以供绝对基本的计算机用户或粗心的客户使用,他们很可能会在页面名称更改时跳过按 更新 URL 按钮。在这些情况下,如果 URLSegment 会自动更新会非常方便。

问:自动更新 URL 段的最简单方法是什么,IE 模拟在单击“更新 URL”按钮时出现的结果之后更改Title 字段?

【问题讨论】:

    标签: javascript php silverstripe


    【解决方案1】:

    您可以对 SiteTree 进行扩展,并像这样包含 onBeforeWrite 函数。如果他们更新了标题而不是 URL,这将进行更改:

    class AutoURLSync extends Extension {
        public function onBeforeWrite() {
            // If Title is changed, but URLSegment is not, 
            // then update the URLSegment here
            if($this->owner->isChanged('Title',2) && !$this->owner->isChanged('URLSegment',2)) {
                $this->owner->URLSegment = $this->owner->generateURLSegment($this->owner->Title);
            }
        }
    }
    

    删除“如果”意味着它总是被改变。

    将此添加到_config/config.yml 以链接扩展:

    SiteTree:
        extensions:
          - AutoURLSync
    

    【讨论】:

    • 我更改了类名(SiteTreeExtension 似乎已经存在于核心文件中),将 if 语句放在括号中(也尝试删除 if 语句)。我在 Publish 上收到内部错误
    • 什么错误?如果去掉“if”还会报错吗?
    • Call to undefined method Extension::onBeforeWrite() 使用唯一的类名并删除 if 语句(保持 if 语句的内部部分不变)。
    • 如果是“DataExtension”而不是“Extension”呢?
    • 现在我收到了Call to undefined method AutoURLSync::generateURLSegment()。 AutoURLSync 是我使用的类名,而不是 SiteTreeExtension。我想毕竟应该是Extension。我查看了 cms/code/model/SiteTreeExtension.php 并在其中找不到 onBeforeWrite 函数
    猜你喜欢
    • 2013-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-25
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    相关资源
    最近更新 更多