contextualcode / content-import
内容导入包
Requires
- php: >=7.3
- ext-curl: *
- ext-dom: *
- ext-json: *
- ext-libxml: *
- contextualcode/crawler: ^1.1 || ^2.0
- doctrine/doctrine-bundle: ^2.1
- doctrine/orm: ^2.7
- monolog/monolog: ^2.0
- symfony/console: >=5.0
- symfony/doctrine-bridge: >=5.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.16
- dev-master
- v2.9.2
- v2.9.1
- v2.9.0
- v2.8.0
- v2.7.1
- v2.7.0
- v2.6.1
- v2.6.0
- v2.5.0
- v2.4.3
- v2.4.2
- v2.4.1
- v2.4.0
- v2.3.10
- v2.3.9
- v2.3.8
- v2.3.7
- v2.3.6
- v2.3.5
- v2.3.4
- v2.3.3
- v2.3.2
- v2.3.1
- v2.3.0
- v2.2.3
- v2.2.2
- v2.2.1
- v2.2.0
- v2.1.5
- v2.1.4
- v2.1.3
- v2.1.2
- v2.1.1
- v2.1.0
- v2.0.1
- v2.0.0
- 1.1.x-dev
- v1.1.1
- v1.1.0
- 1.0.x-dev
- v1.0.0
This package is not auto-updated.
Last update: 2024-09-21 01:04:42 UTC
README
此包提供了从 contextualcode/crawler 的结果中进行内容导入的功能。尽管最初它是为 eZ Platform v3 设计的,但它不包含任何特定的 CMS/CMR/DXP 功能。它提供了一个抽象层,因此可以轻松地集成到任何新的 CMS/CMR/DXP 中。
需求
对于此包将要实现的新平台,唯一的和主要需求是平台内容模型。我们假设所有现代 CMS/CMR/DXP 都具有类似于 eZ Platform 的内容模型。
- 每个内容项都有自己的内容类型。例如,文章是“文章”内容类型的实例。某些产品是“产品”内容类型的实例。
- 内容是版本化的。因此,每个内容项都有多个版本。版本标识符是一个整数。
- 内容项仅用于存储数据(内容字段)。
- 所有内容项都通过使用单独的“位置”项来结构化。结构的类型并不重要,它可能是树/目录等。
基本概念
此包引入了一些新的与内容导入相关的新概念。了解每个概念都非常重要。更多详细信息请参阅 参考。
页面
每个网站 URL 都由 ContextualCode\Crawler\Entity\Page
实体表示。即使二进制文件和图像也有相应的自己的 Page
实体。
这些实体由 contextualcode/crawler 创建,并由此包使用。请查看 爬虫文档 了解如何爬取网站并将结果存储在 Page
实体中。
内容导入处理程序
每个 Page
都转换为单个内容项。为此,有一些特殊的处理程序来执行转换。每个处理程序都只处理 1 个特定内容类型(CMS 范围)。例如,“文章”内容导入处理程序将转换所有文章,而“博客文章”内容导入处理程序将转换所有博客文章。内容导入处理程序的唯一责任是将 Page
实体转换为 CMS 内容项。
更多详细信息请参阅 参考。
内容字段转换器
内容导入处理程序定义了将 Page
转换为内容项的确切方式。它包括为每个内容提供提取内容字段值的方式。通过使用内容字段转换器从页面中提取内容字段值。它们接收 Page
实体和一些选项作为输入,并返回内容字段值。此包提供了一些内容字段转换器。内容字段转换器的良好示例是文章页面。为了将其转换为内容项,需要提取以下数据
- 标题,将使用
text-line
内容字段转换器来获取其内容:通过指定的XPath
选择器从Page
实体中提取一行文本 - 正文,
html
内容字段转换器,通过提供的XPath
选择器从Page
实体中提取HTML内容
更多详细信息请参考参考。
内容哈希转换器
所有提取的内容字段都将进行哈希处理。这是为了能够确定导入源中是否有任何更改。内容哈希转换器的工作方式类似于内容字段转换器,但它们接收字段值作为输入,并返回其字符串表示形式。
更多详细信息请参考参考。
内容哈希
由内容导入脚本创建/更新的每个内容项都具有其内容哈希。内容哈希包含所有内容字段的组合哈希。它用于确定内容项在下次内容导入脚本执行时是否需要更新。此外,它还用于跟踪内容是否自导入以来已被手动编辑。在这种情况下,内容在下次内容导入脚本执行期间将不会更新,因为它有一些手动更改。
位置哈希
位置哈希与内容哈希非常相似。但是,它不是基于内容字段计算的,而是仅基于用于计算它的源Page
的URL。因为它是在CMS内容结构中定义内容项位置(位置)的唯一参数。
内容操作
包含创建内容、更新内容、添加位置等CMS特定操作的列表。此包仅提供接口和示例虚拟实现。它们需要实现于CMS/CMR/DXP特定包中。
更多详细信息请参考参考。
安装
通过
composer
需要contextualcode/content-import
composer require contextualcode/content-import
运行迁移
php bin/console doctrine:migrations:migrate --configuration=vendor/contextualcode/crawler/src/Resources/config/doctrine_migrations.yaml --no-interaction php bin/console doctrine:migrations:migrate --configuration=vendor/contextualcode/content-import/src/Resources/config/doctrine_migrations.yaml --no-interaction
用法
此包有一个示例虚拟CMS集成。为了将其与任何新的CMS/CMR/DXP集成,需要遵循以下步骤
创建映射内容模型的CMS/CMR/DXP特定包
- 定义实现
ContentTypeInterface
的ContentType
类,例如:Service/Integration/ContentType
。 - 定义实现
ContentInterface
的Content
类,例如:Service/Integration/Content
。 - 定义实现
LocationInterface
的Location
类,例如:Service/Integration/Location
。
- 定义实现
定义CMS/CMR/DXP特定内容操作处理程序。它应实现
ContentOperationsInterface
,例如:Service/Integration/ContentOperations
。实现的内容操作处理程序应注册为
ContextualCode\ContentImport\ContentHandler\ContentOperationsInterface
服务ContextualCode\ContentImport\ContentHandler\ContentOperationsInterface: class: ContextualCode\ContentImport\Service\Integration\ContentOperations