我创建了一个定制的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');
}
}
然后应该将数据传递给模型,然后将模型插入到右表中。我应该如何以最佳方式构建模型来接收和处理数据,这一点不再完全清楚。我可以简单地使用数据库查询将其添加到数据库中,还是应该根据重复功能使用代码来完成工作?
如何将此特定记录的数据导入控制器,然后将其传递给模型以将其处理到数据库中,这有点模糊。
答案 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形式的字段和发布它,所以当你显示一个项目页面它是从事后的行动。