omz13 / kirby3-suncyclepages
kirby3 插件,用于封存页面直到日出日期,并在日落日期撤回
Requires
- php: >=7.1
- getkirby/composer-installer: ^1.1
Requires (Dev)
- getkirby/cms: ^3.0.1
- jakub-onderka/php-parallel-lint: ^1.0
- localheinz/composer-normalize: ^0.8.0
- omz13/omz13-coding-standard: ^0.2.0
- phpcompatibility/php-compatibility: ^8.2
- phpmd/phpmd: ^2.6
- phpstan/phpstan: ^0.10.3
- phpstan/phpstan-strict-rules: ^0.10.1
- roave/security-advisories: dev-master
This package is auto-updated.
Last update: 2022-12-19 01:00:21 UTC
README
要求: Kirby 3.0
咖啡,啤酒等。
此插件免费,但如果您将其用于商业项目以表示支持,欢迎
为什么叫它 suncycle?
或许,从后见之明来看,可能还有更好的名字,例如“封存”、“自动发布”、“计划”等。然而,当开发此插件时,理念是遵循页面的生命周期:日出和日落是 SDLC 或 ILM 中的常用术语(尽管在这个领域之外并不那么熟悉),因此使用了“suncycle”。我的思维方式是软件模式而不是发布或新闻模式;也可以争论,除非你熟悉发布和新闻,否则“封存”和“计划”等术语在那个领域之外也很不寻常。
文档
目的
对于 kirby3 网站,此插件 omz13/suncyclepages 允许更精细地控制页面生命周期,使页面在“日出日期”时成为“普遍可用”,并在“日落日期”时被“撤回”。这增强了 kirby3 的 state
(未发布、草稿和已发布)提供的有限生命周期选项,以更好地满足某些编辑或监管需求,例如,未发布、草稿、封存(等待“日出”)、发布(“阳光明媚”)和最终撤回(“日落”)。
您何时会使用此插件?
- 主要用例是撰写您希望在将来发布的博客文章。现在写,并安排它们在未来出现(日出)。非常适合您离开但想继续出版计划的时候。
- 另一个用例是用于临时优惠或通知。您发布一个页面,但将来您想将其删除(日落),或者更好的是,想将其删除并替换(重定向)到另一个表示“太晚了”(或类似内容)的位置。
功能规范
- 只有状态为“已发布”的页面受到影响,即那些状态为“草稿”或“未发布”的页面表现如常。
- 页面可以封存直到在指定日期(“日出”)普遍可用。在此日期之前尝试查看页面将返回标准错误页面和
404
[未找到] 代码。 - 页面可以在特定日期(“日落”)撤回。在此日期之后尝试查看页面将返回
410
[已消失] 和标准错误页面,或根据每个页面将301
[永久移动] 到指定位置。 - 可以启用调试模式以在响应中包含一个标题,指示页面正在封存或已日落,参看
X-SUNCYCLE
。
路线图
计划功能和实现说明的非约束性列表是
- MVP
- 基本调试
- 如果没有指定时间(只有日期),则默认合理。
- 更好的调试
- 蓝图
安装
根据您的认识论模型选择以下之一
composer require omz13/kirby3-suncyclepages
;插件将自动出现在site/plugins
中。- 下载最新版本的zip文件 - master.zip - 并将其内容复制到您的
site/plugins/kirby3-suncyclepages
。 git submodule add https://github.com/omz13/kirby3-suncyclepages.git site/plugins/kirby3-suncyclepages
.
配置
可以使用以下机制来修改插件的行为。
通过config.php
-
omz13.suncyclepages.disable
- 可选 - 默认false
- 一个布尔值,如果为true
,则禁用插件。 -
omz13.suncyclepages.embargoCheckWhenTemplateIs
- 可选 - 默认[ 'article' ]
:如果页面使用在此选项中指定的模板名称,则明确执行禁令检查(日出)。 -
omz13.suncyclepages.embargoCheckWhenParentIs
- 可选 - 默认[ 'blog' ]
:如果页面有在此参数中指定的父级,则明确执行禁令检查(日出)。
使用
内容字段
插件使用以下内容字段。这些都是可选的;如果缺失或为空,则假定它们不适用,即通过其指示的功能。
-
date
- 日期 - 可选 - 页面要发布的日期,即禁令直至此日期。如果日期字段缺失或无法解析,则禁令检查不会禁令页面,即默认安全措施是不禁令而是发布。 -
skipembargo
- 布尔值 - 可选(默认false
)- 如果为true
,则跳过此页面的禁令检查(日出)(不执行)。 -
embargo
- 布尔值 - 可选(默认false
)- 如果为true
,则对页面明确执行禁令检查(日出)。此功能旨在用于通常不执行此类检查的页面,即由于父级(参见图omz13.suncyclepages.embargoCheckWhenParentIs
)或模板(参见图omz13.suncyclepages.embargoCheckWhenTemplateIs
)而没有明确执行。 -
sunset
- 日期 - 可选 - 页面要下线(撤回)的(未来)日期。 -
sunsetto
页面 - 可选 - 在页面下线时用于301
重定向的页面的名称;如果没有指定,则给出404
。
蓝图
此插件提供了以下内置蓝图(例如,为了使将字段添加到面板的蓝图blueprint/site.yml
更容易)
omz13/suncycle
- 一组用作extends
的字段,以便轻松输入禁令参数。例如,它将被附加到入门套件的site/blueprints/pages/article.yml
中,因此
sidebar: meta: type: fields fields: date: type: date time: true default: now label: Publication Date author: type: users tags: type: tags options: query query: fetch: site.tags.toStructure.sortBy("name", "asc") text: "{{ structureItem.name }}" value: "{{ structureItem.value }}" extends: omz13/suncycle
此内置蓝图已本地化为en
和fr
;欢迎为其他语言提交PR!
使用
调试模式
如果kirby网站处于调试模式
-
如果页面被禁令(等待日出),则
404
页面将包含一个额外的头X-SUNCYCLE: isUnderembargo
。 -
如果一个页面已经被撤销(日落),则
410
响应将包括一个额外的头信息X-SUNCYCLE: isSunset
,而301
则包括X-SUNCYCLE: isSunset <to>
,其中<to>
是sunsetto
页面的名称。
在集合中的应用示例
在kirby3 StarterKit中,您不希望博客文章列表中包含任何处于禁令状态(等待日出)或已经日落的文章... 实现起来非常简单。
site/collections/articles.php
看起来像这样
<?php return function ($site) { return $site->find('blog')->children()->listed()->flip(); };
改为
<?php return function ($site) { return $site->find('blog')->children()->listed()->isunderembargo(false)->issunset(false)->flip(); };
请注意,在isunderembargo
和issunset
的过滤器中使用false
,因为这需要的是不在这种条件下存在的页面。
方法
此插件提供了以下方法
-
page.issunset()
:返回一个布尔值,如果页面当前处于日落状态(即已撤销),则为true
。 -
page.isunderembargo()
:返回一个布尔值,如果页面当前处于禁令状态(即等待日出),则为true
。 -
pages.issunset( $match = true )
:一个过滤器,用于返回集合中处于日落状态(即已撤销)的页面子集($match = true
)或不是($match = false
)。 -
pages.isunderembargo( $match = true )
:一个过滤器,用于返回集合中处于禁令状态(即等待日出)的页面子集($match = true
)或不是($match = false
)。
免责声明
此插件“按原样”提供,不提供任何保证。请在自己的风险下使用,并在将其用于生产环境之前始终自行测试。如果您发现任何问题,请创建新问题。
许可协议
禁止您在任何宣传种族主义、性别歧视、恐同、动物虐待、暴力或其他任何形式仇恨言论的项目中使用此插件。