代码之家  ›  专栏  ›  技术社区  ›  Hervé Guétin

将日期选择器添加到系统.xml在自定义模块上

  •  6
  • Hervé Guétin  · 技术社区  · 14 年前

    我试图从下面的线索中获得灵感: Magento - Add a button to system.xml with method attached to it

    但没有成功。

    我确信这是一个创建一个自定义html字段的正确块或方法的问题,但我无法读取Magento矩阵:)

        <?php
                class Namespace_Module_Block_Datefield extends Mage_Adminhtml_Block_System_Config_Form_Field {
    
                 protected function _getElementHtml(Varien_Data_Form_Element_Abstract $element) {
        // ----> Am I wrong in calling ..._Abstract?  Should I call Varien_Data_Form_Element_Date? I've tried but no success either...
    
    $this->setElement($element);
    
                  $html = // ------------------> what to put here? Call a block or some other method?
                          ->setFormat('d-m-Y')
                          ->setLabel($this->__('Choose date'))
                          ->toHtml();
    
                  return $html;
                 }
                }    
                ?>
    

    谢谢。 赫夫

    2 回复  |  直到 7 年前
        1
  •  15
  •   Hervé Guétin    10 年前

    2014年2月19日编辑:新增验证

    我发现我认为这是一种更优雅的方式。实际上,satrun77方法是可以的,但是我们必须将一个文件放在Varien/Data/Form/Element/中,如果其他人不小心使用了相同的文件/类名,这个文件可能会被覆盖。此外,这种方法将文件放在模块目录中,我认为这比将文件分布在目录树上要好。

    在系统.xml:

    <?xml version="1.0" encoding="UTF-8"?>
       <config>
       ....
           <fields>
           ...
              <run translate="label">
               <label>Date</label>
               <frontend_type>text</frontend_type> <!-- Use text instead of "myDateSelection" -->
               <frontend_model>module/adminhtml_system_config_date</frontend_model> <!-- Call a module specific renderer model -->
               <sort_order>20</sort_order>
               <show_in_default>1</show_in_default>
               <show_in_website>1</show_in_website>
               <validate>required-entry</validate> <!-- Optional -->
               <show_in_store>1</show_in_store>
              </run>
           </fields>
       ...
       </config>
    

    创建新文件:

    app/code/[local,community]/Namespace/Module/Block/Adminhtml/System/Config/Date

    class Namespace_Module_Block_Adminhtml_System_Config_Date extends Mage_Adminhtml_Block_System_Config_Form_Field
    {
        protected function _getElementHtml(Varien_Data_Form_Element_Abstract $element)
        {
            $date = new Varien_Data_Form_Element_Date;
            $format = Mage::app()->getLocale()->getDateFormat(Mage_Core_Model_Locale::FORMAT_TYPE_SHORT);
    
            $data = array(
                'name'      => $element->getName(),
                'html_id'   => $element->getId(),
                'image'     => $this->getSkinUrl('images/grid-cal.gif'),
            );
            $date->setData($data);
            $date->setValue($element->getValue(), $format);
            $date->setFormat(Mage::app()->getLocale()->getDateFormat(Mage_Core_Model_Locale::FORMAT_TYPE_SHORT));
            $date->setClass($element->getFieldConfig()->validate->asArray());
            $date->setForm($element->getForm());
    
            return $date->getElementHtml();
        }
    }
    
        2
  •  2
  •   Roman Snitko    10 年前

    在中创建类文件 app/code/local/Varien/Data/Form/Element/

    class Varien_Data_Form_Element_MyDateSelection extends Varien_Data_Form_Element_Date
    {
        public function getElementHtml()
        {
            // define image url
            $this->setImage(Mage::getDesign()->getSkinUrl('images/grid-cal.gif'));
            // define date format
            $this->setFormat('yyyy-MM-dd');
    
            return parent::getElementHtml();
        }
    }
    

    模块内部系统.xml

    <?xml version="1.0" encoding="UTF-8"?>
       <config>
       ....
           <fields>
           ...
              <run translate="label">
               <label>Run now</label>
               <frontend_type>myDateSelection</frontend_type>
               <sort_order>20</sort_order>
               <show_in_default>1</show_in_default>
               <show_in_website>1</show_in_website>
               <show_in_store>1</show_in_store>
              </run>
           </fields>
       ...
       </config>
    

    在lib/文件夹或app/Mage/Core/文件夹中放置自定义代码并不是为Magento创建自定义代码的最佳方法。这些文件夹用于核心代码,而不是自定义代码。

    希望这有帮助