1

我想创建一个前端 joomla 组件,这是我的第一次体验。

这是重要的事情:

1-组件/controller.php

class TestController extends JControllerLegacy
{
public function display($cachable = false, $urlparams = false)
{

$view= JFactory::getApplication()->input->getCmd('view','items');
    JFactory::getApplication()->input->set('view', $view);
    parent::display($cachable, $urlparams);
}
}

2:com_test/model/items.php

<?php
defined('_JEXEC') or die();

jimport( 'joomla.application.component.modellist' );


class TestModelItems extends JModelList
{
    public function __construct($config = array())
    {
    if (empty($config['filter_fields'])) 
        $config['filter_fields'] = array('id', 'title', 'catid');
    parent::__construct($config);
}

function getListQuery()
{
    $db = JFactory::getDBO();
    $query = $db->getQuery(true);
    $query->select(...)
   return $query;
 }

}

我可以在视图文件夹的 default.php 上打印查询结果!但我想要另一件事。

我在我的网站首页的自定义模块中有一个这样的表单:

<form action="" method="post">
<input type="text"  name="wordsearch" value="search">
.
.
<input type="submit" />
</form>

现在!

我不知道如何将此表单(使用 post 方法)发送到模型文件夹中的 getListQuery() 函数...怎么办?

我想当某人单击提交表单时,组件根据表单的值过滤查询 sql,然后向用户显示新结果!

我用谷歌搜索了几个小时,但没有机会解决。谢谢你的帮助。

4

1 回答 1

0

您可以按如下方式从模块提交表单到组件。

假设您的组件名称是com_helloworldThe 在您的模块表单中应该有以下内容。

<form action="" method="post">
<input type="text"  name="wordsearch" value="search">
.
.
<input type="hidden" name="option" value="com_helloworld" />
<input type="hidden" name="view" value="yourview" />
<input type="hidden" name="task" value="my_controller_fun" />
<input type="hidden" value="your_controller_file_name" name="controller">
<input type="submit" />
</form>

在此示例中,您的控制器文件应该具有my_controller_fun从控制器到模型的方法,您可以使用常规方法。此方法将获取控制器中的所有表单数据,然后您可以将其传递给模型。

详细的 :

在您的控制器文件中。

 function my_controller_fun(){
     $post_array = $_POST;
     $model = $this->getModel('Profile', 'UsersModel');//example for including profile model you can specify your model file name
     $model->function_inyourmodel($post_array);//this function should be in model 
 }

希望它的帮助..

于 2013-08-30T03:10:48.017 回答