2013-07-09 34 views
2

我在哪里以及如何覆盖Joomla 3.0自定义组件中的保存方法?如何覆盖组件中的save()方法

当前状况:

自定义管理员组件。

我有一个列表视图,显示存储在表中的所有人。 点击一个条目,我可以看到一个表单被载入的详细视图,它可以被编辑。

保存时,值存储在数据库中。这一切都工作正常。但是,....

当打保存我希望修改一个字段,然后将其存储到数据库中。我如何覆盖保存功能,并在哪里?我一直在搜索这个论坛,并用Google搜索一下,找到实现这个的方法。谁给我一个简单的例子或指向我的正确方向?

谢谢。

回答

0

您可以使用该模型文件的prepareTable功能(管理员/组件/ yourComponent /模型/ yourComponent.php)

protected function prepareTable($table) 
{ 
    $table->fieldname = newvalue; 
} 
+0

事实上,这确实实现了:)谢谢! –

3

刚刚添加该谁想要知道答案的问题本身 - 如果您明确希望覆盖保存功能,这将起作用。但是,看看如何操作值的实际解决方案!

你重写它的控制器,就像这样:

/** 
* save a record (and redirect to main page) 
* @return void 
*/ 
function save() 
{ 
    $model = $this->getModel('hello'); 

    if ($model->store()) { 
     $msg = JText::_('Greeting Saved!'); 
    } else { 
     $msg = JText::_('Error Saving Greeting'); 
    } 

    // Check the table in so it can be edited.... we are done with it anyway 
    $link = 'index.php?option=com_hello'; 
    $this->setRedirect($link, $msg); 
} 

更多细节在这里:Joomla Docs - Adding Backend Actions

0

在模型中prepareTable(如上所述)意为(准备和消毒表保存之前)。如果你想给我们的ID,但是,你应该考虑在控制器中使用postSaveHook

protected function postSaveHook($model, $validData) { 
    $item = $model->getItem(); 
    $itemid = $item->get('id'); 
} 

postSaveHook被称为保存后完成,因此允许新插入的ID的使用。