Magento 2 - 添加设计配置设置问题

时间:2017-11-07 09:35:52

标签: magento2 magento2.1

如果已经提出并回答了这个问题,或者文档提供了解决方案,请道歉,但我似乎无法理解这一点。

我的目标是在设计配置设置中添加自定义字段,管理员可以将启用圣诞效果的功能切换到前端存储。从我在网上看到的,最好的方法是通过自定义模块,虽然我可能错了?

所以我创建了一个模块来添加设计配置设置(设置圣诞主题)。在模块的etc/di.xml文件中,我添加了以下内容:

<?xml version="1.0"?>
<!--
/**
 * Copyright © 2013-2017 Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */
-->
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">

  <type name="Magento\Theme\Model\Design\Config\MetadataProvider">
    <arguments>
      <argument name="metadata" xsi:type="array">
        <item name="header_christmas_theme" xsi:type="array">
            <item name="path" xsi:type="string">design/header/christmas_theme</item>
            <item name="fieldset" xsi:type="string">other_settings/header</item>
            <item name="componentType" xsi:type="string">field</item>
        </item>
      </argument>
    </arguments>
  </type>
</config>

在模块的view/adminhtml/ui_component/design_config_form.xml文件中,我添加了以下内容:

<form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Ui:etc/ui_configuration.xsd">
  <field name="header_christmas_theme">
      <argument name="data" xsi:type="array">
          <item name="options" xsi:type="object">Magento\Config\Model\Config\Source\Yesno</item>
          <item name="config" xsi:type="array">
              <item name="label" xsi:type="string" translate="true">Set Christmas Theme</item>
              <item name="dataType" xsi:type="string">text</item>
              <item name="componentType" xsi:type="string">field</item>
              <item name="formElement" xsi:type="string">select</item>
              <item name="dataScope" xsi:type="string">header_christmas_theme</item>
              <item name="value" xsi:type="string">0</item>
          </item>
      </argument>
  </field>
</form>

启用模块时,运行setup:在控制台升级并清除缓存,我收到以下错误。任何人都可以通过在设计配置中添加自定义字段来协助我出错的地方吗?

1 exception(s):
Exception #0 (Magento\Framework\Exception\LocalizedException): The configuration parameter "componentType" is a required for "header_christmas_theme" component.

Exception #0 (Magento\Framework\Exception\LocalizedException): The configuration parameter "componentType" is a required for "header_christmas_theme" component.
#0 /vendor/magento/framework/View/Element/UiComponentFactory.php(361): Magento\Framework\View\Element\UiComponentFactory->mergeMetadataItem(Array, Array, false)
#1 /vendor/magento/framework/View/Element/UiComponentFactory.php(361): Magento\Framework\View\Element\UiComponentFactory->mergeMetadataItem(Array, Array, false)
#2 /vendor/magento/framework/View/Element/UiComponentFactory.php(361): Magento\Framework\View\Element\UiComponentFactory->mergeMetadataItem(Array, Array, false)
#3 /vendor/magento/framework/View/Element/UiComponentFactory.php(272): Magento\Framework\View\Element\UiComponentFactory->mergeMetadataItem(Array, Array, false)
#4 /vendor/magento/framework/View/Element/UiComponentFactory.php(164): Magento\Framework\View\Element\UiComponentFactory->mergeMetadata('design_config_f...', Array, false)
#5 /vendor/magento/framework/View/Layout/Generator/UiComponent.php(124): Magento\Framework\View\Element\UiComponentFactory->create('design_config_f...', NULL, Array)
#6 /vendor/magento/framework/View/Layout/Generator/UiComponent.php(93): Magento\Framework\View\Layout\Generator\UiComponent->generateComponent(Object(Magento\Framework\View\Layout\Data\Structure), 'design_config_f...', Array, Object(Magento\Framework\View\Layout\Interceptor))
#7 /vendor/magento/framework/View/Layout/GeneratorPool.php(86): Magento\Framework\View\Layout\Generator\UiComponent->process(Object(Magento\Framework\View\Layout\Reader\Context), Object(Magento\Framework\View\Layout\Generator\Context))
#8 /vendor/magento/framework/View/Layout.php(327): Magento\Framework\View\Layout\GeneratorPool->process(Object(Magento\Framework\View\Layout\Reader\Context), Object(Magento\Framework\View\Layout\Generator\Context))
#9 /var/generation/Magento/Framework/View/Layout/Interceptor.php(89): Magento\Framework\View\Layout->generateElements()
#10 /vendor/magento/framework/View/Layout/Builder.php(129): Magento\Framework\View\Layout\Interceptor->generateElements()
#11 /vendor/magento/framework/View/Page/Builder.php(55): Magento\Framework\View\Layout\Builder->generateLayoutBlocks()
#12 /vendor/magento/framework/View/Layout/Builder.php(65): Magento\Framework\View\Page\Builder->generateLayoutBlocks()
#13 /vendor/magento/framework/View/Layout.php(244): Magento\Framework\View\Layout\Builder->build()
#14 /vendor/magento/framework/View/Layout.php(859): Magento\Framework\View\Layout->build()
#15 /var/generation/Magento/Framework/View/Layout/Interceptor.php(414): Magento\Framework\View\Layout->getBlock('menu')
#16 /vendor/magento/module-backend/Model/View/Result/Page.php(59): Magento\Framework\View\Layout\Interceptor->getBlock('menu')
#17 /var/generation/Magento/Backend/Model/View/Result/Page/Interceptor.php(24): Magento\Backend\Model\View\Result\Page->setActiveMenu('Magento_Theme::...')
#18 /vendor/magento/module-theme/Controller/Adminhtml/Design/Config/Edit.php(69): Magento\Backend\Model\View\Result\Page\Interceptor->setActiveMenu('Magento_Theme::...')
#19 /var/generation/Magento/Theme/Controller/Adminhtml/Design/Config/Edit/Interceptor.php(24): Magento\Theme\Controller\Adminhtml\Design\Config\Edit->execute()
#20 /vendor/magento/framework/App/Action/Action.php(102): Magento\Theme\Controller\Adminhtml\Design\Config\Edit\Interceptor->execute()
#21 /vendor/magento/module-backend/App/AbstractAction.php(226): Magento\Framework\App\Action\Action->dispatch(Object(Magento\Framework\App\Request\Http))
#22 /vendor/magento/framework/Interception/Interceptor.php(74): Magento\Backend\App\AbstractAction->dispatch(Object(Magento\Framework\App\Request\Http))
#23 /vendor/magento/framework/Interception/Chain/Chain.php(70): Magento\Theme\Controller\Adminhtml\Design\Config\Edit\Interceptor->___callParent('dispatch', Array)
#24 /vendor/magento/framework/Interception/Chain/Chain.php(63): Magento\Framework\Interception\Chain\Chain->invokeNext('Magento\\Theme\\C...', 'dispatch', Object(Magento\Theme\Controller\Adminhtml\Design\Config\Edit\Interceptor), Array, 'adminAuthentica...')
#25 /vendor/magento/module-backend/App/Action/Plugin/Authentication.php(143): Magento\Framework\Interception\Chain\Chain->Magento\Framework\Interception\Chain\{closure}(Object(Magento\Framework\App\Request\Http))
#26 /vendor/magento/framework/Interception/Chain/Chain.php(67): Magento\Backend\App\Action\Plugin\Authentication->aroundDispatch(Object(Magento\Theme\Controller\Adminhtml\Design\Config\Edit\Interceptor), Object(Closure), Object(Magento\Framework\App\Request\Http))
#27 /vendor/magento/framework/Interception/Interceptor.php(138): Magento\Framework\Interception\Chain\Chain->invokeNext('Magento\\Theme\\C...', 'dispatch', Object(Magento\Theme\Controller\Adminhtml\Design\Config\Edit\Interceptor), Array, 'adminMassaction...')
#28 /vendor/magento/module-backend/App/Action/Plugin/MassactionKey.php(33): Magento\Theme\Controller\Adminhtml\Design\Config\Edit\Interceptor->Magento\Framework\Interception\{closure}(Object(Magento\Framework\App\Request\Http))
#29 /vendor/magento/framework/Interception/Interceptor.php(142): Magento\Backend\App\Action\Plugin\MassactionKey->aroundDispatch(Object(Magento\Theme\Controller\Adminhtml\Design\Config\Edit\Interceptor), Object(Closure), Object(Magento\Framework\App\Request\Http))
#30 /var/generation/Magento/Theme/Controller/Adminhtml/Design/Config/Edit/Interceptor.php(39): Magento\Theme\Controller\Adminhtml\Design\Config\Edit\Interceptor->___callPlugins('dispatch', Array, Array)
#31 /vendor/magento/framework/App/FrontController.php(55): Magento\Theme\Controller\Adminhtml\Design\Config\Edit\Interceptor->dispatch(Object(Magento\Framework\App\Request\Http))
#32 /vendor/magento/framework/Interception/Interceptor.php(74): Magento\Framework\App\FrontController->dispatch(Object(Magento\Framework\App\Request\Http))
#33 /vendor/magento/framework/Interception/Chain/Chain.php(70): Magento\Framework\App\FrontController\Interceptor->___callParent('dispatch', Array)
#34 /vendor/magento/framework/Interception/Interceptor.php(138): Magento\Framework\Interception\Chain\Chain->invokeNext('Magento\\Framewo...', 'dispatch', Object(Magento\Framework\App\FrontController\Interceptor), Array, 'install')
#35 /vendor/magento/framework/Module/Plugin/DbStatusValidator.php(69): Magento\Framework\App\FrontController\Interceptor->Magento\Framework\Interception\{closure}(Object(Magento\Framework\App\Request\Http))
#36 /vendor/magento/framework/Interception/Interceptor.php(142): Magento\Framework\Module\Plugin\DbStatusValidator->aroundDispatch(Object(Magento\Framework\App\FrontController\Interceptor), Object(Closure), Object(Magento\Framework\App\Request\Http))
#37 /var/generation/Magento/Framework/App/FrontController/Interceptor.php(26): Magento\Framework\App\FrontController\Interceptor->___callPlugins('dispatch', Array, Array)
#38 /vendor/magento/framework/App/Http.php(135): Magento\Framework\App\FrontController\Interceptor->dispatch(Object(Magento\Framework\App\Request\Http))
#39 /vendor/magento/framework/App/Bootstrap.php(258): Magento\Framework\App\Http->launch()
#40 /index.php(39): Magento\Framework\App\Bootstrap->run(Object(Magento\Framework\App\Http))
#41 {main}

2 个答案:

答案 0 :(得分:0)

您应将“ header_christmas_theme”添加到现有字段集中,或添加具有单独名称的新字段集,并将其添加到配置xml文件中

答案 1 :(得分:0)

尝试一下。对我来说,它起作用了!

从di.xml中删除

  <item name="componentType" xsi:type="string">field</item>

并在design:config_form.xml中添加此

<form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Ui:etc/ui_configuration.xsd">
<fieldset name="other_settings" sortOrder="30">
    <fieldset name="header">
        <field name="header_christmas_theme" formElement="select">
            <settings>
                <validation>
                    <rule name="validate-no-html-tags" xsi:type="boolean">true</rule>
                </validation>
                <dataType>text</dataType>
                <componentType>field</componentType>
                <label translate="true">Set Christmas Theme</label>
                <dataScope>header_christmas_theme</dataScope>
            </settings>
        </field>
    </fieldset>
</fieldset>