bmack / site-importer
从Yaml文件结构导入记录到TYPO3数据库
Requires
- php: ^8.1
- ext-json: *
- symfony/yaml: ^6 || ^7
- typo3/cms-core: ^12
README
基于TYPO3和TYPO3 Console构建。
简介
在TYPO3项目中进行部署时,TYPO3的某些配置存储在数据库中,这是非常繁琐的问题。
尽管TYPO3一直在不断改进,但仍有一些遗留问题。
sys_domain
域名记录是最有问题的。在一个多站点项目(一个安装中的多个网站)中,反复设置域名记录并保持同步非常令人烦恼。这个小工具将帮助解决这个问题。
sys_template
基本TypoScript信息仍然需要从数据库中加载。
自TYPO3 v8以来,有像“bolt”这样的扩展提供了很好的解决方案,不再需要sys_template记录。
页面上单个数据库字段的更改解决了我们大多数项目的这个问题。
sys_language
我们的大多数项目有很多语言,但我们首先将它们添加到生产环境中,以确保整个系统中所有ID都相同。
基本用法
我们的部署设置使用composer、.env和TYPO3控制台。部署通过ansible或deployer进行,或完全透明地通过platform.sh进行。
根据环境,通常包括本地、测试、预发布和生产系统,我们需要将域名记录添加到所有我们的项目中。
为了使用站点导入器,请通过composer添加此包
composer req bmack/site-importer
之后,在项目仓库的某个位置创建一个yaml文件。我们的设置通常如下所示
bin/
conf/
web/
var/
vendor/
composer.json
composer.lock
在这种情况下,为本地设置创建一个文件conf/site_dev.yaml
。它看起来像这样
domains:
mode: "replace"
table: "sys_domain"
entries:
- { domainName: "myproject.local", pid: 1 }
- { domainName: "myproject-ch.local", pid: 1 }
- { domainName: "myproject-microsite.local", pid: 13056 }
可以根据需要创建其他用于预发布、生产等的文件。
选项mode
描述了在添加条目之前是否截断数据库表,但也可以设置为append
或update
。如果设置为append
,则条目将作为纯插入写入,而不考虑记录是否已存在。
如果mode
设置为replace
,则首先截断表,然后插入条目。
如果mode
设置为update
,则会发生以下情况
- 检查条目是否包含
uid
属性。如果没有,则将条目插入为新记录(就像如果mode
设置为append
一样发生)。 - 如果条目包含
uid
属性,脚本会检查该记录是否在表中存在。如果存在,则执行SQL更新以更新记录。如果不存在,则插入。
该文件可以接受多个表,因此,所有语言记录也可以添加,但这可以在通用的sites.yaml
文件中完成,该文件适用于所有环境。
在部署时,只需调用bin/typo3cms siteimport:fromfile conf/site_dev.yaml
即可导入配置的记录集。
platform.sh
对于platform.sh,我们在post-deploy钩子中使用bin/typo3cms siteimport:fromfile conf/site_$PLATFORM_BRANCH.yaml
来替换特定分支的记录。