迅睿cms如何设置文章阅读密码?

二开需求描述

做个内容页判定密码访问,用户访问内容详情时,需要输入指定的密码才能正常浏览相关的详情内容。

需求开发思路

这个访问密码需要自定义一个模块字段,发表内容时,将阅读密码填写在该字段中。前端在调用时,做一个字段判断,如果该字段有内容,则表示是加密状态,需要输入正确密码才能浏览,输入密码验证的操作,可以用表单来接收相关数据;如果该字段没有内容,则表示无加密状态,可以公开浏览。

二开操作步骤

1、新建一个模块字段(笔者以news模块为例),如下图所示。

2、发布内容时,填写阅读密码,如下图所示。

3、在news模块中新建一个密码验证控制器的php文件

路径为/dayrui/App/News/Controllers,在该文件夹内新建一个名为Ydpw.php的文件,将下方代码复制进文件内。

<?php namespace Phpcmf\Controllers;
class Ydpw extends \Phpcmf\Common
{
    public function index() {
		$id = (int)$_GET['id'];
		$pwd = trim($_GET['pwd']);
		$this->_module_init();
		 $data = $this->content_model->get_data($id);
		if (!$data) {
			$this->_json(0, dr_lang('%s内容(#%s)不存在', $this->module['name'], $id));
		}
		if($pwd==''){
			$this->_json(0, '请填写阅读密码!');
		}elseif ($pwd!=$data['ydpw']) {
			$this->_json(0, '阅读密码不正确!');
		}
		$this->_json(1, html_entity_decode($data['content'])); 
    }
}

4、在news模块的show.html页面中加入密码验证框,代码如下所示。(样式可以自己根据实际情况自行调整) 

{if $ydpw}
<div class="input-group" id="ydpw_form">
	<input type="text" id="qy_ydpw" value="" class="form-control">
	<span class="input-group-btn"><a class="btn red" href="javascript:qy_ydpw();">验证密码</a></span>
</div>
<div id="content"></div>
 <script>
	function qy_ydpw() {
		$.get("{dr_url_prefix('index.php')}?is_ajax=1&s={MOD_DIR}&c=ydpw&id={$id}&pwd="+$("#qy_ydpw").val(), function(data){
			if (data.code) {
				$('#content').html(data.msg);
				$("#ydpw_form").hide();
			} else {
				dr_cmf_tips(0, data.msg);
			}
		}, 'json');
	}
</script>
{else}
{$content}
{/if}