单击下拉选项 magento 1.7.0.2 在管理面板中创建网格

Posted

技术标签:

【中文标题】单击下拉选项 magento 1.7.0.2 在管理面板中创建网格【英文标题】:Creating a grid in admin panel on click of a dropdown option magento 1.7.0.2 【发布时间】:2017-03-20 20:29:48 【问题描述】:

我正在管理面板中开发一个子模块。第一个页面网格显示用户列表(推荐人/父用户)及其总佣金。在“操作”选项卡中有一个下拉菜单,单击该下拉菜单会打开一些网格。与此类似,我想在点击时添加另一个选项,其中应该有一个页面显示该推荐人/父用户下的推荐人(子用户)以及推荐人/父用户每个推荐/子用户获得多少佣金。

例如: A(父用户)-B,C(子用户)通过A的引用注册。 所以,从 B 那里,A 得到了 20 美元的佣金,而从 C 那里,A 得到了 20 美元的佣金,(这些详细信息包括谁推荐的以及有多少佣金存储在一个表格中) 显示总计上一页的 40 美元。

我得到的错误是-

致命错误:未捕获错误:调用 E:\xampp\htdocs\peoplesoilnew\app\code\core\Mage\Adminhtml\Block\Widget\Grid\Container 中布尔值的成员函数 setSaveParametersInSession()。 php:66 堆栈跟踪:#0 E:\xampp\htdocs\peoplesoilnew\app\code\core\Mage\Core\Block\Abstract.php(238): Mage_Adminhtml_Block_Widget_Grid_Container->_prepareLayout() #1 E:\xampp\htdocs \peoplesoilnew\app\code\core\Mage\Core\Model\Layout.php(456): Mage_Core_Block_Abstract->setLayout(Object(Mage_Core_Model_Layout)) #2 E:\xampp\htdocs\peoplesoilnew\app\code\local\Mj \Friends\controllers\Adminhtml\FriendsController.php(60): Mage_Core_Model_Layout->createBlock('friends/adminht...') #3 E:\xampp\htdocs\peoplesoilnew\app\code\core\Mage\Core\Controller \Varien\Action.php(419): Mj_Friends_Adminhtml_FriendsController->friendscommissionAction() #4 E:\xampp\htdocs\peoplesoilnew\app\code\core\Mage\Core\Controller\Varien\Router\Standard.php(250): Mage_Core_Controller_Varien_Action->dispatch('friendscommissi...') # 5 E:\xampp\htdocs\peoplesoilnew\app\code\core\Ma 在 E:\xampp\htdocs\peoplesoilnew\app\code\core\Mage\Adminhtml\Block\Widget\Grid\Container.php 在第 66 行

代码文件-

添加下拉选项的代码 -

$this->addColumn('action',
        array(
            'header'    =>  Mage::helper('customer')->__('Action'),
            'width'     => '100',
            'type'      => 'action',
            'getter'    => 'getId',
            'actions'   => array(
                array(
                    'caption'   => Mage::helper('friends')->__('Make Payment'),
                    'url'       => array('base'=> '*/*/payment'),
                    'field'     => 'friendskey_id'
                ),
                array(
                    'caption'   => Mage::helper('friends')->__('View Referred Friend List'),
                    'url'       => array('base'=> '*/*/friendslist'),
                    'field'     => 'friendskey_id'
                ),
                array(
                    'caption'   => Mage::helper('friends')->__('Distribution of Commission'),
                    'url'       => array('base'=> '*/*/friendscommission'),
                    'field'     => 'friendskey_id'
                )

app\code\local\Mj\Friends\etc\config.xml -

        <friends_mysql4>
            <class>Mj_Friends_Model_Mysql4</class>
            <entities>
                <friends>
                    <table>friends</table>
                </friends>
                <commission>
                    <table>friends_commission</table>
                </commission>
                <memberkey>
                    <table>friendskey</table>
                </memberkey>
                <friendscommission>
                    <table>friends_commission</table>
                </friendscommission>
            </entities>
        </friends_mysql4>       

app\code\local\Mj\Friends\Block\Adminhtml\Friendscommission\Grid.php -

<?php 
class Mj_Friends_Block_Adminhtml_Friendscommission_Grid  extends            Mage_Adminhtml_Block_Widget_Grid

    public function __construct()
   
    parent::__construct();
    $this->setId('friends_commission');
    $this->setDefaultSort('commission_id');
    $this->setDefaultDir('ASC');
    $this->setSaveParametersInSession(false);
    $this->_prepareCollection();    
  

  protected function _prepareCollection()
  
    // get the member id using friendskey_id
    /*$friendsId     = $this->getRequest()->getParam('friendskey_id');
    $friendsModel  =  Mage::getModel('friends/memberkey')->load($friendsId);
    $memberId = $friendsModel->getMemberId();*/

    $collection =   Mage::getModel('friends/friends_commission')->getCollection();

//  $collection->addFieldToFilter('member_id', $memberId);
    $this->setCollection($collection);     

    return parent::_prepareCollection();


protected function _prepareColumns()


    /*
    $this->addColumn('friends_id', array(
        'header'    => Mage::helper('friends')->__('ID'),
        'align'     =>'right',
        'width'     => '50px',
        'index'     => 'friends_id',
    ));
    */


    $this->addColumn('user_email', array(
        'header'    => Mage::helper('friends')->__('User Email'),
        'align'     => 'left',
        'width'     => '120px',            
        'default'   => '--',
        'index'     => 'user_email',
    ));

    $this->addColumn('status', array(

        'header'    => Mage::helper('friends')->__('Status'),
        'align'     => 'left',
        'width'     => '80px',
        'index'     => 'status',
        'type'      => 'options',
        'options'   => array(
            'Active' => 'Active',
            'Inactive' => 'Inactive',
        ),
    )); 

    return parent::_prepareColumns();
  



   

app\code\local\Mj\Friends\Block\Adminhtml\Friendscommission.php -

 <?php

 class Mj_Friends_Block_Adminhtml_Friendscommission extends Mage_Adminhtml_Block_Widget_Grid_Container
 
   public function __construct()
  
    $this->_controller = 'adminhtml_friendscommission';
    $this->_blockGroup = 'friends';
    $this->_headerText = Mage::helper('friends')->__('Friends Commission');
    //$this->_addButtonLabel = Mage::helper('friends')->__('Add Item');
    parent::__construct();
    $this->_removeButton('add');
    /*
    $this->_addButton('back');
    $this->_addButton('back_button_id', array(
        'label'     => Mage::helper('friends')->__('Some action'),
        'onclick'   => 'jsfunction(this.id)',
        'class'     => 'go'
    ), 0, 100, 'header', 'header');
    */

    
 

**app\code\local\Mj\Friends\Model\Friendscommission.php **

 <?php

 class Mj_Friends_Model_Friendscommission extends Mage_Core_Model_Abstract

   public function _construct()
   
    parent::_construct();
    $this->_init('friends/friends_commission');
  

从控制器调用该模块的操作,app\code\local\Mj\Friends\controllers\Adminhtml\FriendsController.php -

     <?php

     class Mj_Friends_Adminhtml_FriendsController extends Mage_Adminhtml_Controller_Action
    

   protected function _initAction()
  
    $this->loadLayout()
        ->_setActiveMenu('friends/items')
        ->_addBreadcrumb(Mage::helper('adminhtml')->__('Items Manager'), Mage::helper('adminhtml')->__('Item Manager'));
     return $this;
      

   public function indexAction() 
     $this->_initAction();       
     $this->_addContent($this->getLayout()->createBlock('friends/adminhtml_friends'));
    $this->renderLayout();
  

 public function editAction()
 
    $friendsId     = $this->getRequest()->getParam('id');
    $friendsModel  = Mage::getModel('friends/friends')->load($friendsId);

    if ($friendsModel->getId() || $friendsId == 0) 

        Mage::register('friends_data', $friendsModel);

        $this->loadLayout();
        $this->_setActiveMenu('friends/items');

        $this->_addBreadcrumb(Mage::helper('adminhtml')->__('Item Manager'), Mage::helper('adminhtml')->__('Item Manager'));
        $this->_addBreadcrumb(Mage::helper('adminhtml')->__('Item News'), Mage::helper('adminhtml')->__('Item News'));

        $this->getLayout()->getBlock('head')->setCanLoadExtJs(true);

        $this->_addContent($this->getLayout()->createBlock('friends/adminhtml_friends_edit'))
             ->_addLeft($this->getLayout()->createBlock('friends/adminhtml_friends_edit_tabs'));

        $this->renderLayout();
     else 
        Mage::getSingleton('adminhtml/session')->addError(Mage::helper('friends')->__('Item does not exist'));
        $this->_redirect('*/*/');
    


 public function newAction()
 
    $this->_forward('edit');
 

  public function friendslistAction() 
    $this->_initAction();       
     $this->_addContent($this->getLayout()->createBlock('friends/adminhtml_friendslist'));
    $this->renderLayout();



   public function friendscommissionAction()  
    $this->_initAction();
     $this->_addContent($this->getLayout()->createBlock('friends/adminhtml_friendscommission'));
    $this->renderLayout();
    

  public function paymentAction()
  
    $friendsId     = $this->getRequest()->getParam('friendskey_id');
    $friendsModel  = Mage::getModel('friends/memberkey')->load($friendsId);

    if ($friendsModel->getFriendskeyId() || $friendsId > 0) 

        Mage::register('friends_data', $friendsModel);

        $this->loadLayout();
        $this->_setActiveMenu('friends/items');

       /* $this->_addBreadcrumb(Mage::helper('adminhtml')->__('Item Manager'), Mage::helper('adminhtml')->__('Item Manager'));
        $this->_addBreadcrumb(Mage::helper('adminhtml')->__('Item News'), Mage::helper('adminhtml')->__('Item News'));*/

        $this->getLayout()->getBlock('head')->setCanLoadExtJs(true);

        $this->_addContent($this->getLayout()->createBlock('friends/adminhtml_friends_payment'))
             ->_addLeft($this->getLayout()->createBlock('friends/adminhtml_friends_payment_tabs'));

        $this->renderLayout();
     else 
        Mage::getSingleton('adminhtml/session')->addError(Mage::helper('friends')->__('Item does not exist'));
        $this->_redirect('*/*/');
    


public function saveAction()


    if ( $this->getRequest()->getPost() ) 
        try 
            $postData = $this->getRequest()->getPost();
            //print_r($postData); die;
            if($postData['amount_hidden'] ) 
                $resource = Mage::getSingleton('core/resource');
                $readConnection = $resource->getConnection('core_write'); 

                $updateSql = "UPDATE friends_standard_payamount  SET standard_amount = '".$postData['standard_payment_amount']."', standard_commission = '".$postData['standard_commission']."'";
                $readConnection->query($updateSql);

                Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('adminhtml')->__('Minimum referred payment amount updated successfully.'));
                $this->_redirect('new', array('friendskey_id' => $this->getRequest()->getParam('friendskey_id')));
                return;
             else 

                                $resource = Mage::getSingleton('core/resource');
                $readConnection = $resource->getConnection('core_write'); 

                $updateSql = "UPDATE friends_standard_payamount  SET standard_commission = '".$postData['commission_amount']."'";
                $readConnection->query($updateSql);

                //get the commission amount 
                $friendsModel = Mage::getModel('friends/friends');
                $commission_amount = $postData['commission_amount'];
                $friendskey_id = $postData['friendskey_id']; 

                //get the memeber id.
                $friendsModel  = Mage::getModel('friends/memberkey')->load($friendskey_id);
                $memberId = $friendsModel->getMemberId();               

                //get the member paypal business email address.
                $customerData = Mage::getModel('customer/customer')->load($memberId)->getData();    
                //$customerData['paypalemail'];
                if(!empty($customerData['paypalemail'])) 
                        //get the paypal config settings.
                        $standard = Mage::getModel('paypal/standard');
                        $form = new Varien_Data_Form();     

                        $form->setAction($standard->getConfig()->getPaypalUrl())
                                ->setId('paypal_standard_checkout')
                                ->setName('paypal_standard_checkout')
                                ->setMethod('POST')
                                ->setUseContainer(true);

                        /* @var $api Mage_Paypal_Model_Api_Standard */
                        $api = Mage::getModel('paypal/api_standard')->setConfigObject($this->getConfig());
                    //$orderIncrementId = 0 ;
                    $api->setOrderId($orderIncrementId)
                            ->setCurrencyCode(Mage::app()->getStore()->getCurrentCurrencyCode())
                            //->setPaymentAction()
                            //->setOrder($order)
                            ->setNotifyUrl(Mage::getUrl('paypal/ipn/'))
                            ->setReturnUrl(Mage::getUrl('paypal/standard/success'))
                            ->setCancelUrl(Mage::getUrl('paypal/standard/cancel'));

                        //get and set owner address.
                        $address = array(); 
                        $api->setAddress($address); 
                        $api->setLocale($api->getLocaleCode());
                        $result = $api->getStandardCheckoutRequest();   

                        foreach ($result as $field=>$value) 
                            if($field == "business") 
                                //set the paypal business email address
                                $form->addField($field, 'hidden', array('name'=>$field, 'value'=>$customerData['paypalemail']));
                             else if($field == "return")  
                                $form->addField($field, 'hidden', array('name'=>$field, 'value'=>$this->getUrl('*/*/success', array()))); 
                             else if($field == "cancel_return") 
                                $form->addField($field, 'hidden', array('name'=>$field, 'value'=>$this->getUrl('*/*/cancel', array())));
                             else 
                                $form->addField($field, 'hidden', array('name'=>$field, 'value'=>$value));
                            
                               

                        $form->addField('amount', 'hidden', array('name'=>'amount', 'value'=>$commission_amount));
                        $form->addField('paymentaction', 'hidden', array('name'=>'paymentaction', 'value'=>'sale'));
                        $form->addField('item_name', 'hidden', array('name'=>'item_name', 'value'=>'Commission Amount'));

                        //$form->addField('business', 'hidden', array('name'=>'business', 'value'=>$paypalBusinessIdValue));

                        $idSuffix = Mage::helper('core')->uniqHash();
                        $submitButton = new Varien_Data_Form_Element_Submit(array(
                            'value'    => $this->__('Click here if you are not redirected within 10 seconds...'),
                        ));
                        $id = "submit_to_paypal_button_$idSuffix";
                        $submitButton->setId($id);
                        $form->addElement($submitButton);
                        $html = '<html><body>';
                        $html.= $this->__('You will be redirected to the PayPal website in a few seconds.');
                        $html.= $form->toHtml();
                        $html.= '<script type="text/javascript">document.getElementById("paypal_standard_checkout").submit();</script>';
                        $html.= '</body></html>';
                        echo $html;
                        exit;
                    else 
                        Mage::getSingleton('adminhtml/session')->addError(Mage::helper('adminhtml')->__('Member does not have the PayPal Email Address. Thus, unable proceed to make the payment.'));
                        Mage::getSingleton('adminhtml/session')->setFriendsData($this->getRequest()->getPost());
                        $this->_redirect('*/*/payment', array('friendskey_id' => $this->getRequest()->getParam('friendskey_id')));
                        return;
                    
                 
             /*
                $friendsModel->setId($this->getRequest()->getParam('id'))
                     ->setTitle($postData['user_email'])
                     ->setContent($postData['content'])
                     ->setStatus($postData['status'])
                     ->save();

                 Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('adminhtml')->__('Item was successfully saved'));
                 Mage::getSingleton('adminhtml/session')->setFriendsData(false);
                 */
           // $this->_redirect('*/*/');
           // return; 

         catch (Exception $e) 
            Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
            Mage::getSingleton('adminhtml/session')->setFriendsData($this->getRequest()->getPost());
            $this->_redirect('*/*/payment', array('friendskey_id' => $this->getRequest()->getParam('friendskey_id')));
            return;
        
    
    $this->_redirect('*/*/');


public function successAction()    
    $this->loadLayout();
    $this->_setActiveMenu('friends/items');
    $this->getLayout()->getBlock('head')->setCanLoadExtJs(true);
    $this->renderLayout();      
    Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('adminhtml')->__('Payment has been done successfully.'));      


public function cancelAction() 
    $this->loadLayout();
    $this->_setActiveMenu('friends/items');
    $this->getLayout()->getBlock('head')->setCanLoadExtJs(true);
    $this->renderLayout();      
    Mage::getSingleton('adminhtml/session')->addError(Mage::helper('adminhtml')->__('Payment has been cancelled successfully.'));       


public function formAction()
    $this->loadLayout();
    $this->getResponse()->setBody(
        $this->getLayout()->createBlock('friends/adminhtml_friends_payment_tab_amount')->toHtml()
    );


/**
 * Config instance getter
 * @return Mage_Paypal_Model_Config
 */
public function getConfig()

    if (null === $this->_config) 

        $params = array($this->_code);
        if ($store = Mage::app()->getStore()) 
            $params[] = is_object($store) ? $store->getId() : $store;
        
        $this->_config = Mage::getModel('paypal/config', $params);
    
    return $this->_config;


public function deleteAction()

    if( $this->getRequest()->getParam('id') > 0 ) 
        try 
            $friendsModel = Mage::getModel('friends/friends');

            $friendsModel->setId($this->getRequest()->getParam('id'))
                ->delete();

            Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('adminhtml')->__('Item was successfully deleted'));
            $this->_redirect('*/*/');
         catch (Exception $e) 
            Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
            $this->_redirect('*/*/edit', array('id' => $this->getRequest()->getParam('id')));
        
    
    $this->_redirect('*/*/');

/**
 * Product grid for AJAX request.
 * Sort and filter result for example.
 */
public function gridAction()

    $this->loadLayout();
    $this->getResponse()->setBody(
           $this->getLayout()->createBlock('friends/adminhtml_friends_grid')->toHtml()
    );

要从中获取数据的表 -

【问题讨论】:

你可以试试这个:magento.stackexchange.com/questions/43343/… 【参考方案1】:

好像你缺少控制器“adminhtml_friendscommission”

$this->_controller = 'adminhtml_friendscommission';

请创建上述控制器,它将解决问题。

或者如果你不想要friendscommission控制器并且如果你需要使用friends控制器改变

$this->_controller = 'adminhtml_friendscommission';

$this->_controller = 'adminhtml_friends';

Mj_Friends_Block_Adminhtml_Friendscommission::__construct method

【讨论】:

以上是关于单击下拉选项 magento 1.7.0.2 在管理面板中创建网格的主要内容,如果未能解决你的问题,请参考以下文章

美国或德国等英国的 Magento 州/省选项下拉菜单

Magento 标头 childhtml 下拉菜单

Magento - 客户地址国家下拉问题

Magento 1.7.0.2 退款不与 PayPal 同步

Magento PayPal Express 未显示

在付款方式中选择选项而不是 magento 中的单选按钮