imarc / craft-sheetsync
允许您将CSV、XLSX和其他电子表格文件导入Craft部分作为条目。
0.13.13
2021-05-26 15:42 UTC
Requires
- craftcms/cms: ^3.0.0-RC1
- neitanod/forceutf8: ^2.0
- phpoffice/phpspreadsheet: ^1.3
README
允许您将电子表格文件导入/同步到Craft部分作为条目。
配置
应在craft/config/sheet-sync.php中配置设置。默认设置组合在一起,其他设置按同步名称分组
return [
'default' => [
// default sync settings
],
'name-of-a-sync' => [
// sync specific settings
],
];
有效设置
- section - 您希望同步到的CMS部分的句柄。
- filename - 您希望同步的文件名称(如果同步调用时未指定。)
- entry_type_id(可选)- 如果部分内有多个条目类型,这将允许您指定用于新条目的类型。如果部分内只有一个条目类型,则不需要指定此参数。
- find - 这是一个闭包(或可调用的)函数,它接受两个参数,
$criteria
和$row
,它修改$criteria
以检索对应于$row
的相应条目(如果存在的话)。 - slug - 这是一个字符串(字段的句柄)或闭包(或可调用的)。如果它是一个字符串,那么插件将使用该字段来生成条目的slug。如果它是一个闭包,则将当前条目传递给它,并期望返回一个有效的slug。
- fields - 请参阅下一节。
- authorId(默认:1)- 将创建条目归因于的ID。
- delimiter、enclosure 和 escape(默认:',' '"' 和 '\') - 这些将直接传递给
fgetcsv()
。 - reader(可选)- 允许您覆盖用于读取文件的类。例如,您可能希望将其设置为
\imarc\sheetsync\services\PlainCsv
,以使用仅使用 fgetcsv() 而不是 phpoffice/phpspreadsheet 的性能更好的读取器。 - headers(可选)- 允许您覆盖如何确定工作表的标题。默认情况下,插件将使用第一行,但您也可以返回标题的静态数组,或者可以编写一个函数,该函数接受
$reader
作为参数并读取(和/或跳过)多行。 - cleanUpOnKey(可选)- 当设置时,将删除当前工作表中不存在的具有此键的任何条目。
- minImport(默认:0)- 只有在更新或创建的条目数量超过此数值时才会运行清理。
字段
字段配置为关联数组。键应该是Craft字段句柄的名称。值可以是字符串(CSV文件列标题之一),或闭包(或可调用的)函数,该函数接受当前行(作为关联数组)和同步实例,并应返回该字段的值。这些闭包在填充其他内容之后调用,因此如果需要进行交叉引用,可以这样做。例如,这将根据当前行的 'Assistant Name' 值在当前部分中搜索用户并创建Craft关系。
// ...
'fields' => [
// ...
'someUsers' => function($row, $sync) {
$criteria = craft()->elements->getCriteria(ElementType::Entry);
$criteria->sectionId = $sync->section->id;
$criteria->type = $sync->entry_type_id;
$criteria->name = $row['Assistant Name'];
$entries = $criteria->find();
if (count($entries)) {
return [(int) (current($entries)->id)];
} else {
return null;
}
},
],
// ...
内置字段
您还可以覆盖以下所有内置字段。在大多数情况下,您只需要设置 id
和 title
。重要的是要注意,对于日期字段,Craft期望一个 DateTime
实例,而不仅仅是数值时间戳或字符串。
- authorId - 整数
- dateCreated - DateTime
- dateUpdated - DateTime
- enabled - 布尔型
- enabledForSite - 布尔型 - 通常当您提供
siteId
值时,此选项会自动设置 - expiryDate - DateTime
- id - 整数
- postDate - DateTime
- revisionNotes - 字符串
- slug - 字符串
- title - 字符串
以下是在 config/sheet-sync.php 文件中处理日期字段的示例
'expiryDate' => function($row) {
return new DateTime($row['expiration']);
},
记住,DateTime
构造函数也可以处理各种字符串,例如 '下个月'、'+90 天' 等。
用法
最常见的方法是通过 Craft 控制面板中的工具,选择“表格导入”来访问它。从那里,您可以选择要运行同步的同步名称,并且(可选)上传一个 CSV 文件。
通过命令行
要运行同步,首先导航到包含 craft 的 /var/www/ 文件夹。然后
$ php craft sheet-sync/default/sync --name='name-of-a-sync'
您可以(可选)指定要使用特定文件
$ php craft sheet-sync/default/sync --name='name-of-a-sync' --file=path/to/file