【问题标题】:Joomla MVC Component - Custom save function for a single recordJoomla MVC 组件 - 单个记录的自定义保存功能
【发布时间】:2017-06-05 13:24:15
【问题描述】:

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

我在管理员/组件/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 语句可以确认该按钮正在工作。但是,接下来我需要的是,当单击“存档里程”按钮时,活动记录的信息(即从列表中打开的记录)被写入新表。所以基本上我正在复制选定的记录,但将其保存到不同的表中。因此,我需要更改编程,以便使用不同的表来放入数据。这就是我的“汽车”(不是汽车)的控制器文件现在的样子:

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

}

}

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

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

【问题讨论】:

    标签: joomla joomla-extensions custom-component


    【解决方案1】:

    首先你应该改变

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

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

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

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

    编辑

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

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

    说明

    所有工具栏按钮都以相同的方式工作,单击它会将动作放入 joomla 表单的“动作”字段并发布它,因此当您显示项目页面时,它来自发布动作。

    【讨论】:

    • 我明白你的意思,但我不必从列表中选择一个值,因为我处于项目的编辑表单中。所以我没有在记录列表概述上做任何事情,我已经做出了选择。
    • 我无法让它工作。在我的控制台中,我可以看到应用程序需要一个选定的项目。由于我在项目页面本身,这应该不是问题,应该记录当前记录。在我的操作语句中使用“false”会跳过错误,但会重定向到控制器指向的位置并显示一条错误消息,指出未选择任何记录。我会更详细地编辑我的问题,以便您知道我要完成的工作
    • 查看我所做的编辑,使用 $this->input->get('id', null, 'int');
    猜你喜欢
    • 1970-01-01
    • 2018-07-06
    • 1970-01-01
    • 1970-01-01
    • 2017-11-15
    • 1970-01-01
    • 2013-03-01
    • 2017-07-21
    • 2012-11-30
    相关资源
    最近更新 更多