我在joomla中相对较新,目前我编写了一个组件,您可以对项目进行评分和评论。 对于评论,我只需要一个文件,编辑文件和他的控制器,这应该只有一个自定义输入字段而不使用XML表单文件,并且没有带有默认视图的复数文件。 问题是我还没有找到如何使用jomla保存按钮将数据保存到数据库。当我保存数据时,我被重定向到一个新站点,数据没有通过邮件发送。我可以使用我的Controller文件中的save()函数来显示消息,但是我无法显示任何帖子输入。
这也是我的代码。我想,有些东西不见了。
我的控制器文件comments.php
class EasyratingControllerComments extends JControllerAdmin
{
public function getModel($name = 'Comments', $prefix = 'EasyratingModel', $config = array('ignore_request' => true))
{
$model = parent::getModel($name, $prefix, $config);
return $model;
}
}
我的modelfile comments.php
class EasyratingModelComments extends JModelList
{
public function __construct($config = array())
{
if (empty($config['filter_fields']))
{
$config['filter_fields'] = array(
'id', 'a.id',
'rating_id', 'a.rating_id',
'comments', 'a.comments',
);
}
parent::__construct($config);
}
protected function populateState($ordering = null, $direction = null)
{
$id = JRequest::getInt('id');
$this->setState('id', $id);
}
public function getTable($type = 'Easyrating_comments', $prefix = 'EasyratingTable', $config = array())
{
return JTable::getInstance($type, $prefix, $config);
}
protected function getListQuery()
{
$db = $this->getDbo();
$query = $db->getQuery(true);
$query->select(
$this->getState(
'list.select',
'a.id,'a.rating_id, a.comments, a.created_by'
)
);
$query->from($db->quoteName('#__easyrating_comments').' AS a');
$query->where('(a.state IN (0, 1))');
if ($id = $this->getState('id'))
{
$query->where('a.rating_id = '.(int) $id);
}
return $query;
}
}
我的文件view.html.php
class EasyratingViewComments extends JViewLegacy
{
protected $items;
protected $state;
protected $pagination;
public function display($tpl = null)
{
$this->items = $this->get('Items');
$this->state = $this->get('State');
$this->pagination = $this->get('Pagination');
$app = JFactory::getApplication();
$params = $app->getParams();
$this->assignRef('params', $params);
parent::display($tpl);
}
我的文件edit.php(不是整个唯一的重要部分)
<form action="<?php echo JRoute::_('index.php?option=com_easyrating&view=comments&layout=edit&id='.(int) $ratingID); ?>"method="post" name="adminForm" id="adminForm" class="col col-md-12 rating-comments-main-input-field text-center form-validate comments">
<fieldset>
<textarea name="jform[comments]" id="jform_comments" class="rating-comments-main-textarea" cols="50" rows="30"></textarea>
<button type="button" class="btn btn-success" style="margin-right: 15px;" onclick="Joomla.submitbutton('comments.save')"> <i class="icon-new"></i> <?php echo JText::_('JSAVE')?> </button>
<input type="hidden" name="task" value="" />
<?php echo JHtml::_('form.token'); ?>
<?php echo JHtml::_('bootstrap.endPane'); ?>
</fieldset>
</form>
答案 0 :(得分:0)
提交表单时,调用控制器函数comments.save。我猜你控制器中没有save() - 函数,这是由默认方法处理的,它使用xml文件格式进行验证(你没有)。要覆盖我认为您的控制器应该位于名为com_easyrating / controllers / comments.php
的文件中class EasyRatingControllerComments{
function save(){
// here you should be able to handle your input
}
}
我认为要使用内置的joomla功能,您需要定义一个xml文件。我不明白你为什么不这样做?使用它是处理表单输入的标准Joomla方法。查看docs.joomla.org/...
上的一些文档获取组件框架的一种简单方法是最初使用组件创建者,f.ex。 component-creator.com