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
