0

データベースに追加したテーブルで CRUD 操作を処理するために必要なすべてのファイルと構造があります。Edit.phpファイルには、getHeaderText()テーブルに新しい値のセットを変更または追加するときに編集ページに表示されるヘッダーを変更する機能があります。

私が抱えている問題は、次のコードが評価されるときです。

if (Mage::registry('allpages_data')  && Mage::registry('allpages_data')->getId())

常に戻るNULLため、常にヘッダーに新しい参照テキストが表示されます。チェックすると、編集時に現在の値のセットが正しく編集され、新規追加時に新しいセットが追加されます。いくつかの解決策を試しましたが、どれもうまくいきませんでした。

2回目の編集
ここに私のallpages_datavar_dumpがあります:

object(Dts_Allpages_Model_Referencedpages)[412]
  protected '_eventPrefix' => string 'core_abstract' (length=13)
  protected '_eventObject' => string 'object' (length=6)
  protected '_resourceName' => string 'allpages/referencedpages' (length=24)
  protected '_resource' => null
  protected '_resourceCollectionName' => string 'allpages/referencedpages_collection' (length=35)
  protected '_cacheTag' => boolean false
  protected '_dataSaveAllowed' => boolean true
  protected '_isObjectNew' => null
  protected '_data' => 
    array
      empty
  protected '_hasDataChanges' => boolean false
  protected '_origData' => null
  protected '_idFieldName' => string 'referencedpages_id' (length=18)
  protected '_isDeleted' => boolean false
  protected '_oldFieldsMap' => 
    array
      empty
  protected '_syncFieldsMap' => 
    array
      empty

関数を使用したEdit.phpコード ファイルを次に示します。getHeaderText

<?php
class Dts_Allpages_Block_Adminhtml_Allpagesbackend_Edit extends Mage_Adminhtml_Block_Widget_Form_Container
{
    public function __construct(){
        parent::__construct();

        $id = $this->getRequest()->getParam('id');
        $this->_objectId = 'id';
        $this->_blockGroup = 'allpages';
        $this->_controller = 'adminhtml_allpagesbackend';
        $this->_mode = 'edit';

        $this->_addButton('save_and_continue', array(
                'label' => Mage::helper('adminhtml')->__('Save And Continue Edit'),
                'onclick' => 'saveAndContinueEdit()',
                'class' => 'save',
        ), -100);

        $this->_updateButton('save', 'label', Mage::helper('allpages')->__('Save reference'));

        $this->_formScripts[] = "
                        function toggleEditor() {
                            if (tinyMCE.getInstanceById('form_content') == null) {
                            tinyMCE.execCommand('mceAddControl', false, 'edit_form');
                                } else {
                                    tinyMCE.execCommand('mceRemoveControl', false, 'edit_form');
                                    }
                                }

                        function saveAndContinueEdit(){
                            editForm.submit($('edit_form').action+'back/edit/');
                        }
                ";
    }

    public function getHeaderText()
    {
        if (Mage::registry('allpages_data')  && Mage::registry('allpages_data')->getId()){
            return Mage::helper('allpages')->__('Edit reference');
        } else {
            return Mage::helper('allpages')->__('New reference');
        }
    }

    protected function _prepareLayout()
    {
        if ($this->_blockGroup && $this->_controller && $this->_mode) {
            $this->setChild('form', $this->getLayout()->createBlock($this->_blockGroup . '/' . $this->_controller . '_' . $this->_mode . '_form'));
        }
        return parent::_prepareLayout();
    }
}

そして、ここに私のForm.phpファイルコードがあります:

<?php
class Dts_Allpages_Block_Adminhtml_Allpagesbackend_Edit_Form extends Mage_Adminhtml_Block_Widget_Form
{
    protected function _prepareForm()
    {
        $id = $this->getRequest()->getParam('id');
        $params = array('id' => $this->getRequest()->getParam('id'));

        if (Mage::getSingleton('adminhtml/session')->getdata())
        {
            $data = Mage::getSingleton('adminhtml/session')->getdata();
            Mage::getSingleton('adminhtml/session')->getdata(null);
        }
        elseif (Mage::registry('allpages_data'))
        {
            $data = Mage::registry('allpages_data')->getdata();
        }
        else
        {
            $data = array();
        }

//      $entireregistryArray = Mage::getRegistry();
//      var_dump($entireregistryArray);

        $form = new Varien_Data_Form(
                array(
                        'id' => 'edit_form',
                        'action' => $this->getUrl('*/*/save', $params),
                        'method' => 'post',
                        'enctype' => 'multipart/form-data',
                    )
                );

        $form->setUseContainer(true);
        $this->setForm($form);

        $fieldset = $form->addFieldset('allagesbackend_form', array(
                                'legend' =>Mage::helper('allpages')->__('References pages Information')
                            )
                    );

        $fieldset->addField('current_url', 'text', array(
                        'label'     => Mage::helper('allpages')->__('Url'),
                        'class'     => 'required-entry',
                        'required'  => true,
                        'name'      => 'current_url',
                        'note'      => Mage::helper('allpages')->__('The url of the reference.'),
                    )
            );

        $fieldset->addField('search_engine', 'text', array(
                        'label'     => Mage::helper('allpages')->__('Engine'),
                        'class'     => 'required-entry',
                        'required'  => true,
                        'name'      => 'search_engine',
                    )
            );

        $fieldset->addField('description', 'text', array(
                        'label'     => Mage::helper('allpages')->__('Description'),
                        'class'     => 'required-entry',
                        'required'  => true,
                        'name'      => 'description',
                    )
            );

        $form->setValues($data);

        return parent::_prepareForm();
    }
}

念のため、AlanStorm のCommerceBugツールを使用しています。

最初の編集
これは私のActionControllerコードの一部です。@benmarksによって提案されてMage::register('allpages_date')いるように、呼び出しの前に呼び出しますrenderLayout()

public function editAction()
    {
        $id = $this->getRequest()->getParam('referencedpages_id', null);
        $model = Mage::getModel('allpages/referencedpages');

        if ($id) {
            $model->load($id);
        }

        if ($model->getId() || $id == 0) {
            $data = Mage::getSingleton('adminhtml/session')->getFormData(true);
            if ($data) {
                $model->setData($data)->setId($id);
            }
        } else {
            Mage::getSingleton('adminhtml/session')->addError(Mage::helper('allpages')->__('Referencedpages table does not exist'));
            $this->_redirect('*/*/');
        }

        Mage::register('allpages_data', $model);

        $this->loadLayout();
        $this->getLayout()->getBlock('head')->setCanLoadExtJs(true);
        $this->renderLayout();
    }
4

1 に答える 1

1

以前にアクション コントローラーでそのレジストリ キーを設定していない場合はrenderLayout()、ブロック レンダリングに役立つ方法で設定されていません。他の変数と同じように考えてください - そこには魔法はありません。

于 2012-10-02T11:51:35.547 に答える