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

时间:2017-01-20 14:10:50

标签: joomla joomla-extensions custom-component

我创建了一个定制的Joomla MVC组件,用于跟踪汽车里程信息。其中一个重要的部分是基于每辆车存档旧里程信息,并能够将其显示给登录用户。我想要做的就是"存档"当里程数更新时,旧里程信息到我的数据库中的单独表格。现在我还不知道如何覆盖默认的save()函数,但我想从一个能够将记录写入表的自定义工具栏函数开始。干净利落。这就是我到目前为止所做的:

我在管理员/ components / com_cars / views / car / view.html.php

中添加了一个新按钮
JToolBarHelper::custom('car.archive', 'archive.png', 'archive_f2.png', 'Archive Mileage', false);

然后我将功能存档添加到" administrator / components / com_cars / controllers / car"

添加简单的echo语句确认该按钮正在工作。但是,我需要做的下一件事是当活动记录的信息(即从列表中打开的记录)被写入"存档里程"单击按钮。所以基本上我正在复制所选择的记录,但将其保存到不同的表中。因此,我需要改变编程,以便使用不同的表来放入数据。这就是我的控制器文件的方式,用于" car" (不是汽车)现在正在寻找:

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

}

}

然后应该将数据传递给模型,然后将模型插入到右表中。我应该如何以最佳方式构建模型来接收和处理数据,这一点不再完全清楚。我可以简单地使用数据库查询将其添加到数据库中,还是应该根据重复功能使用代码来完成工作?

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

1 个答案:

答案 0 :(得分:0)

首先你应该改变

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

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

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

获取元素的id
$ids    = $this->input->get('cid', array(), 'array');

修改

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

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

<强>说明

所有工具栏按钮的工作方式相同,单击它会将acton置于&#34; action&#34; joomla形式的字段和发布它,所以当你显示一个项目页面它是从事后的行动。