【问题标题】:Page not found error once submit form in addons contact_directory using concrete5?使用concrete5在插件contact_directory中提交表单后找不到页面错误?
【发布时间】:2012-07-24 14:12:18
【问题描述】:

我已经购买了使用concrete5的附加模块contact_directory,现在我需要根据我的要求进行自定义。

所以我需要更改文件 packages\contact_directory\blocks\contact_directory\view.php,我在 view.php 文件所在的同一目录中创建了 test.php 文件,所以我的表单标签是 url('contact_directory/test ')?>">

所以请告诉我哪里错了?

【问题讨论】:

    标签: concrete5 concrete


    【解决方案1】:

    Concrete5 对块使用松散的 MVC 架构。这意味着,与“普通的旧”php 站点不同,在这些站点中,您有一个在访问某个 URL 时运行的文件,您的块的控制器总是被调用。但是你可以在控制器中拥有不同的函数来响应不同的 url,在 C5 世界中,这些被称为动作。

    所以在你块的 view.php 文件中,把你的表单标签改成这样:

    <form method="post" action="<?php echo $this->action('test'); ?>">
    

    然后在controller.php 文件中,创建一个名为“action_”的新公共函数,后跟您传递给表单标签的内容。在您的示例中,这将是:

    public function action_test() {
        //do stuff here
    }
    

    现在你会遇到一个问题,因为 Concrete5 阻止 总是 渲染“view.php”模板(没有简单的方法告诉它使用“test.php”文件相反,例如)。这里最简单的解决方案是使用“if”语句将两个模板组合到您的 view.php 文件中。例如:

    <?php defined('C5_EXECUTE') or die(_("Access Denied.")); ?>
    
    <?php if ($controller->getTask() == 'test'): ?>
    
        <!-- Put all of the code from your test.php file here -->
    
    <?php else: ?>
    
        <!-- Put all the code from your view.php file here -->
    
    <?php endif; ?>
    

    需要注意的一点 - 如果您的块被放置在页面默认值或全局区域(或堆栈)中,那么表单操作可能不会提交到正确的位置。不过我不确定——这是我在 5.4.2 版本中遇到的一个问题,但从那时起它可能已经修复了。

    PS - 如果您想查看一些在 C5 块中使用此表单处理内容的示例代码,请下载我的免费电子邮件列表注册插件 (http://www.concrete5.org/marketplace/addons/email-list-signup)。

    【讨论】:

      猜你喜欢
      • 2019-01-17
      • 1970-01-01
      • 2013-07-28
      • 2020-09-04
      • 2019-11-01
      • 2012-10-01
      • 2023-03-23
      • 1970-01-01
      • 2020-02-13
      相关资源
      最近更新 更多