0

我正在开发一个集成 jqGrid 的自定义 joomla 2.5 组件。

我正在设置一个控制器任务来处理(更新 mysql 记录)从 jqGrid postData 发送的数据

 var grid = jQuery(\"#list\");
            grid.jqGrid({
        onSelectRow: function(id){
            $('#list').editRow(id, true); 
        },
                url: '/index.php?option=com_nutraidev&view=products&format=raw',
                datatype: 'json',
                mtype: 'GET',
                colNames: [...],
                rowNum: 25,
                rowList: [5, 10, 20, 50],
                height: 'auto',
                pager: '#pager',
                loadonce: true,
                sortname: 'ID',
                viewrecords: true,
                direction:'RTL',
                autowidth: true,
                sortorder: \"desc\",
                caption: 'abc',
                width: '70%',
        editurl:'/index.php?option=com_nutraidev&view=products&task=Products.save&token=". JUtility::getToken() ."=1',   
                postData: {'code':\" \",....},
.....

这是发出请求的 url

/index.php?option=com_nutraidev&view=products&task=Products.save&token=". JUtility::getToken() ."=1&format=raw

我越来越:

 error 500
    Invalid controller: name='products', format='raw'

使用实际令牌从浏览器中尝试过 - 结果相同。

这是我的代码的重要部分:

com_nutraidev - 控制器 - products.php

require_once JPATH_COMPONENT.'/controller.php';

    class NutraidevControllerProducts extends NutraidevController
    {

        public function &getModel($name = 'Products', $prefix = 'NutraidevModel')
        {
            $model = parent::getModel($name, $prefix, array('ignore_request' => true));
            return $model;
        }


        public function save()
        {
            // Check for request forgeries.
            JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN'));

            // Initialise variables.
            $app    = JFactory::getApplication();
            $model = $this->getModel('Products', 'NutraidevModel');
            $data = JRequest::get('get');

            // Attempt to save the data.
            $return = $model->updItem($data);

            }

    }

com_nutraidev - 模型 - products.php

jimport('joomla.application.component.modellist');

class NutraidevModelProducts extends JModelList {

    public function __construct($config = array()) {
        parent::__construct($config);
    }

      public function updItem($data)
        {
        // set the variables from the passed data
        $code = $data['code'];
        $name = $data['name'];

        // set the data into a query to update the record
                $db   = $this->getDbo();
                $query  = $db->getQuery(true);
                $query->clear();
                $query->update(' #__product ');
                $query->set(' name = '.$db->Quote($name) );
                $query->where(' code = ' . (int) $code );

                $db->setQuery((string)$query);

        if (!$db->query()) {
            JError::raiseError(500, $db->getErrorMsg());
                return false;
        } else {
                return true;
                }
        }
}

com_nutraidev - 视图 - 产品 - view.raw.php

 jimport('joomla.application.component.view');

    class NutraidevViewProducts extends JView
    {

/** * 显示视图 */ public function display($tpl = null) { $app = JFactory::getApplication();

    $document = JFactory::getDocument();
    // Get data from the model
    $items = $this->get('Items');

    $this->state        = $this->get('State');

    $this->params       = $app->getParams('com_nutraidev');

    // Check for errors.
    if (count($errors = $this->get('Errors'))) {;
        throw new Exception(implode("\n", $errors));
    }

    // Assign data to the view
    $response->page = 1;//JRequest::getVar('page');
    $response->total = 1;//JRequest::getVar('total');
    $response->records = count($items);
    $i=0;

     for ($i = 0; $i < count($items); ++$i) {
         $response->rows[$i]['id'] = intval($items[$i]->code); //id
         $response->rows[$i]['cell'] = array($items[$i]->code,
                                                    $items[$i]->name                                            
                                             );
    } 

    echo json_encode($response);    

        jexit();

}
        public function save($tpl = null)
        {
        echo "test";
        jexit();
        }
    }

看着其他有类似问题的问题,我仔细检查了我的

administrator/components/nutraidev/nutraidev.xml

并确保

<files folder="site">
    <filename>controller.php</filename>

在那里。

我收到此错误的原因可能是什么?我也用 view.json.php 尝试过,得到了相同的结果。谢谢

4

0 回答 0