Joomla MVC组件-单个记录的自定义保存功能

Joomla MVC组件-单个记录的自定义保存功能,joomla,joomla-extensions,custom-component,Joomla,Joomla Extensions,Custom Component,我已经创建了一个定制的Joomla MVC组件,用于跟踪汽车里程信息。其中一个重要部分是按每辆车归档旧里程信息,并能够向登录用户显示这些信息。我试图做的是在里程更新时将旧的里程信息“归档”到数据库中的一个单独的表中。现在我不知道如何重写默认的save()函数,但我想从一个自定义工具栏函数开始,该函数能够将记录写入表中。简单明了。这就是我目前所做的: 我在administrator/components/com_cars/views/car/view.html.php中的工具栏上添加了一个新按钮

我已经创建了一个定制的Joomla MVC组件,用于跟踪汽车里程信息。其中一个重要部分是按每辆车归档旧里程信息,并能够向登录用户显示这些信息。我试图做的是在里程更新时将旧的里程信息“归档”到数据库中的一个单独的表中。现在我不知道如何重写默认的save()函数,但我想从一个自定义工具栏函数开始,该函数能够将记录写入表中。简单明了。这就是我目前所做的:

我在administrator/components/com_cars/views/car/view.html.php中的工具栏上添加了一个新按钮

JToolBarHelper::custom('car.archive', 'archive.png', 'archive_f2.png', 'Archive Mileage', false);
然后,我将功能归档添加到“管理员/组件/com_车/控制器/车”中

添加一个简单的echo语句可以确认该按钮正在工作。但是,我需要的下一件事是,当单击“存档里程”按钮时,活动记录(即从列表中打开的记录)的信息将写入新表。所以基本上我是在复制选中的记录,但将其保存到另一个表中。因此,我需要更改编程,以便使用不同的表将数据放入。以下是我的“汽车”(非汽车)控制器文件目前的外观:

 class CarsControllerCar extends JControllerForm
 {
/**
 * Constructor
 *
 * @throws Exception
 */
public function __construct()
{
    $this->view_list = 'cars';
    parent::__construct();
}
public function archive()
{

    // Get the input
    $input = JFactory::getApplication()->input;
    $ids    = $this->input->get('cid', array(), 'array');

    try
    {
        if (empty($ids))
        {
            throw new Exception(JText::_('COM_CARS_NO_ELEMENT_SELECTED'));
        }

        ArrayHelper::toInteger($ids);
        $model = $this->getModel();
        $model->archive($ids);
        $this->setMessage(Jtext::_('COM_CARS_ITEMS_SUCCESS_DUPLICATED'));
    }
    catch (Exception $e)
    {
        JFactory::getApplication()->enqueueMessage($e->getMessage(), 'warning');
    }

    $this->setRedirect('index.php?option=com_cars&view=cars');

}

}
然后将数据传递给模型,模型将数据插入到正确的表中。我应该如何以最好的方式构建模型来接收和处理数据,现在还不完全清楚。我可以简单地使用数据库查询将其添加到数据库中,还是应该根据复制函数使用代码来完成工作


对于我来说,如何将此特定记录的数据输入控制器,然后将其传递给模型,以便将其处理到数据库中,这有点模糊。

首先,您应该进行更改

JToolBarHelper::custom('car.archive', 'archive.png', 'archive_f2.png', 'Archive Mileage', false);

最后一个参数允许您从列表中选择元素,然后在控制器中您应该能够从列表中获取元素的id

$ids    = $this->input->get('cid', array(), 'array');
编辑

要从按钮获取项目id,请单击项目页面内的,只需从输入获取id参数:

$this->input->get('id', null, 'int');
解释


所有工具栏按钮的工作方式都是相同的,单击它会将acton放在joomla表单的“action”字段中,并将其发布,因此当您显示一个项目页面时,它总是来自一个post操作。

我理解您的意思,但我不必从列表中选择一个值,因为我处于项目的编辑表单中。所以我没有在记录列表概述上做任何事情,我已经做了选择。我无法让它工作。在我的控制台中,我可以看到应用程序需要一个选定的项目。因为我在项目页面本身,所以这不应该是一个问题,应该记录当前记录。在我的操作语句中使用“false”会跳过错误,但会重定向到控制器指向的位置,并显示一条错误消息,表明未选择任何记录。我会把我的问题编辑得更详细一些,这样你就知道我要做什么了。看我所做的编辑,使用$this->input->get('id',null,'int');
$this->input->get('id', null, 'int');