【问题标题】:joomla module development with form - how to process带表单的joomla模块开发-如何处理
【发布时间】:2013-02-10 03:26:22
【问题描述】:

我正在创建一个简单的 Joomla 2.5 模块,它将有一个 html 表单。

mod_mymodule/tmpl/default.php:

<form method="post" id="myemailform" action="">
    <label for="ReferralName">Enter Name:</label><input type="text" name="name" value="<?php echo modCamcloudReferralHelper::getReferralName(); ?>">
    <label for="ReferralEmail">Enter Email Address:</label><input type="text" name="email">
    <label for="ReferralMessage">Enter Message (optional):</label><textarea class="message"></textarea>
    <span class="countdown"></span>
    <button type="submit" value="Send Email">Send Email</button>
    <?php echo JHtml::_('form.token'); ?>   
</form>

我有一个帮助类:

mod_mymodule/helper.php - 这只是有一些实用功能。

我的问题是在服务器端处理我的表单的通​​常约定是什么。我试图找到人们所做的事情的例子,但我似乎找不到任何东西。我是否将所有内容都放在帮助程序类中:

<form method="post" id="myemailform" action="..\helper.php">

或者类似的东西?提前致谢。

【问题讨论】:

    标签: joomla joomla2.5


    【解决方案1】:

    是的,您应该在模块助手类中进行表单处理。将任何逻辑保留在模板文件之外,您可以使用mod_mymodule.php 在包含视图文件之前调用帮助方法并分配变量。

    不要设置为表单动作帮助文件!我认为在您的情况下操作应该是同一页面,因此您也可以省略操作 url。

    编辑:根据 cmets 的要求,这将是您的 mod_mymodule.php 的内容

    // include helper file
    require_once dirname(__FILE__).'/helper.php';
    // call some method of the helper class
    $items = modMymoduleHelper::getItems();
    
    $moduleclass_sfx = htmlspecialchars($params->get('moduleclass_sfx'));
    // render view file from mod_mymodule/tmpl/default.php, $items is available in the view file
    require JModuleHelper::getLayoutPath('mod_mymodule', $params->get('layout', 'default'));
    

    【讨论】:

    • 由于我的帮助文件不是同一个目录,我是否必须使用表单操作指定帮助文件?不知道我是否理解这个机制?你能提供一个简单的例子吗?谢谢。
    • 当您将表单提交到同一页面时,您的模块将再次加载。 Joomla 将调用mod_mymodule.php,它应该负责调用辅助方法,并将必要的变量传递给视图mod_mymodule/tmpl/default.phpmy_module.php 既包含视图文件,又与助手类通信,Joomla 在包含您的模块时不会调用任何其他 php 文件
    • 我添加了mod_mymodule.php的例子
    • 啊完美,我想我明白了。所以我可以添加modMymoduleHelper::processForm(); 来处理mod_module.php 中的表单,然后在我的助手类中调用processForm() 函数。对吗?
    • 还有一个问题要问您:modMymoduleHelper::processForm(); 每次都会加载(如您所说)。只有当我的表单提交按钮被按下时,我如何调用它?
    猜你喜欢
    • 2011-07-12
    • 1970-01-01
    • 2012-05-30
    • 1970-01-01
    • 2012-08-03
    • 1970-01-01
    • 2010-11-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多