2017-07-14 68 views
0

我正在創建一個模塊,並且我想在magento 2中的cms塊中創建一個自定義日期字段。通過UI組件我創建了一個兩個日期字段。在magento 2中的CMS塊中的自定義日期字段

<form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Ui:etc/ui_configuration.xsd"> 
<fieldset name="general">  
     <field name="custom_block_from"> 
      <argument name="data" xsi:type="array"> 
       <item name="config" xsi:type="array"> 
        <item name="sortOrder" xsi:type="number">20</item> 
         <item name="label" xsi:type="string" translate="true">From</item> 
         <item name="dataType" xsi:type="string">string</item> 
         <item name="formElement" xsi:type="string">date</item> 
         <item name="source" xsi:type="string">block</item> 
         <item name="dataScope" xsi:type="string">custom_block_from</item> 
         <item name="validation" xsi:type="array"> 
          <item name="validate-date" xsi:type="boolean">true</item> 
         </item> 
         <item name="options" xsi:type="array"> 
             <item name="dateFormat" xsi:type="string">yyyy-MM-dd</item> 
         </item>     
       </item> 
      </argument> 
     </field> 
     <field name="custom_block_to"> 
      <argument name="data" xsi:type="array"> 
       <item name="config" xsi:type="array"> 
       <item name="sortOrder" xsi:type="number">21</item> 
        <item name="label" xsi:type="string" translate="true">To</item> 
        <item name="dataType" xsi:type="string">string</item> 
        <item name="formElement" xsi:type="string">date</item> 
        <item name="source" xsi:type="string">block</item> 
        <item name="dataScope" xsi:type="string">custom_block_to</item> 
        <item name="validation" xsi:type="array"> 
         <item name="validate-date" xsi:type="boolean">true</item> 
        </item> 
       </item> 
      </argument> 
     </field> 
    </fieldset> 
</form> 

通過升級腳本我也加入CMS塊表中的兩個colummn在Magento這是

public function upgrade(SchemaSetupInterface $setup, ModuleContextInterface $context) 
    { 
     $installer = $setup; 
     $installer->startSetup(); 
     if ($installer->tableExists('cms_block')) { 
      $table = $installer->getTable('cms_block'); 
      $connection = $installer->getConnection(); 
      if (version_compare($context->getVersion(), '1.0.2') < 0) { 
       $connection->addColumn(
        $table, 
        'custom_block_from', 
        [ 
         'type' => Table::TYPE_DATE, 
         'nullable' => true, 
         'comment' => 'date' 
        ] 
       ); 
       $connection->addColumn(
        $table, 
        'custom_block_to', 
        [ 
         'type' => Table::TYPE_DATE, 
         'nullable' => true, 
         'comment' => 'date' 
        ] 
       );    
      } 
      $installer->endSetup(); 
     } 
    } 

現在兩個字段在CMS塊中創建的,但是當我保存的CMS阻止日期字段值不保存在數據庫中。但是,當我通過SQL更改日期字段比該字段從數據庫中獲取值,並顯示在CMS塊編輯和保存再次日期字段後轉爲0000-00-00。

請如果有人幫我這個。 非常感謝

回答

0

日期字段必須在保存到數據庫之前格式化。在你的情況下,

foreach (['custom_block_from', 'custom_block_to'] as $field) { 
    $value = !$object->getData($field) ? null : $this->dateTime->formatDate($object->getData($field)); 
    $object->setData($field, $value); 
} 

這個代碼必須保存cms塊之前調用。

所以,即使你覆蓋類

/vendor/magento/module-cms/Model/ResourceModel/Block.php

使用偏好

<preference for="Magento\Cms\Model\ResourceModel\Block" type="Your_Vendor\Your_Modulename\Model\ResourceModel\Block" /> 

並添加以下

功能
/** 
* Perform operations before object save 
* 
* @param AbstractModel $object 
* @return $this 
* @throws LocalizedException 
*/ 
protected function _beforeSave(AbstractModel $object) 
{ 
    foreach (['custom_block_from', 'custom_block_to'] as $field) { 
     $value = !$object->getData($field) ? null : $this->dateTime->formatDate($object->getData($field)); 
     $object->setData($field, $value); 
    } 

    if (!$this->getIsUniqueBlockToStores($object)) { 
     throw new LocalizedException(
      __('A block identifier with the same properties already exists in the selected store.') 
     ); 
    } 
    return $this; 
} 

或使用事件cms_block_save_before。

相關問題