contextualcode/content-import

内容导入包

安装: 714

依赖: 0

建议者: 0

安全性: 0

星星: 1

分支: 1

类型:symfony-bundle

v2.9.2 2024-04-25 17:05 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特定包中。

更多详细信息请参考参考

安装

  1. 通过composer需要contextualcode/content-import

     composer require contextualcode/content-import
    
  2. 运行迁移

     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集成,需要遵循以下步骤

  1. 创建映射内容模型的CMS/CMR/DXP特定包

  2. 定义CMS/CMR/DXP特定内容操作处理程序。它应实现ContentOperationsInterface,例如:Service/Integration/ContentOperations

  3. 实现的内容操作处理程序应注册为ContextualCode\ContentImport\ContentHandler\ContentOperationsInterface服务

     ContextualCode\ContentImport\ContentHandler\ContentOperationsInterface:
         class: ContextualCode\ContentImport\Service\Integration\ContentOperations