firegento/magento2-content-provisioning

1.4.3 2023-05-04 20:55 UTC

README

此模块是在FireGento e.V.(https://firegento.com/)组织的Magento Hackathon期间开发的。

ℹ️ 维护

此模块由TechDivision维护(TechDivision)。因此,我们在那里创建了一个镜像仓库,这使得我们能够在内部基础设施上对此模块运行自动化的质量检查。有关详细信息,请参阅 https://gitlab.met.tdintern.de/techdivision-public/m2-content-provisioning。如果您对仓库结构或镜像有任何问题,请随时联系我们。

构建状态(develop分支)

pipeline status

此模块背后的想法

通常,内容的一些部分(如CMS页面或块)需要在发布中部署。有一些内容条目,应该始终由代码维护,而有些内容只需将一次交付给每个系统。

在大多数情况下,此类需求将通过设置脚本(或设置修补程序)来解决,这是在没有机会声明每个内容实体责任的情况下可行的方法。

此模块允许您通过XML文件声明此类内容条目,并确保在每次运行setup:upgrade时将此声明应用于数据库。

使用composer安装

composer require firegento/magento2-content-provisioning

如何工作

安装此模块后,您可以在每个模块中创建自己的content_provisioning.xml

示例配置

页面最小配置

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Firegento_ContentProvisioning:etc/content_provisioning.xsd">
    <page key="your-module.page.an-identifier.all" identifier="an-identifier" maintained="true" active="true">
        <title>Page Title</title>
        <content type="file">Your_Module::path/to/content.html</content>
    </page>
    ...
</config>

页面完整配置

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Firegento_ContentProvisioning:etc/content_provisioning.xsd">
    <page key="your-module.page.an-identifier.german" identifier="an-identifier" maintained="true" active="true">
        <title>Page Title</title>
        <content heading="New Page Heading" type="file">Your_Module::path/to/content.html</content>
        <media_directory>Your_Module::path/to/media</media_directory>
        <stores>
            <store code="germany_german"/>
            <store code="swiss_german"/>
            <store code="austria_german"/>
        </stores>
        <seo>
            <title>SEO Page Title</title>
            <keywords>Some, SEO, keywords</keywords>
            <description>SEO description</description>
        </seo>
        <design>
            <layout>3columns</layout>
            <layout_xml><![CDATA[<foo>bar</foo>]]></layout_xml>
        </design>
        <custom_design>
            <from>2019-03-03</from>
            <to>2019-03-29</to>
            <layout>3columns</layout>
            <theme_id>3</theme_id>
        </custom_design>
    </page>
    ...
</config>

块最小配置

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Firegento_ContentProvisioning:etc/content_provisioning.xsd">
    <block key="your-module.block.lorem-ipsum-1.all" identifier="lorem-ipsum-1" maintained="true" active="true">
        <title>Test Block 1</title>
        <content><![CDATA[<h2>test foobar Aenean commodo ligula eget dolor aenean massa</h2>]]></content>
    </block>
    ...
</config>

块完整配置

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Firegento_ContentProvisioning:etc/content_provisioning.xsd">
    <block key="your-module.block.lorem-ipsum-2.german" identifier="lorem-ipsum-2" maintained="false" active="true">
        <title>Test Block 2</title>
        <content type="file">Your_Module::path/to/content.html</content>
        <media_directory>Your_Module::path/to/media</media_directory>
        <stores>
            <store code="germany_german"/>
            <store code="swiss_german"/>
            <store code="austria_german"/>
        </stores>
    </block>
    ...
</config>

一些解释

key 属性

此属性是必需的,以便合并所有模块之间的内容提供配置。它类似于布局块的name属性...

您可以使用 identifier 吗?

不,identifier 不是唯一的,因为同一个identifier可以被用于多个商店视图。

maintained 属性

使用此属性,您定义此内容是否应该每次都应用,甚至只应用一次。如果值为 false,则只有当数据库中不存在为定义的商店指定的 identifier 时,内容才会被持久化。

content 节点

此节点提供页面或块的 THE 内容。它可以作为CDATA块的节点值添加,或作为相对于您的Magento实例的文件路径,或以模块命名空间前缀。为了使用文件,您需要在内容节点上添加 type="file" 属性。

stores 节点

此节点是可选的。如果未定义,则块或页面将应用于所有商店。一个 "maintained" 条目也将应用于在重新运行 setup:upgrade 命令后创建的未来商店。您还可以使用 'wildcard' * 来定义内容应应用于所有商店。

media_directory 节点(自版本 1.2.0 以来)

指定媒体文件的目录。内容中使用的每个媒体文件,如果存在于媒体源目录中,将被复制到 Magento 的 pub/media 目录。子目录结构应与在 pub/media 中查看的结构相同。只有现有和使用的媒体文件将被复制。

在本地环境中执行集成测试

# Create a new Magento instance
composer create-project --repository=https://repo.magento.com/ magento/project-community-edition magento

# Install content provisioning extension
cd magento 
composer require firegento/magento2-content-provisioning

# Update database configuration for integration tests
mv dev/tests/integration/etc/install-config-mysql.php.dist dev/tests/integration/etc/install-config-mysql.php
vi dev/tests/integration/etc/install-config-mysql.php

# Execute tests
php vendor/bin/phpunit -c $(pwd)/vendor/firegento/magento2-content-provisioning/Test/Integration/phpunit.xml

控制台命令

# reset a CMS block (all localizations) by its key
bin/magento content-provisioning:block:reset --key "myKey"
bin/magento content-provisioning:block:reset -k "myKey"

# reset a CMS blocks by its identifier
bin/magento content-provisioning:block:reset --identifier "myIdentifier"
bin/magento content-provisioning:block:reset -i "myIdentifier"

# add a CMS block by key
bin/magento content-provisioning:block:apply "myKey"

# add a CMS page by key
bin/magento content-provisioning:page:apply "myKey"

# list all configured CMS block entries
bin/magento content-provisioning:block:list

# list all configured CMS page entries
bin/magento content-provisioning:page:list

问题和计划中的功能

查看问题以了解接下来计划什么: https://github.com/magento-hackathon/m2-content-provisioning/issues 欢迎您在那里添加您的想法。

变更日志

查看 变更日志文件

此扩展的扩展;)

对于 magenerds/pagedesigner,有一个模块扩展了此内容提供模块: techdivision/pagedesigner-content-provisioning .