Codeigniter PHP - 在锚点加载视图

Posted

技术标签:

【中文标题】Codeigniter PHP - 在锚点加载视图【英文标题】:Codeigniter PHP - loading a view at an anchor point 【发布时间】:2012-09-14 01:10:28 【问题描述】:

我在一个长页面的底部有一个表单,如果用户填写了表单但它没有验证页面是否以典型的 codeigniter 方式重新加载:

$this->load->view('template',$data);

但是,由于表单位于页面底部,因此我需要将页面加载到那里,就像使用 html 锚点一样。有谁知道如何在codeigniter中做到这一点?

我无法使用 codeigniter

redirect();

函数,因为它丢失了对象并且验证错误消失了。我用过的其他框架,比如 Yii,你可以调用重定向函数,比如:

$this->redirect();

这解决了问题,因为您保留了对象。我试过使用:

$this->index()

在控制器内,它可以作为重定向正常工作,但验证错误出现在另一种方法中,即当前页面的加载位置:

$this->item($labs)

但是当我使用它时,它会卡在一个循环中

有什么想法吗?我在网上看到很多这个问题,但没有明确的答案。我正在研究使用 codeigniter“闪存数据”,但认为这有点矫枉过正。

干杯。

【问题讨论】:

@"overkill" 是什么让你这么认为? IMO 这是一个非常好的功能,我想这正是为这些事情而设计的。 你愿意使用 javascript 吗? @goldenparrot 也许我对那句话有点矫枉​​过正。我不反对闪存数据,但认为可以通过其他方式完成。 @aziz.punjani 我已经在使用 javascript 进行验证,但这是单独的,因为它适用于非 javascript 用户。虽然欢呼 【参考方案1】:

我不能亲自保证这一点,但根据this thread,如果您将锚附加到表单的action,它将起作用。

CodeIgniter 助手:

<?php echo form_open('controller/function#anchor'); ?>

或普通 HTML:

<form method='post' action='controller/function#anchor'>

如果您愿意使用 Javascript,您可以轻松检测到 $validation_failed 变量并适当地滚动。或者,更好的是,使用 AJAX。

另一种选择是将表单放在页面顶部附近?

【讨论】:

很高兴找到乔丹,这很有效!我什至没有尝试过,因为我确信它不会起作用。 Codeigniter 必须将它内置到路由控制器中才能使用哈希“#”分割任何 url 字符串。谢谢老兄! @JamesBillings 乐于提供帮助 :)【参考方案2】:

好的,据我了解您的问题,它与后端(codeigniter)的关系并不太多。您希望页面底部的表单是“what-users-sees-on-page-load”(因为您提到了锚点)。

现在,您可以使用以下方法为验证错误消息设置分隔符:

echo validation_errors('<div id="bottom_form_error">', '</div>');

使用jQuery ScrollTo,执行:

$( function()  $('#bottom_form_error').ScrollTo();  );

并且,用户将被滚动到页面底部的错误。不要忘记也包含 jQuery。

锚散列片段点击不同 - 它以∞ 的速度滚动。

我希望这是你想要的。


附:我忽略了你在这行下面说的话:

有谁知道如何在 codeigniter 中做到这一点?

因为我觉得这与问题无关。

【讨论】:

评论与验证有关。但是,我认为 aziz 真的想知道他是否可以使用 javascript 来滚动。即使 aziz 没有,我认为这是一个有效的问题:如果表单位于底部,OP 是否想要使用 javascript 滚动到验证错误?如果是,那么这是一种方法。 谢谢,但我已经用 JS 覆盖了所有内容。如果用户没有 JS 那是个问题。这就是codeigniter在正确的位置重新加载页面的全部内容,只有在禁用JS的情况下才能使用锚标记来实现。不过感谢您的帮助!

以上是关于Codeigniter PHP - 在锚点加载视图的主要内容,如果未能解决你的问题,请参考以下文章

:在锚点上悬停过渡

为啥这个 CSS 转换在锚点内的 SVG 上不起作用

如何在锚点处渲染 EJS

将字体真棒跨度图标放置在锚点内的文本上方

bootstrap 4,光标悬停在按钮上时不会改变,但在锚点上会改变

在锚点上触发 jQuery 的 hover() 以显示包含 LI 的下拉菜单?