解决Magento 2后台无法显示日期时间栏位

Magento的2中,后台可以透过UI conponent产生的布局跟电网,栏位也有多种选择,像是文本,文本区域,选择等等,但是日期时间栏位显示的时候仅有日期选择器的部分,没有时间,导致实务应用上的不便。这也是Magento的问题之一,今天我们就来看看怎么解决吧!

 

1.新增属性

通常会写在InstallData.php内,今天我们就不特别说明新增的部分但是在新增的时候,需要给予input_renderer选项,里面填写自定义的Class。

$eavSetup->addAttribute(
          MagentoCatalogModelProduct::ENTITY,
           'datetime_example',
               'label' => 'datetime example',
               'type' => 'datetime',
               'input' => 'date',
               'input_renderer' => Datetime::class,
               'class' => 'validate-date',
               'backend' => Startdate::class,
               'required' => false,
               'global' => ScopedAttributeInterface::SCOPE_GLOBAL,
               'visible' => true,
               'searchable' => false,
               'filterable' => false,
               'filterable_in_search' => false,
               'visible_in_advanced_search' => false,
               'comparable' => false,
               'visible_on_front' => false,
               'used_in_product_listing' => false,
               'unique' => false 
       );

2.自定义类

这边的class个人是习惯放置于Ui DataProvider Product Form Modifier这个数据夹内,当然你也可以放置在自己喜欢的名字空间,而另外要注意的是,FIELD_CODE常数内的代码就是属性代码,一定要跟刚刚设定的一样。

 


<?php

namespace VendorExtensionUiDataProviderProductFormModifier;
use MagentoCatalogUiDataProviderProductFormModifierAbstractModifier;
use MagentoFrameworkStdlibArrayManager;
/**
* Class Datetime
* @package VendorExtensionUiDataProviderProductFormModifier
*/
class Datetime extends AbstractModifier
{
   const FIELD_CODE = 'datetime_example';
   /**
    * @param ArrayManager $arrayManager
    */
   public function __construct(
       ArrayManager $arrayManager
   )
   {
       $this->arrayManager = $arrayManager;
   }
   /**
    * {@inheritdoc}
    */
   public function modifyMeta(array $meta)
   {
       $meta = $this->enableTime($meta);
       return $meta;
   }
   /**
    * {@inheritdoc}
    */
   public function modifyData(array $data)
   {
       return $data;
   }
   /**
    * @param array $meta
    * @return array
    */
   protected function enableTime(array $meta)
   {
       $elementPath = $this->arrayManager->findPath(self::FIELD_CODE, $meta, null, 'children');
       $containerPath = $this->arrayManager->findPath(static::CONTAINER_PREFIX . self::FIELD_CODE, $meta, null, 'children');
       if (!$elementPath) return $meta;
       $meta = $this->arrayManager->merge(
           $containerPath,
           $meta,
           [
               'children' => [
                   self::FIELD_CODE => [
                       'arguments' => [
                           'data' => [
                               'config' => [
                                   'default' => '',
                                   'options' => [
                                       'dateFormat' > 'Y-m-d',
                                       'timeFormat' => 'HH:mm:ss',
                                       'showsTime' => true
                                   ]
                               ],
                           ],
                       ],
                   ]
               ]
           ]
       );

       return $meta;
   }
}

 

3.使用修饰符重新定义栏位

有了栏位资料之后,需要使用改性剂来取代原本的设定,首先要建立等/ adminhtml / di.xml 并且贴上以下程式,这边除了要在类栏位指定刚刚新增的类之外,还必须在项目的名称里面写入属性代码,如此一来才能完成定义。

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
   <virtualType name="MagentoCatalogUiDataProviderProductFormModifierPool">
       <arguments>
           <argument name="modifiers" xsi:type="array">
               <item name="datetime_example" xsi:type="array">
                   <item name="class" xsi:type="string">VendorExtensionUiDataProviderProductFormModifierDatetime</item>
                   <item name="sortOrder" xsi:type="number">100</item>
               </item>
           </argument>
       </arguments>
   </virtualType>
</config>

 

4.更改前的Datatime picker

 

5.更改后的Datatime选取器

适用版本

  • Magento 2.1,2.2

上一篇:Magento 2商品排序方式设定教学 下一篇:在Magento显示原生SQL语法
  • 版权声明:内容来自互联网不代表本站观点,2018-05-20发表于 magento教程栏目。
  • 转载请注明: 解决Magento 2后台无法显示日期时间栏位| magento教程 +复制链接