我已经使用concrete5购买了附加模块contact_directory,现在我需要根据我的要求进行定制。
所以我需要更改文件包\contact_directory\blocks\contact_directory\view.php,我在 view.php 文件所在的同一目录中创建了 test.php 文件,所以我的表单标签是 url('contact_directory/test')? >">
所以请告诉我哪里错了?
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)。