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