2015-02-13 5 views
0

Я использую Magento 1.9.0.1, и я работаю с пользовательским расширением.Magento - Adminhtml - Blank Edit Form, не отображающий данные в поля ввода редактирования

Прямо сейчас я застрял на части создания формы администратора. Позволь мне показать тебе.

Вот таблица сетки в пользовательской страницы, которые я создал в админке Извлечение данных из пользовательских данных MySQL таблицы называется VivasIndustries_SmsNotification:

enter image description here

Когда я нажимаю на строку с результатом здесь является то, что я получаю:

enter image description here

Как вы можете видеть поле ввода Receiver, Phone and Date являются пустыми, но они не должны быть пустыми. Это форма редактирования, и эти поля должны содержать данные, напечатанные в строке таблицы сетки. Также, когда я нажимаю save, он должен сохранять отредактированные данные, но он не работает.

Итак, позвольте мне показать вам, что я сделал до сих пор:

Я имею в: /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> 

Вот то, что я имею в: /app/code/community/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() 
    { 
     $this->_initAction(); 

     // Get id if available 
     $id = $this->getRequest()->getParam('id'); 
     $model = Mage::getModel('smsnotification/smsnotification'); 


     $this->_initAction() 
      ->_addBreadcrumb($id ? $this->__('Edit Baz') : $this->__('New Baz'), $id ? $this->__('Edit Baz') : $this->__('New Baz')) 
      ->_addContent($this->getLayout()->createBlock('smsnotification/adminhtml_sms_status_edit')->setData('action', $this->getUrl('*/*/save'))) 
      ->renderLayout(); 
    } 

    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'); 
    } 
} 

Вот что я имею в:/приложение/код/​​сообщества/VivasIndustries/SmsNotificat ион/модель/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/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/блок/Adminhtml/SMS/Sta ЕП/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'); 
    } 
} 

Вот что я имею в: /app/code/community/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'] = "brandData[$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('brand')) { 
      // This will have been set in the controller. 
      $smsnotification = Mage::registry('current_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'); 
    } 
} 

у меня есть две проблемы, для которых мне нужно, чтобы вы помогли мне, пожалуйста:

  1. Редактировать поля не показываются данные, когда они должны показать и сохранить функция не работает.
  2. Когда я редактирую строку, функция Delete не работает. Где моя ошибка?
  3. Когда я нажимаю Create new SMS Rule, я перенаправляюсь на пустую страницу. Функция newAction полностью ошибочна. Я не могу вставить новые данные в таблицу mysql VivasIndustries_SmsNotification.

Просьба дать подробную ответную справку.

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

ответ

0

1] Я дам вам свой код, который включает большинство функциональных возможностей в форме редактирования. Измените в соответствии с вашим блоком/моделью/помощником. «AI» = NameSpace и «Hi = ModuleName». Пробуйте ниже код в вашем form.php. Он будет генерировать поля редактирования с данными.

<?php 

class AI_Hi_Block_Adminhtml_Hi_Edit_Form extends Mage_Adminhtml_Block_Widget_Form 
{ 

public function __construct() 
{ 
    parent::__construct(); 
    $this->setId('hi_form'); 
    $this->setTitle(Mage::helper('hi')->__('User Information')); 
} 

protected function _prepareForm() 
{ 
    $model = Mage::registry('hi'); 

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

    $form->setHtmlIdPrefix('hi'); 

    $fieldset = $form->addFieldset('base_fieldset', array('legend'=>Mage::helper('hi')->__('User Information'), 'class' => 'fieldset-wide')); 

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

    $fieldset->addField('fname', 'text', array(
     'name'  => 'fname', 
     'label'  => Mage::helper('hi')->__('First Name'), 
     'title'  => Mage::helper('hi')->__('First Name'), 
     'required' => true, 
    )); 

    $fieldset->addField('lname', 'text', array(
     'name'  => 'lname', 
     'label'  => Mage::helper('hi')->__('Last Name'), 
     'title'  => Mage::helper('hi')->__('Last Name'), 
     'required' => true, 
    )); 



    $fieldset->addField('address', 'textarea', array(
     'name'  => 'address', 
     'label'  => Mage::helper('hi')->__('Address'), 
     'title'  => Mage::helper('hi')->__('Address'), 
     'required' => false 
    )); 

    $fieldset->addField('country_id', 'select', array(
     'label'  => Mage::helper('hi')->__('Country'), 
     'class'  => 'required-entry', 
     'required' => true, 
     'name'  => 'country_id', 
     'onclick' => "", 
     'onchange' => "", 
     'value' => '1', 
     'values' => array('India' => 'India','USA' => 'USA', 'UK' => 'UK'), 
     'disabled' => false, 
     'readonly' => false, 
     'tabindex' => 1 
    )); 

    $fieldset->addField('gender', 'radios', array(
     'label'  => Mage::helper('hi')->__('Gender'), 
     'name'  => 'gender', 
     'onclick' => "", 
     'onchange' => "", 
     'value' => '1', 
     'values' => array(
         array('value'=>'Male','label'=>'Male'), 
         array('value'=>'Female','label'=>'Female'), 
         array('value'=>'Unspecified','label'=>'Unspecified'), 
        ), 
     'disabled' => false, 
     'readonly' => false, 
     'tabindex' => 1 
    )); 

    $fieldset->addField('hobby', 'checkboxes', array(
     'label'  => Mage::helper('hi')->__('Hobbies'), 
     'name'  => 'hobby[]', 
     'values' => array(
         array('value'=>'Music','label'=>'Music'), 
         array('value'=>'Reading','label'=>'Reading'), 
         array('value'=>'Writing','label'=>'Writing'), 
        ), 
     'onclick' => "", 
     'onchange' => "", 
     'value' => '1', 
     'disabled' => false, 
     'tabindex' => 1 
    )); 

    $fieldset->addField('status', 'select', array(
     'label'  => Mage::helper('hi')->__('Status'), 
     'title'  => Mage::helper('hi')->__('Status'), 
     'name'  => 'status', 
     'required' => true, 
     'options' => array(
      '1' => Mage::helper('hi')->__('Enabled'), 
      '0' => Mage::helper('hi')->__('Disabled'), 
     ), 
    )); 

    $fieldset->addField('categories', 'select', array(
     'label'  => Mage::helper('hi')->__('Categories'), 
     'title'  => Mage::helper('hi')->__('Categories'), 
     'name'  => 'categories', 
     'required' => true, 
     'values' => array(
        array('value'=> Mage::helper('hi')->getAllCategoriesArray(true)), 
         ), 
    )); 

    if($model->getData('profimage') == "") 
    { 
     $fieldset->addField('profimage', 'file', array(
      'name'  => 'profimage', 
      'label'  => Mage::helper('hi')->__('Image'), 
      'title'  => Mage::helper('hi')->__('Image'), 
      'required' => true 
     )); 
    } 
    else 
    { 
     $path = Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_MEDIA)."AI_Hi/".$model->getData('profimage'); 
     $note = 'Browse new image to replace old one.Allowed image type [ "jpg","jpeg","gif","png"]<br/> <a href="'.$path.'" rel="lightbox" onclick="func_loadLightBox(this);return false;" title="'.$model->getTitle().'"> 
       <img src="'.$path.'" style="width:100px;height:100px;"/></a>'; 

     $fieldset->addField('profimage', 'file', array(
      'name'  => 'profimage', 
      'label'  => Mage::helper('hi')->__('Image'), 
      'title'  => Mage::helper('hi')->__('Image'), 
      'required' => false, 
      'note'  => $note 
     )); 

    } 


    if (!$model->getId()) 
    { 
     $model->setData('status', '1'); 
    } 

    $form->setValues($model->getData()); 
    $form->setUseContainer(true); 
    $this->setForm($form); 

    return parent::_prepareForm(); 
} 

} 

?> 

Теперь мы должны изменить файл edit.php, чтобы сделать рабочую кнопку сохранения. Измените ниже код в соответствии с вашими потребностями.

public function __construct() 
{ 
    parent::__construct(); 
    $this->_objectId = 'id'; 
    $this->_blockGroup = 'hi'; 
    $this->_controller = 'adminhtml_hi'; 
    $this->_updateButton('save', 'label', Mage::helper('hi')->__('Save User')); 
    $this->_updateButton('delete', 'label', Mage::helper('hi')->__('Delete User')); 
    $this->_addButton('saveandcontinue', array(
     'label'  => Mage::helper('adminhtml')->__('Save and Continue Edit'), 
     'onclick' => 'saveAndContinueEdit()', 
     'class'  => 'save', 
    ), -100); 

    $this->_formScripts[] = " 
     function saveAndContinueEdit(){ 
      editForm.submit($('edit_form').action+'back/edit/'); 
     } 
    "; 
} 

public function getHeaderText() 
{ 
    if (Mage::registry('hi')->getId()) 
    { 
     return Mage::helper('hi')->__("Edit User '%s'", $this->htmlEscape(Mage::registry('hi')->getTitle())); 
    } 
    else 
    { 
     return Mage::helper('hi')->__('New User'); 
    } 
} 

}

2] Я не могу найти DeleteAction() в /Adminhtml/SmsorderstatusesController.php: Добавить ниже код.

public function deleteAction() 
{ 

    try 
    { 
     $hiId = $this->getRequest()->getParam('id'); 
     $hi = Mage::getSingleton('hi/hi')->load($hiId); 
     Mage::dispatchEvent('hi_controller_nammer_delete', array('hi' => $hi)); 
     $hi->delete(); 
     $this->_getSession()->addSuccess($this->__('User Deleted successfully.')); 
    } 
    catch (Exception $e) 
    { 
     $this->_getSession()->addError($e->getMessage()); 
    } 

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

Сообщите мне, если у вас есть какие-либо проблемы.

0

1) Вам необходимо загрузить модель и вставить ее данные в форму, чтобы отобразить предварительно заполненные значения. Вам нужно отредактировать метод VivasIndustries_SmsNotification_Block_Adminhtml_Sms_Status_Edit_Form :: _ prepareForm() Вставьте код справа между строками «$ form-> setUseContainer (true);» и "$ this-> setForm ($ form);"

$id = Mage::app()->getRequest()->getParam('id'); 
$model = Mage::getModel('smsnotification/smsnotification')->load($id); 
$form->setValues($model->getData());