首页 » 收集 » 正文内容
typecho评论表单第一次提交失效的问题
寻梦xunm| 484| 收集
1年前
超过673天 温馨提示
本文最后更新于2022年11月17日,已超过673天没有更新,若内容或图片失效,请留言反馈。

这篇文章解决了这几天博客评论功能的问题,注意看看。
最近更换新界面,但是后台的评论数量却突然几乎没有任何增长了,一开始我还以为是之前cdn做了用户线程限制导致的问题,但是昨晚已经对限制进行了调整,不会出现影响用户体验的情况了。于是今天稍微测试了一下评论的功能,果然发现了问题的所在。在访客模式下,无论怎么提交,都会在当前页面刷新,进不了后台数据,而如果是注册用户,第一次提交会直接刷新当前页面,第二次之后才可以正常提交。
折腾了几个小时,思考了很多可以解决的办法,检查了js,增加了token提交字段,都没有任何用处。
直到我看了官方默认的评论表单区域,代码是这样的:

<div id="<?php $this->respondId(); ?>" class="respond">
    <div class="cancel-comment-reply">
    <?php $comments->cancelReply(); ?>
    </div>

    <h3 id="response"><?php _e('添加新评论'); ?></h3>
    <form method="post" action="<?php $this->commentUrl() ?>" id="comment-form" role="form">
        <?php if($this->user->hasLogin()): ?>
        <p><?php _e('登录身份: '); ?><a href="<?php $this->options->profileUrl(); ?>"><?php $this->user->screenName(); ?></a>. <a href="<?php $this->options->logoutUrl(); ?>" title="Logout"><?php _e('退出'); ?> &raquo;</a></p>
        <?php else: ?>
        <p>
            <label for="author" class="required"><?php _e('称呼'); ?></label>
            <input type="text" name="author" id="author" class="text" value="<?php $this->remember('author'); ?>" required />
        </p>
        <p>
            <label for="mail"<?php if ($this->options->commentsRequireMail): ?> class="required"<?php endif; ?>><?php _e('Email'); ?></label>
            <input type="email" name="mail" id="mail" class="text" value="<?php $this->remember('mail'); ?>"<?php if ($this->options->commentsRequireMail): ?> required<?php endif; ?> />
        </p>
        <p>
            <label for="url"<?php if ($this->options->commentsRequireURL): ?> class="required"<?php endif; ?>><?php _e('网站'); ?></label>
            <input type="url" name="url" id="url" class="text" placeholder="<?php _e('http://'); ?>" value="<?php $this->remember('url'); ?>"<?php if ($this->options->commentsRequireURL): ?> required<?php endif; ?> />
        </p>
        <?php endif; ?>
        <p>
            <label for="textarea" class="required"><?php _e('内容'); ?></label>
            <textarea rows="8" cols="50" name="text" id="textarea" class="textarea" required ><?php $this->remember('text'); ?></textarea>
        </p>
        <p>
            <button type="submit" class="submit"><?php _e('提交评论'); ?></button>
        </p>
    </form>
</div>

注意一下可以看到,它莫名奇妙的给form外部的div设置了一个ID,并且通过<?php $this->respondId(); ?>调用了一个数字。起初我是想,这个地方和评论的提交感觉没什么关系,表单的提交难道还和div的ID有关吗,而且typecho又没什么可以识别这个id的js。

事实证明我错了,在给我的评论form表单用这个div包起来之后,问题竟然解决了【无语】。

所以,如果在开发typecho模板的过程中,发现评论提交无效,解决办法就是:

<div id="<?php $this->respondId(); ?>" class="respond">
表单代码
</div>

另外,为了避免重复提交之类的问题,可以给表单增加一个字段,调用token,代码如下:

<?php $security = $this->widget('Widget_Security'); ?>
<input type="hidden" name="_" value="<?php echo $security->getToken($this->request->getReferer())?>">

文章来源于:https://www.ruletree.club/archives/889/

0 赞 or 打赏
喜欢就打赏一点
微信 支付宝
  1. 寻梦xunm的头像
    寻梦xunm

    1年前 . LV.0

    ajax无刷新评论测试

    Windows 火狐浏览器 重庆市
    1. 寻梦xunm的头像
      寻梦xunm

      1年前 . LV.0

      @寻梦xunm

      二级评论回复测试

      Windows 火狐浏览器 重庆市
      1. 寻梦xunm的头像
        寻梦xunm

        1年前 . LV.0

        @寻梦xunm

        终于搞定评论了

        Android 夸克浏览器 重庆市
隐私
Q Q:1340326824
邮箱:vipshiyi@qq.com
QQ群:422720328

我的音乐

微博客-专为自己编写开发的源码