oblik/kirby-walker

Kirby 3 插件,用于导出、导入和遍历网站内容。

安装: 61

依赖项: 1

建议者: 0

安全: 0

星标: 16

关注者: 5

分支: 0

开放问题: 0

类型:kirby-plugin

3.0.0 2022-10-06 10:18 UTC

This package is auto-updated.

Last update: 2024-09-20 12:48:46 UTC


README

插件,允许您根据指定的蓝图遍历、导出和导入所有网站数据。它是为了作为其他插件的依赖项而创建的。特性

  • 基于字段序列化内容(解析结构中的 YAML,将逗号分隔的标签字段转换为数组等)
  • 将 KirbyTags 转换为 XML 并返回(供不认识 KirbyTag 语法的其他 API 使用)
  • 将 Markdown 转换为 HTML 并返回(供不与 Markdown 一起工作的 API 使用)
  • 导出整个网站、页面和文件模型
  • 使用与导出相同的模式导入内容
  • 根据其 id 字段遍历块和结构(如果它们有这样的字段)
  • 易于扩展 PHP 类以实现自定义行为
  • 支持已弃用的 Kirby Editor

安装

通过 Composer 从 oblik/kirby-walker on Packagist

composer require oblik/kirby-walker

使用方法

导出

您可以使用 Exporter 类来导出内容

use Oblik\Walker\Walker\Exporter;

$exporter = new Exporter();
$result = $exporter->walk(page('home'));
echo json_encode($result, JSON_PRETTY_PRINT);
{
    "title": "Home",
    "headline": "Welcome to Kirby's Starterkit",
    "subheadline": "A fully documented example project"
}

导入

您可以使用 Importer 类将输入内容与当前模型内容合并。

use Oblik\Walker\Walker\Importer;

$importer = new Importer();
$model = page('home');
$result = $importer->walk($model, [
	'input' => [
		'headline' => 'Updated headline!'
	]
]);
echo json_encode($data, JSON_PRETTY_PRINT);
{
    "title": "Home",
    "headline": "Updated headline!",
    "subheadline": "A fully documented example project"
}

合并数据后,您可以使用生成的数组将更改应用到模型上

kirby()->impersonate('kirby');
$model->update($result);

选项

有一些选项允许您转换原始内容,使其更适合其他系统。然后,插件可以将重新格式化的内容转换回其原始格式,同时保留对其所做的任何更改。

解析 KirbyTags

将 KirbyTags 转换为 XML

Subheadline: A fully (link: https://getkirby.com/docs/guide text: documented target: _blank) example project
$exporter->walk(page('home'), [
	'options' => [
		'parseKirbyTags' => true
	]
]);
{
    "subheadline": "A fully <kirby link=\"https://getkirby.com/docs/guide\" text=\"documented\" target=\"_blank\"/> example project"
}

默认情况下,KirbyTag 属性被编码为 XML 属性。如果消费系统需要操作这些值(例如,翻译它们),您可能需要将它们的内容从标签中移出。而不是这样

<kirby link="https://getkirby.com/docs/guide" text="documented" target="_blank"/>

…您可能需要这样

<kirby link="https://getkirby.com/docs/guide" target="_blank">
    <value name="text" index="1">documented</value>
</kirby>

要这样做,只需使用 externalAttributes 设置

$exporter->walk(page('home'), [
	'options' => [
		'parseKirbyTags' => [
			'externalAttributes' => ['text']
		]
	]
]);
{
    "subheadline": "A fully <kirby link=\"https://getkirby.com/docs/guide\" target=\"_blank\"><value name=\"text\" index=\"1\">documented</value></kirby> example project"
}

解析 Markdown

如果消费系统不理解 Markdown,您可以将其转换为 HTML

Text:

# Hello World

This is a fully **documented** example project!
$exporter->walk(page('home'), [
	'options' => [
		'parseMarkdown' => true
	]
]);
{
    "text": "<h1>Hello World</h1><p>This is a fully <strong>documented</strong> example project!</p>"
}

注意: 这仅适用于 textarea 字段类型。

解析模板

将花括号内的内容转换为 XML

Title: {{ site.title }} Home
$exporter->walk(page('home'), [
	'options' => [
		'parseTemplates' => true
	]
]);
{
    "title": "<meta template=\" site.title \"/> Home"
}

扩展

您可以通过扩展基本类轻松添加自定义行为。例如,您可以像这样返回每个字段的字符长度

use Oblik\Walker\Walker\Walker;

class CustomWalker extends Walker
{
	protected function walkText(string $text, $context)
	{
		return strlen($text);
	}
}

$walker = new CustomWalker();
$data = $walker->walk(page('home'));
echo json_encode($data, JSON_PRETTY_PRINT);
{
    "title": 4,
    "headline": 29,
    "subheadline": 34
}

您还可以使用每个字段的蓝图中的值

class CustomWalker extends Walker
{
	protected function walkField(Field $field, $context)
	{
		return $context['blueprint']['label'] ?? 'NONE';
	}
}
{
    "title": "NONE",
    "headline": "Headline",
    "gap": "Gap",
    "subheadline": "Subheadline"
}

酷的部分是,解析结构字段的 YAML 和布局及块字段的 JSON 已经处理好了。您的自定义逻辑将自动适用于所有嵌套字段。

针对字段类型的单独逻辑

您可以通过添加 walkField{{ field type }} 方法为不同的字段类型提供不同的逻辑。例如,您可以通过添加 walkFieldGap 只更改 gap 字段的行为

class CustomWalker extends Walker
{
	protected function walkFieldGap($field, $context)
	{
		return 'Mind the gap!';
	}
}
{
    "title": "Home",
    "headline": "Welcome to Kirby's Starterkit",
    "gap": "Mind the gap!",
    "subheadline": "A fully documented example project"
}