tdausner / neos.folder
基于Neos内容存储库的文件夹系统
Requires
- php: >=8.1
- neos/flow: ^8
README
基于Neos内容存储库的文件夹系统
本软件包实现了一个基于Neos内容存储库(CR)的严格分层文件夹系统。
Neos/Flow内容存储库
如果您熟悉Neos/Flow内容存储库,您可能跳过本节。
Neos/Flow内容存储库(CR)是一个抽象层,用于实现永久存储(通常是数据库系统)。本简要介绍并不声称完整。它涵盖了理解基于CR的Neos.Folder系统所需的部分。
当您在Neos中设置第一个站点时,CR包含从路径/sites
开始的条目分层结构。
CR能够容纳许多这样的分层结构。以下是一些示例
/sites
由Neos.Neos软件包中的SiteService
类定义/assets
由Neos.MetaData.ContentRepositoryAdapter软件包中的MetaDataRepository
类定义/taxonomies
由Sitegeist.Taxonomy软件包中的Settings.yaml
文件定义
节点
CR中的基本单位是一个节点。每个节点由
路径
示例:/var/www/html
- 您可以从目录树中了解这一点,或者标识符
示例:c255046d-4215-456f-b2f9-017db059cf55
但这还不止这些。CR可以以不同的变体持有相同的节点,以保留不同语言和/或国家/地区不同的属性。在CR中,不同的变体称为维度。
到目前为止,一个节点根据路径
或标识符
以及维度
是唯一的。
维度
维度在Neos.ContentRepository.contentDimensions
部分的Settings.yaml
文件中定义(例如,查看站点软件包Neos.Demo
)。在设置文件中,定义了约束
,因为并非所有定义的维度(语言
和国家/地区
)的组合都是有意义的。您可以在项目的Configuration/Settings.yaml
文件中定义任何维度
,除了标准维度。有关详细信息,请参阅NEOS内容维度文档。
属性
CR中的任何节点都可以持有属性。CR中的一个节点可以持有任何维度组合的变体,因此可以持有不同的属性key => value
对(属性)。
Neos.Folder系统
维度
Neos.Folder系统在维度上的不同变体方面遵循CR。对于根文件夹(如上面示例中的/assets
),文件夹可以添加而不带维度。
属性
默认属性
Neos.Folder软件包提供了一种严格的文件夹分层系统。它通过三个默认属性扩展了CR:
- 文件夹标题
- 文件夹标题路径
- 关联
文件夹标题和文件夹标题路径
如果您想使用 Neos.Folder 显示文件夹的路径名称(或其部分,即路径段或 CR Node
名称),则不能坚持使用 CR 的路径名称,因为 CR 的路径名称由小写字母、数字和斜杠组成。没有大写字母,没有空格,更重要的是,没有变音符号(重音符号)。
因此,自然语言字符串被用作文件夹标题,并从父文件夹的所有标题中构建文件夹标题路径。
关联
为了保存关联的 Neos 对象的信息,使用 associations
属性数组。存储为 Node 的标识符。API 提供了一种方法来根据设置和清除符号链接的语法将对象关联到文件夹或从文件夹中分离
- 设置符号链接:
ln -s <token> <target>
- 移除它:
rm <target>
其他属性
API 包含设置、清除和检索属性的方法。Neos.Folder 属性 API 筛选了 默认属性。
采用
想象一个文件夹系统,您的应用程序设置一个基本文件夹(例如 /your-application/folder/
)。然后,后端用户通过子文件夹(以及子子文件夹...)扩展此文件夹系统。这最终形成了文件夹树。每个文件夹的标题都是针对用户会话维度的特定(请参阅 文件夹标题和文件夹标题路径)。
如果网站设置为多维度,后端用户可以通过更改后端中的维度来将整个站点复制到某些新维度。整个站点树被复制到新维度。同样适用于 Neos.Folder 系统。在采用文件夹树后,相同的文件夹树对新维度可用。如果维度的更改与语言切换一起进行,则后端可能将翻译并设置文件夹的标题。
配置
一些默认参数在包的文件 Settings.yaml
中定义
Neos: Folder: defaults: nodeType: 'Neos.Folder:Folder' titlePropertyKey: 'title' titlePathPropertyKey: 'titlePath' associationsPropertyKey: 'associations' adoptOnEmpty: true
前四个属性(nodeType
、titlePropertyKey
、titlePathPropertyKey
和 associationsPropertyKey)无需进一步解释。
属性 adoptOnEmpty
控制服务 API 的行为。该属性确定 get
服务的操作行为,如果没有可用的文件夹(树)针对(可能的新)会话维度。如果为 true
,则从默认维度采用文件夹树。
节点类型 Neos.Folder:Folder
在包的文件 NodeTypes.Folder.yaml
中定义
'Neos.Folder:Folder': label: 'Neos Folder' superTypes: 'Neos.Neos:Node': TRUE constraints: nodeTypes: '*': FALSE properties: title: type: string titlePath: type: string associations: type: references
命令行界面和 API
命令行流程界面提供了添加、设置标题、删除、采用、移动、设置或清除属性、关联文件夹和显示所有根文件夹的命令。还有列出、导出和导入文件夹树的命令。有关更多信息,请使用 ./flow help folder
命令或查看 Flow 命令 文档。
Neos.Folder 包有两个 API
有关更多信息,请参阅上面的链接之一。
要求
- PHP 8.x
- Neos/Flow 8.x