自动更新URL段的最简单方法是什么?

6
这个问题涉及更改页面标题字段值时的URL更新功能。这个行为被编码到CMSMain.EditForm.js中。

enter image description here

我正在简化和定制CMS,使其可被绝对基础的计算机用户或疏忽的客户使用,这些客户很可能会在更改页面名称时跳过按下“更新URL”按钮。在这些情况下,如果URLSegment可以自动更新,那将非常方便。
问题:最简单的自动更新URL段的方法是什么?即,在更改Title字段后,“模拟结果”出现的方式,就像点击“更新URL”按钮后一样。
1个回答

7

您可以创建一个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);
        }
    }
}

将“if”移除意味着它总是会改变。

_config/config.yml中添加以下内容以连接该扩展:

SiteTree:
    extensions:
      - AutoURLSync

我更改了类名(SiteTreeExtension 在核心文件中似乎已经存在),将 if 语句放在括号中(也尝试过删除 if 语句)。在 发布 时出现内部错误。 - Semicolon
错误是什么?如果去掉“if”,还有错误吗? - Barry
如果是“DataExtension”而不是“Extension”,怎么办? - Barry
现在我得到了“Call to undefined method AutoURLSync::generateURLSegment()”的错误。AutoURLSync是我用来替代SiteTreeExtension的类名。我认为它应该是“Extension”。我查看了cms/code/model/SiteTreeExtension.php文件,但在其中找不到“onBeforeWrite”函数。 - Semicolon
太好了 :) 现在我怎么把那个留在那里了?在发布之前我必须更多地测试它们... - Barry
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接