【发布时间】:2013-04-05 08:59:32
【问题描述】:
我创建了一个带有表单的自定义组件来更新要在前端显示的四种产品的价格。
我的主控制器代码在这里:
public function display($cachable = false, $urlparams = false) {
require_once JPATH_COMPONENT.'/helpers/calculator.php';
$view = JFactory::getApplication()->input->getCmd('view', 'pricetable');
$layout = JFactory::getApplication()->input->getCmd('layout', 'edit');
JFactory::getApplication()->input->set( 'layout', $layout );
JFactory::getApplication()->input->set('view', $view);
JFactory::getApplication()->input->set('id', 1);
parent::display($cachable, $urlparams);
return $this;
}
id 设置为 1,因此它仅从数据库加载第一行。
价格容器的代码是:
function __construct() {
$this->view_list = 'pricetable';
parent::__construct();
}
现在在后台管理中,表单会根据需要加载第一行数据。
当我尝试保存表单时,它被重定向到 administrator/index.php?option=com_calculator&view=pricetable 并且错误是:
错误:不允许您使用该链接直接访问该链接 页 (#1)。
我的表单操作是:
<?php echo JRoute::_('index.php?option=com_calculator&task=pricetable.edit&id='.(int) $this->item->id); ?>
请提出我做错的地方。这是第三天,我在挠头。 :(
【问题讨论】:
-
如果您将表单操作设置为
<?php echo JRoute::_('index.php?option=com_calculator&view=pricetable&task=pricetable.edit&id='.(int) $this->item->id); ?>? -
这也没有任何反应。我认为是价格表控制器的问题。有没有办法在第一次加载时将组件重定向到
administrator/index.php?option=com_calculator&task=pricetable.edit&id=1。 -
我认为您可以在同一页面上更新数据。无处。所以只需将此字段设为空 (
action) 以确保您停留在同一页面上... -
@StasGrin 保持操作为空会将表单数据保存到新实例,但不更新现有实例。
-
这就是为什么?您可以随时在代码中更新操作(或调用它们)。新实例或更新新实例 - 再添加一个
IF和hidden输入,例如name=task value=update
标签: php model-view-controller joomla joomla3.0 joomla-component