2012-05-15 2 views
4

Привет, Я создаю свой первый раздел для моего расширения. Я создал меню, которое ссылается на страницу, отображающую сетку. Проблема заключается в том, когда вы щелкаете через для редактирования записи, ее отображение этой ошибкиMagento admin issue

Fatal error: Call to a member function setData() on a non-object in /Applications/MAMP/htdocs/theBookClub/app/code/core/Mage/Adminhtml/Block/Widget/Form/Container.php on line 129

Для жизни меня я не могу видеть никаких ссылок ни в одном из соответствующих файлов

class Namespace_Bookshelf_Block_Adminhtml_Bookshelf_Edit extends Mage_Adminhtml_Block_Widget_Form_Container 
{ 
    public function __construct() 
{ 
    parent::__construct(); 

    $this->_objectId = 'id'; 
    $this->_blockGroup = 'bookshelf'; 
    $this->_controller = 'bookshelf_admin'; 
    $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('bookshelf')->__('Save Example')); 

    $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('example_data') && Mage::registry('example_data')->getId()) 
    { 
     return Mage::helper('bookshelf')->__('Edit Example "%s"', $this->htmlEscape(Mage::registry('example_data')->getName())); 
    } else { 
     return Mage::helper('bookshelf')->__('New Example'); 
    } 
} 

и это

class Namespace_Bookshelf_Block_Adminhtml_Bookshelf_Grid extends    Mage_Adminhtml_Block_Widget_Grid { 

public function __construct() { 
    parent::__construct(); 
    $this->setId('bookshelf_grid'); 
    $this->setDefaultSort('bookshelf_id'); 
    $this->setDefaultDir('desc'); 
    $this->setSaveParametersInSession(true); 
} 

protected function _prepareCollection() { 
    $collection = Mage::getModel('bookshelf/bookshelf')->getCollection(); 
    $this->setCollection($collection); 
    return parent::_prepareCollection(); 
} 

protected function _prepareColumns() { 
    $this->addColumn('bookshelf_id', array(
     'header' => Mage::helper('bookshelf')->__('ID'), 
     'align' => 'right', 
     'width' => '50px', 
     'index' => 'bookshelf_id', 
    )); 

    $this->addColumn('customer_id', array(
     'header' => Mage::helper('bookshelf')->__('Name'), 
     'align' => 'left', 
     'index' => 'customer_id', 
    )); 

    $this->addColumn('bookshelf_name', array(
     'header' => Mage::helper('bookshelf')->__('Name'), 
     'align' => 'left', 
     'index' => 'bookshelf_name', 
    )); 



    return parent::_prepareColumns(); 
} 





public function getRowUrl($row) { 
    return $this->getUrl('*/*/edit', array('id' => $row->getId())); 
} 

}

и это

class Newdaymedia_Bookshelf_Block_Adminhtml_Bookshelf extends 
Mage_Adminhtml_Block_Widget_Grid_Container 
{ 
public function __construct() 
{ 
$this->_controller = 'bookshelf_admin'; 
$this->_blockGroup = 'bookshelf'; 
$this->_headerText = Mage::helper('bookshelf')->__('Item Manager'); 
$this->_addButtonLabel = Mage::helper('bookshelf')->__('Add Item'); 
parent::__construct(); 
} 

protected function _prepareLayout() 
{ 
    $this->setChild('grid', 
     $this->getLayout()->createBlock($this->_blockGroup.'/' . $this->_controller . '_grid', 
     $this->_controller . '.grid')->setSaveParametersInSession(true)); 
    return parent::_prepareLayout(); 
} 
} 

Любая помощь была бы с благодарностью принята!

NEW

class Namespace_Bookshelf_Block_Adminhtml_Bookshelf_Edit_Form extends  Mage_Adminhtml_Block_Widget_Form 
{ 
protected function _prepareForm() 
{ 
    if (Mage::getSingleton('adminhtml/session')->getExampleData()) 
    { 
     $data = Mage::getSingleton('adminhtml/session')->getExamplelData(); 
     Mage::getSingleton('adminhtml/session')->getExampleData(null); 
    } 
    elseif (Mage::registry('example_data')) 
    { 
     $data = Mage::registry('example_data')->getData(); 
    } 
    else 
    { 
     $data = array(); 
    } 
    Mage::log("this is the form class"); 
    $form = new Varien_Data_Form(array(
      'id' => 'edit_form', 
      'action' => $this->getUrl('*/*/save', array('id' => $this->getRequest()->getParam('id'))), 
      'method' => 'post', 
      'enctype' => 'multipart/form-data', 
    )); 

    $form->setUseContainer(true); 

    $this->setForm($form); 

    $fieldset = $form->addFieldset('example_form', array(
     'legend' =>Mage::helper('bookshelf')->__('Example Information') 
    )); 

    $fieldset->addField('name', 'text', array(
     'label'  => Mage::helper('bookshelf')->__('Name'), 
     'class'  => 'required-entry', 
     'required' => true, 
     'name'  => 'name', 
     'note'  => Mage::helper('awesome')->__('The name of the example.'), 
    )); 

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

    $fieldset->addField('other', 'text', array(
     'label'  => Mage::helper('bookshelf')->__('Other'), 
     'class'  => 'required-entry', 
     'required' => true, 
     'name'  => 'other', 
    )); 

    $form->setValues($data); 

    return parent::_prepareForm(); 
} 

}

+0

Скорее всего, первый файл, в списке есть вопрос, вопрос наследования может быть, как УстановитьДанные() не представляется определить, мое предположение в 'метод getHeaderText' , НТН. – B00MER

ответ

1

Вы должны иметь помощника, созданный для вашего модуля (даже если он ничего не делает). В справочном каталоге вашего модуля создайте файл с именем Data.php и создайте в нем класс Namespace_Module_Helper_Data, который расширяет Mage_Core_Helper_Abstract.

Я думаю, что это должно помочь устранить проблему.

+0

К сожалению, у меня уже есть помощник для моего продления, понятия не имею, что вызывает эту проблему. – jamessy

+0

Что находится в строке 129 в /Applications/MAMP/htdocs/theBookClub/app/code/core/Mage/Adminhtml/Block/Widget/Form/Container.php? –

+0

его эта строка $ this-> getChild ('form') -> setData ('action', $ this-> getSaveUrl()); – jamessy

0

Предположим, что ваш контроллер Adminhtml находится под пространство имен/MODULENAME/Контроллеры/Adminhtml/BookshelfController.php

попробовать $ это -> _ контроллер = 'adminhtml_bookshelf'; на вашем контейнере формы.

7

Это может решить проблему:

В вашей форме контейнера класса:

Namespace_Bookshelf_Block_Adminhtml_Bookshelf_Edit 
extends Mage_Adminhtml_Block_Widget_Form_Container 

Если добавить эти тестовые строки, вы увидите, какой класс формы Magento пытается загрузить

$form_block = $this->_blockGroup . '/' . 
       $this->_controller . '_' . 
       $this->_mode . 
       '_form'; 
echo $form_block; 

Для этого, чтобы работать с вашим кодом (вверху), ваш класс:

Namespace_Bookshelf_Block_Adminhtml_Bookshelf_Edit_Form 

должен повторить тестовое значение:

bookshelf/adminhtml_bookshelf_edit_form 

и должны быть в следующем FilePath:

app/code/local/Namespace/Bookshelf/Block/Adminhtml/Bookshelf/Edit/Form.php 

Вы, возможно, придется настроить имя класса (ов), или FilePath, или оба , чтобы заставить его работать.

Удачи вам!

+0

Добавление класса Form.php помогло мне. Это должно быть отмечено как ответ. –

+0

Имейте в виду также проверить наличие опечаток, поскольку их легко упускать из виду. Если вы уверены, что псевдоним класса блока верен, дважды проверьте такие вещи, как '$ this -> _ blockgroup' vs' $ this -> _ blockGroup' – pspahn

0

Важно уточнить, что $ this -> _ controller не является фактическим именем контроллера, а имя класса блока и $ this -> _ blockGroup - это фактически имя модуля.

так попробовать:

$this->_blockGroup = 'namespace_bookshelf';

$this->_controller = 'adminhtml_bookshelf';