在现有页面中包含CodeIgniter表单

在现有页面中包含CodeIgniter表单,codeigniter,Codeigniter,我希望在现有的php页面中包含CodeIgniter注释表单。目前,我正在将评论表包括在内 $_SERVER["REQUEST_URI"] = "comment/index2/".$page; require_once($directoryLevelPrefix . "staff/codeigniter/index.php"); 但是,当codeigniter加载视图以显示表单结果时,我会丢失包含表单的原始php页面上的内容。我尝试在表单数据添加到数据库后添加重

我希望在现有的php页面中包含CodeIgniter注释表单。目前,我正在将评论表包括在内

$_SERVER["REQUEST_URI"] = "comment/index2/".$page;
                require_once($directoryLevelPrefix . "staff/codeigniter/index.php");
但是,当codeigniter加载视图以显示表单结果时,我会丢失包含表单的原始php页面上的内容。我尝试在表单数据添加到数据库后添加重定向,以重定向到我的原始php页面,例如

redirect($_POST['return'])
但是我想传递一些变量,比如“谢谢你的评论”,这会导致一个headers ready sent错误


替代方法可能是使用ajax,但我希望在提交评论时整个页面都能刷新。

这是因为CodeIgniter是一个设计用于处理显示整个网页的框架。您不能只包含它,因为它试图发送新的标题和所有内容

两种解决方案:

  • 您可以将codeigniter页面作为主页加载,只需像视图文件一样包含原始php代码。这取决于原始php文件的设置方式

  • 您可以使用cURL从自己的服务器调用页面,以字符串形式获取html输出,然后将其回显到当前页面。但这不是很有效

  • 正如C.Scott Asbach提到的,您可以在iframe中加载整个页面。但可能不是个好主意,据我所知,iFrame已被弃用,并会导致网站混乱


最好的方法可能是尽量避免使用CodeIgniter在现有页面中显示子表单:-)

我也有类似的需求,我只是在iframe中加载了CodeIgniter表单。这是在WordPress页面上放置一个联系人表单。我选择了iframe,因为我的需求仅限于这一种形式,我觉得它不需要以任何方式尝试集成CodeIgniter和WordPress

这种方法的一个优点是,表单可以提交并加载确认页面、错误页面,甚至是多页面表单,所有导航都发生在iframe中,因此在使用表单时,您永远不会离开您所在的页面。另一个优点是表单是完全可移植的


当然,缺点是您可能不喜欢使用iframes,这可能是基于您的需求和偏好的许多事情。

选项1会让我的同事很不舒服。我没想过第二种选择,但它很不雅观,不是吗?我想我应该考虑我不能包括Codeigniter,因为它发送头。但我认为必须有一种方法来包含一小部分CI代码,因为许多人必须这样做,因为他们正在将站点迁移到CI,并且需要一个中间阶段。不确定。我猜人们通常用CI做一个完整的项目,或者至少用它重写他们站点的部分,但这并不是你认为包含在另一个php脚本中的那种。只要您调用index.php,它就会尝试将整个页面输出到浏览器。一些在CI方面比我更高级的人可能知道一种方法来欺骗它停止发送标题,但对我来说这似乎不是一个好主意。不确定您是否解决了这个问题,但您可以通过返回视图而不是打印来解决它。然后您可以从控制器回显视图。但是,我不知道这是否仍然包括CI的头。