magento saveAction - 适合初学者

时间:2015-06-03 10:44:58

标签: php magento

我是Magento的初学者,请耐心等待... 我正在为我的网站创建一个简单的扩展程序,以便在adminhtml中为我的标签添加自定义字段。自定义字段只是我需要识别特定Z块(cms块扩展)的数字,以便我可以将其作为窗口小部件访问并在标记“类别”的前端显示。

我创建了一个正常工作的自定义模块:我使用$ fieldset在表单中设置了一个字段,并使用了扩展的TagController.php,两者都在使用(我做了一个简单的试验,看看它们是否已经过识别)。但是,我不知道如何将我的自定义字段保存到DB(是否修改saveAction就足够了,我还没有正确完成,或者我需要添加自定义模型或sql安装)。

对于“基本”问题感到抱歉,但我是新手,并且主要完成了前端开发(所以我的扩展知识很有限)。

感谢任何可以提供帮助的人... 克劳迪亚

新标签表格:

public function __construct()
{
    parent::__construct();
    $this->setId('tag_form');
    $this->setTitle(Mage::helper('tag')->__('Block Information'));
}

/**
 * Prepare form
 *
 * @return Mage_Adminhtml_Block_Widget_Form
 */
protected function _prepareForm()
{
    $model = Mage::registry('tag_tag');

    $form = new Varien_Data_Form(
        array('id' => 'edit_form', 'action' => $this->getData('action'), 'method' => 'post')
    );

    $fieldset = $form->addFieldset('base_fieldset',
        array('legend'=>Mage::helper('tag')->__('General Information')));

    if ($model->getTagId()) {
        $fieldset->addField('tag_id', 'hidden', array(
            'name' => 'tag_id',
        ));
    }

    $fieldset->addField('form_key', 'hidden', array(
        'name'  => 'form_key',
        'value' => Mage::getSingleton('core/session')->getFormKey(),
    ));

    $fieldset->addField('store_id', 'hidden', array(
        'name'  => 'store_id',
        'value' => (int)$this->getRequest()->getParam('store')
    ));

    $fieldset->addField('name', 'text', array(
        'name' => 'tag_name',
        'label' => Mage::helper('tag')->__('Tag Name'),
        'title' => Mage::helper('tag')->__('Tag Name'),
        'required' => true,
        'after_element_html' => ' ' . Mage::helper('adminhtml')->__('[GLOBAL]'),
    ));

     $fieldset->addField('zblock', 'text', array(
        'name' => 'zblock_id',
        'label' => Mage::helper('tag')->__('Z-Block Id'),
        'title' => Mage::helper('tag')->__('Z-Block Id'),
        'required' => true,
        'after_element_html' => ' ' . Mage::helper('adminhtml')->__('[GLOBAL]'),
    ));

    $fieldset->addField('status', 'select', array(
        'label' => Mage::helper('tag')->__('Status'),
        'title' => Mage::helper('tag')->__('Status'),
        'name' => 'tag_status',
        'required' => true,
        'options' => array(
            Mage_Tag_Model_Tag::STATUS_DISABLED => Mage::helper('tag')->__('Disabled'),
            Mage_Tag_Model_Tag::STATUS_PENDING  => Mage::helper('tag')->__('Pending'),
            Mage_Tag_Model_Tag::STATUS_APPROVED => Mage::helper('tag')->__('Approved'),
        ),
        'after_element_html' => ' ' . Mage::helper('adminhtml')->__('[GLOBAL]'),
    ));

    $fieldset->addField('base_popularity', 'text', array(
        'name' => 'base_popularity',
        'label' => Mage::helper('tag')->__('Base Popularity'),
        'title' => Mage::helper('tag')->__('Base Popularity'),
        'after_element_html' => ' ' . Mage::helper('tag')->__('[STORE VIEW]'),
    ));

    if (!$model->getId() && !Mage::getSingleton('adminhtml/session')->getTagData() ) {
        $model->setStatus(Mage_Tag_Model_Tag::STATUS_APPROVED);
    }

    if ( Mage::getSingleton('adminhtml/session')->getTagData() ) {
        $form->addValues(Mage::getSingleton('adminhtml/session')->getTagData());
        Mage::getSingleton('adminhtml/session')->setTagData(null);
    } else {
        $form->addValues($model->getData());
    }

    $this->setForm($form);
    return parent::_prepareForm();
}

新控制器:

public function saveAction()
{
    if ($postData = $this->getRequest()->getPost()) {
        if (isset($postData['tag_id'])) {
            $data['tag_id'] = $postData['tag_id'];
        }

        $data['name']               = trim($postData['tag_name']);
        $data['zblock']             = $postData['zblock_id'];
        $data['status']             = $postData['tag_status'];
        $data['base_popularity']    = (isset($postData['base_popularity'])) ? $postData['base_popularity'] : 0;
        $data['store']              = $postData['store_id'];

        if (!$model = $this->_initTag()) {
            Mage::getSingleton('adminhtml/session')->addError(Mage::helper('adminhtml')->__('Wrong tag was specified.'));
            return $this->_redirect('*/*/index', array('store' => $data['store']));
        }

        $model->addData($data);

        if (isset($postData['tag_assigned_products'])) {
            $productIds = Mage::helper('adminhtml/js')->decodeGridSerializedInput(
                $postData['tag_assigned_products']
            );
            $model->setData('tag_assigned_products', $productIds);
        }

        try {
            $model->save();
            Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('adminhtml')->__('The tag has been saved.'));
            Mage::getSingleton('adminhtml/session')->setTagData(false);

            if (($continue = $this->getRequest()->getParam('continue'))) {
                return $this->_redirect('*/tag/edit', array('tag_id' => $model->getId(), 'store' => $model->getStoreId(), 'ret' => $continue));
            } else {
                return $this->_redirect('*/tag/' . $this->getRequest()->getParam('ret', 'index'));
            }
        } catch (Exception $e) {
            Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
            Mage::getSingleton('adminhtml/session')->setTagData($data);

            return $this->_redirect('*/*/edit', array('tag_id' => $model->getId(), 'store' => $model->getStoreId()));
        }
    }

    return $this->_redirect('*/tag/index', array('_current' => true));

}

我想添加的自定义字段是“zblock”...谢谢,再次,请耐心等待! :)

1 个答案:

答案 0 :(得分:0)

首先在数据库表中添加字段。 例如,如果要添加自定义表。

 ALTER TABLE myCustomModuleTable ADD COLUMN 'myCustomField' int(10);

Thenafter,在您的控制器操作中,获取该表的模型对象并设置该字段。

如果要在现有表格行中添加数据:

 $value = 6;
    $rowInWhichIWantToSave = Mage:getModel('companyname/modulename')->load($rowId);
    $rowInWhichIWantToSave->setData('myCustomField',$value)->save();

如果要添加新行:

$value = 6;
$rowInWhichIWantToSave = Mage:getModel('companyname/modulename');
$rowInWhichIWantToSave->setData('myCustomField',$value)->save();

希望这会有所帮助!!