2015-02-15 1 views
0

Я использую Magento 1.9.0.1.Magento - Adminhtml - Создание новой формы редактирования, но получение пустых полей

Я создал таблицу сетки в пользовательской странице администратора и позвольте мне показать вам снимок экрана этой страницы:

enter image description here

Когда я нажимаю на строке вот скриншот:

enter image description here

Как вы можете видеть поля пусты ... Это проблема ...

Позвольте мне ш вы все код, я думаю, что это важно для решения проблемы.

Вот что я имею в: /app/code/community/VivasIndustries/SmsNotification/etc/config.xml:

<?xml version="1.0"?> 
<config> 
    <modules> 
    <VivasIndustries_SmsNotification> 
     <version>0.1.0</version> 
    </VivasIndustries_SmsNotification> 
    </modules> 
    <global> 
    <models> 
     <smsnotification> 
      <class>VivasIndustries_SmsNotification_Model</class> 
      <resourceModel>vivasindustries_smsnotification_resource</resourceModel> 
     </smsnotification> 
     <vivasindustries_smsnotification_resource> 
     <class>VivasIndustries_SmsNotification_Model_Resource</class> 
     <entities> 
      <smsnotification> 
      <table>VivasIndustries_SmsNotification</table> 
      </smsnotification> 
     </entities> 
     </vivasindustries_smsnotification_resource> 
    </models> 
    <resources> 
     <smsnotification_setup> 
      <setup> 
       <module>VivasIndustries_SmsNotification</module> 
      </setup> 
      <connection> 
       <use>core_setup</use> 
      </connection> 
     </smsnotification_setup> 
     <smsnotification_read> 
      <connection> 
       <use>core_read</use> 
      </connection> 
     </smsnotification_read> 
     <smsnotification_write> 
      <connection> 
       <use>core_write</use> 
      </connection> 
     </smsnotification_write> 
    </resources>  
    <events> 
     <sales_order_save_after> 
      <observers> 
       <vivasindustries_smsnotification> 
        <class>smsnotification/observer</class> 
        <method>orderSaved</method> 
       </vivasindustries_smsnotification> 
      </observers> 
     </sales_order_save_after> 
    </events> 
    <helpers> 
     <smsnotification> 
      <class>VivasIndustries_SmsNotification_Helper</class> 
     </smsnotification> 
    </helpers> 
    <blocks> 
     <smsnotification> 
      <class>VivasIndustries_SmsNotification_Block</class> 
     </smsnotification> 
    </blocks> 
    </global> 
    <adminhtml> 
    <acl> 
     <resources> 
      <all> 
       <title>Allow Everything</title> 
      </all> 
      <admin> 
       <children> 
        <system> 
         <children> 
          <config> 
           <children> 
            <vivas> 
             <title>Vivas - All</title> 
            </vivas> 
           </children> 
          </config> 
         </children> 
        </system> 
       </children> 
      </admin> 
     </resources> 
    </acl> 
    <layout> 
     <updates> 
      <smsnotification> 
       <file>smsnotification.xml</file> 
      </smsnotification> 
     </updates> 
    </layout> 
    </adminhtml> 
    <admin> 
     <routers> 
      <adminhtml> 
       <args> 
        <modules> 
         <VivasIndustries_SmsNotification before="Mage_Adminhtml">VivasIndustries_SmsNotification_Adminhtml</VivasIndustries_SmsNotification> 
        </modules> 
       </args> 
      </adminhtml> 
     </routers> 
    </admin> 
</config> 

Вот что я имею в:/приложения/код/​​сообщества/VivasIndustries /SmsNotification/controllers/Adminhtml/SmsorderstatusesController.php:

<?php 

class VivasIndustries_SmsNotification_Adminhtml_SmsorderstatusesController extends Mage_Adminhtml_Controller_Action 
{ 
    public function indexAction() 
    { 
     $this->_title($this->__('SMS Center'))->_title($this->__('SMS Center')); 
     $this->loadLayout(); 
     $this->_setActiveMenu('vivassms'); 
     $this->_addContent($this->getLayout()->createBlock('smsnotification/adminhtml_sms_status')); 
     $this->renderLayout(); 
    } 

    public function gridAction() 
    { 
     $this->loadLayout(); 
     $this->getResponse()->setBody(
      $this->getLayout()->createBlock('smsnotification/adminhtml_sms_status_grid')->toHtml() 
     ); 
    } 

    public function newAction() 
    { 
     $this->loadLayout(); 
     $this->_setActiveMenu('vivassms'); 
     $this->renderLayout(); 
    } 



    public function editAction() 
    { 
     /** 
     * Retrieve existing brand data if an ID was specified. 
     * If not, we will have an empty brand entity ready to be populated. 
     */ 
     $brand = Mage::getModel('smsnotification/smsnotification'); 



     // process $_POST data if the form was submitted 
     if ($postData = $this->getRequest()->getPost('smsData')) { 
      try { 
       $brand->addData($postData); 
       $brand->save(); 

       $this->_getSession()->addSuccess(
        $this->__('The brand has been saved.') 
       ); 

       // redirect to remove $_POST data from the request 
       return $this->_redirect(
        'smsorderstatuses/edit', 
        array('id' => $brand->getId()) 
       ); 
      } catch (Exception $e) { 
       Mage::logException($e); 
       $this->_getSession()->addError($e->getMessage()); 
      } 

      /** 
      * If we get to here, then something went wrong. Continue to 
      * render the page as before, the difference this time being 
      * that the submitted $_POST data is available. 
      */ 
     } 

     // Make the current brand object available to blocks. 
     Mage::register('sms_brand', $brand); 

     // Instantiate the form container. 
     $brandEditBlock = $this->getLayout()->createBlock(
      'smsnotification/adminhtml_sms_status_edit' 
     ); 

     // Add the form container as the only item on this page. 
     $this->loadLayout() 
      ->_addContent($brandEditBlock) 
      ->renderLayout(); 
    } 

    public function deleteAction() 
    { 
     $smsnotification = Mage::getModel('vivasindustries_smsnotification/smsnotification'); 

     if ($smsnotificationId = $this->getRequest()->getParam('id', false)) { 
      $smsnotification->load($smsnotificationId); 
     } 

     if (!$smsnotification->getId()) { 
      $this->_getSession()->addError(
       $this->__('This smsnotification no longer exists.') 
      ); 
      return $this->_redirect(
       '*/*/index' 
      ); 
     } 

     try { 
      $smsnotification->delete(); 

      $this->_getSession()->addSuccess(
       $this->__('The smsnotification has been deleted.') 
      ); 
     } catch (Exception $e) { 
      Mage::logException($e); 
      $this->_getSession()->addError($e->getMessage()); 
     } 

     return $this->_redirect(
      '*/*/index' 
     ); 
    } 

    protected function _initAction() 
    { 
     $this->loadLayout() 
      // Make the active menu match the menu config nodes (without 'children' inbetween) 
      ->_setActiveMenu('vivassms') 
      ->_title($this->__('SMS Rule'))->_title($this->__('SMS Center')) 
      ->_addBreadcrumb($this->__('SMS Rule'), $this->__('SMS Rule')); 

     return $this; 
    } 


    protected function _isAllowed() 
    { 
     return Mage::getSingleton('admin/session')->isAllowed('sales/foo_bar_baz'); 
    } 
} 

Вот что я имею в: /app/code/community/VivasIndustries/SmsNotification/Model/Smsnotification.php:

<?php 
class VivasIndustries_SmsNotification_Model_Smsnotification extends Mage_Core_Model_Abstract 
{ 
    public function _construct() 
    { 
     parent::_construct(); 
     $this->_init('smsnotification/smsnotification'); 
    } 

} 

Вот что я имею в: /app/code/community/VivasIndustries/SmsNotification/Model/Resource/Smsnotification.php:

<?php 
class VivasIndustries_SmsNotification_Model_Resource_Smsnotification extends Mage_Core_Model_Resource_Db_Abstract 
{ 
    /** 
    * Initialize resource model 
    * 
    * @return void 
    */ 
    public function _construct() 
    { 
     $this->_init('smsnotification/smsnotification','id'); 
    } 
} 

Вот что я имею в:/приложения/код/​​сообщества /VivasIndustries/SmsNotification/Model/Resource/Smsnotification/Collection.php:

<?php 
class VivasIndustries_SmsNotification_Model_Resource_Smsnotification_Collection extends Mage_Core_Model_Resource_Db_Collection_Abstract{ 
    protected function _construct(){ 
     $this->_init('smsnotification/smsnotification');  
    } 
} 

Вот что я имею в: /app/code/community/VivasIndustries/SmsNotification/Block/Adminhtml/Sms/Status.php:

<?php 

class VivasIndustries_SmsNotification_Block_Adminhtml_Sms_Status extends Mage_Adminhtml_Block_Widget_Grid_Container 
{ 
    public function __construct() 
    { 
     $this->_blockGroup = 'smsnotification'; 
     $this->_controller = 'adminhtml_sms_status'; 
     $this->_headerText = Mage::helper('smsnotification')->__('Send SMS on Order Status Changes'); 
     $this->_addButtonLabel = Mage::helper('smsnotification')->__('Create new SMS Rule'); 
     parent::__construct(); 
    } 

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



} 

Вот что я имею в: /app/code/community/VivasIndustries/SmsNotification/Block/Adminhtml/Sms/Status/Grid.php:

<?php 

class VivasIndustries_SmsNotification_Block_Adminhtml_Sms_Status_Grid extends Mage_Adminhtml_Block_Widget_Grid 
{ 
    public function __construct() 
    { 
     parent::__construct(); 
     $this->setId('smsnotification_grid'); 
     $this->setDefaultSort('id'); 
     $this->setDefaultDir('DESC'); 
     $this->setSaveParametersInSession(true); 
     $this->setUseAjax(true); 
    } 


    protected function _prepareCollection() 
    { 
     $collection = Mage::getResourceModel('smsnotification/smsnotification_collection'); 
     $this->setCollection($collection); 
     return parent::_prepareCollection(); 
    } 


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

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

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

     $this->addColumn('Date', array(
      'header' => Mage::helper('smsnotification')->__('Date'), 
      'align'  =>'left', 
      'index'  => 'Date', 

     )); 


     return parent::_prepareColumns(); 
    } 

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

Вот что я имею в:/приложение/код/​​сообщества/VivasIndustries/SmsNotification/Block/Adminhtml/Sms/Статус/edit.php:

<?php 
class VivasIndustries_SmsNotification_Block_Adminhtml_Sms_Status_Edit extends Mage_Adminhtml_Block_Widget_Form_Container 
{ 
    protected function _construct() 
    { 
     $this->_blockGroup = 'smsnotification'; 
     $this->_controller = 'adminhtml_sms_status'; 


     $this->_mode = 'edit'; 

     $newOrEdit = $this->getRequest()->getParam('id') 
      ? $this->__('Edit') 
      : $this->__('New'); 
     $this->_headerText = $newOrEdit . ' ' . $this->__('SMS Rule'); 
    } 
} 

Вот что я имею в:/приложение/код/​​сообщества/VivasIndustries/SmsNotification/Block/Adminhtml/Sms /Status/Edit/Form.php:

<?php 
class VivasIndustries_SmsNotification_Block_Adminhtml_Sms_Status_Edit_Form extends Mage_Adminhtml_Block_Widget_Form 
{ 
    protected function _prepareForm() 
    { 
     // Instantiate a new form to display our brand for editing. 
     $form = new Varien_Data_Form(array(
      'id' => 'edit_form', 
      'action' => $this->getUrl(
       'smsorderstatuses/edit', 
       array(
        '_current' => true, 
        'continue' => 0, 
       ) 
      ), 
      'method' => 'post', 
     )); 
     $form->setUseContainer(true); 
     $this->setForm($form); 

     // Define a new fieldset. We need only one for our simple entity. 
     $fieldset = $form->addFieldset(
      'general', 
      array(
       'legend' => $this->__('Brand Details') 
      ) 
     ); 

     $brandSingleton = Mage::getSingleton(
      'smsnotification/smsnotification' 
     ); 

     // Add the fields that we want to be editable. 
     $this->_addFieldsToFieldset($fieldset, array(
      'Receiver' => array(
       'label' => $this->__('Receiver'), 
       'input' => 'text', 
       'required' => true, 
      ), 
      'Phone' => array(
       'label' => $this->__('Phone'), 
       'input' => 'text', 
       'required' => true, 
      ), 
      'Date' => array(
       'label' => $this->__('Date'), 
       'input' => 'text', 
       'required' => true, 
      ), 
     )); 

     return $this; 
    } 

    protected function _addFieldsToFieldset(
     Varien_Data_Form_Element_Fieldset $fieldset, $fields) 
    { 
     $requestData = new Varien_Object($this->getRequest() 
      ->getPost('smsnotificationData')); 

     foreach ($fields as $name => $_data) { 
      if ($requestValue = $requestData->getData($name)) { 
       $_data['value'] = $requestValue; 
      } 

      // Wrap all fields with brandData group. 
      $_data['name'] = "smsnotificationData[$name]"; 

      // Generally, label and title are always the same. 
      $_data['title'] = $_data['label']; 

      // If no new value exists, use the existing brand data. 
      if (!array_key_exists('value', $_data)) { 
       $_data['value'] = $this->_getSms()->getData($name); 
      } 

      // Finally, call vanilla functionality to add field. 
      $fieldset->addField($name, $_data['input'], $_data); 
     } 

     return $this; 
    } 

    protected function _getSms() 
    { 
     if (!$this->hasData('smsnotification')) { 
      // This will have been set in the controller. 
      $smsnotification = Mage::registry('sms_brand'); 

      // Just in case the controller does not register the brand. 
      if (!$smsnotification instanceof 
        VivasIndustries_SmsNotification_Model_Smsnotification) { 
       $smsnotification = Mage::getModel(
        'smsnotification/smsnotification' 
       ); 
      } 

      $this->setData('smsnotification', $smsnotification); 
     } 

     return $this->getData('smsnotification'); 
    } 
} 

Почему поля ввода в форме редактирования пустые и как я могу это исправить?

Заранее благодарен!

ответ

0

Первый в: /приложение/код/​​сообщества/VivasIndustries/SmsNotification/Block/Adminhtml/Sms/Status/Edit/Form.PHP:

Обычно вы можете получить данные с:

$smsBrand = Mage::registry('sms_brand'); 

В вашей форме, вы не заселить feilds вам нужно сделать так (добавить ключ значение в массив, я использую AddField на поле, но я считаю, что это одно и то же).

// Add the fields that we want to be editable. 
    $this->_addFieldsToFieldset($fieldset, array(
     'Receiver' => array(
      'label' => $this->__('Receiver'), 
      'input' => 'text', 
      'required' => true 
      'value'  => $smsBrand->getReciever() 
     ), 
     'Phone' => array(
      'label' => $this->__('Phone'), 
      'input' => 'text', 
      'required' => true, 
      'value'  => $smsBrand->getPhone() 
     ), 
     'Date' => array(
      'label' => $this->__('Date'), 
      'input' => 'text', 
      'required' => true 
      'value'  => $smsBrand->getDate() 
     ), 
    )); 

Additionnally, вам необходимо заполнить зарегистрированную переменную в контроллере (/app/code/community/VivasIndustries/SmsNotification/controllers/Adminhtml/SmsorderstatusesController.php):

// Make the current brand object available to blocks. 
if ($this->getRequest()->getParam('id')) { 
    $brand->load($this->getRequest()->getParam('id')); 
} 

Mage::register('sms_brand', $brand); 

Else sms_brand пусто

+0

Я сделал то, что вы предлагаете, но он не работает для меня ... –

+0

Я отредактировал ответ, см. Последний параграф т. –

+0

Не могли бы вы указать точные файлы, которые мне нужно редактировать, например, путь к ним, потому что я немного запутался. Заранее спасибо! –