Onethink增加页面及密码保护功能

浏览:1070 发布日期:2016/04/11 分类:OneThink讨论 关键字: ONETHINK THINKPHP
【原创保护,转载请注明该网站出处,感谢了】
http://www.cleanbing.cn/?p=1099

1 本文目标
本文要实现的目标是:网站上制作一个工作台的页面,里面的内容是工作中常用的链接,以及团队人员列表,当前项目的进度等工作信息,进入该页面必须输入密码。

【页面】的概念来自于【WordPress】,WordPress中将【文章】与【页面】单独对待。【页面】主要用于单页聚合一些内容,而【文章】主要用于分类的表达信息。

实现的思路

用【文章】的一个分类【页面】来实现,【页面】这个分类下,每个文章即为单独的页面。通过其id来进行展示和控制。
为【文章】整体增加【密码保护】字段,填空即为无密码,对原有文章不影响
在article controller中增加对【密码保护】字段的处理,需要密码则先进行密码弹窗验证,通过后再显示页面内容
因此,如果某篇文章需要密码保护,也一并实现了


详细实现过程如下。

2 后台配置
定义新的文章分类,取名为【页面】

1

修改【article】模型

101

新增【pwd】属性

2

【表单展示顺序】中,将【pwd】拖到【基础】中的最后

4

顶部导航栏点击【内容】,随便点开一篇已有的文章,验证【pwd】字段显示了

5

在分类【页面】中,创建一篇文章,取名为【工作台】,在该文章的【密码保护】中填入密码

6

在【系统】-【导航管理】中,新增一个导航【工作台】,填入链接示例如下(id就是刚才创建的页面分类下的那篇文章的id,根据你自己的站点进行对应的修改)

Article/detail?id=16

7

回到home主页,验证刚才新增的【工作台】导航显示出来了:

8

点击【工作台】,验证链接正常工作:

9

至此,我们完成了文章模型添加【密码】字段,新增了一个【工作台】的导航,点击后会显示【页面】分类下的某一篇固定文章,该文章就相当于一个独立的页面。该文章可用编辑器的富文本方式编辑,也可切换到html模式进行高级编辑,也就实现了通过后台可以创建很cool的页面的功能。

接下来修改代码,对设置了【密码】的文章进行密码保护。

3 代码修改
3.1 修改Controller判断密码
Application\Home\Controller:ArticleController.class.php

/* 文档模型详情页 */

public function detail( $id = 0, $p = 1, $pwd=”” ){



$info = $this->getDocDetail( $id, $p );

//cleanbing added: for password protection

if( $info[‘pwd’] ){ //如果文章指定了密码

if( $pwd ){ //如果用户输入了密码

if( $pwd != $info[‘pwd’] ){ //如果输入密码与指定密码不一致

$this->error(‘亲,密码错了‘,”,5); //跳转到error页面,等待5秒后回到本页面

return;

}

}else{

$this->assign(‘docid’, $id); //docid用来保存当前这篇受到密码保护的文章的id,用于待会提交密码时指定文章id

$this->display( “pwd” ); //用新增的pwd.html来显示密码保护

return;

}

}



/* 模板赋值并渲染模板 */

$this->assign( ‘category’, $info[‘category’] );

$this->assign( ‘info’, $info );

$this->assign( ‘page’, $p ); //页码

//dump( $info );

$this->display( $info[‘tmpl’] );

}

3.2 增加密码保护view
\Application\Home\View\bayview\Article,新增pwd.html,提示密码保护,并允许用户输入密码。

<!– 原子力量updated:更新为BT3样式,提示文字加入了自己的link –>

<extend name=”base/common”/>



<block name=”toptext”>

<form action=”{:U(‘detail’)}” method=”post” class=”form-horizontal doc-modal-form”>

<div class=”col-md-8 col-md-offset-2″>

<div class=”col-md-12 text-center”>

<h1>本页面受到密码保护,请输入访问密码:</h1>

</div>

<div class=”col-md-12″>

<div class=”input-group”>

<input type=”hidden” value=”{$docid}” name=”id”>

<span class=”input-group-addon” id=”basic-addon1″>密码</span>

<input type=”password” name=”pwd” class=”form-control” placeholder=”请输入密码” aria-describedby=”basic-addon1″>



</div>

<div class=”text-center”>

<button type=”submit” value=”submit” class=”btn-lg btn-success”>Submit</button>

</div>

</div>

</div>

</form>

</block>

<block name=”maindown”></block>



3.3 去掉page里的上一篇下一篇
修改\Application\Home\View\bayview\Article\article:detail.html,加入红色部分,对page分类里的文章不显示上一篇和下一篇。

<div class=”panel panel-white”>

<div class=”panel-heading”>

<span style=”font-size:20px”>{$info.title}</span>

<if condition=”$category[‘name’] neq ‘page'”>

<article:prev name=”prev” info=”info”>

<span class=”label label-primary”><a href=”{:U(‘?id=’.$prev[‘id’])}”>上一篇</a></span>

</article:prev>

<article:next name=”next” info=”info”>

<span class=”label label-primary”><a href=”{:U(‘?id=’.$next[‘id’])}”>下一篇</a></span>

</article:next>

</if>



</div>

<div class=”panel-body”>

<!– Contents

================================================== –>

<section id=”contents”>{$info.content}</section>

<hr/>

{:hook(‘documentDetailAfter’,$info)}

</div>

</div>



4 最终效果
导航栏点击【工作台】

10

输入错误密码无反应(因为暂时没有做密码错误的页面,可以自行添加的哈),输入正确密码后,进入页面显示该文章完整内容

11





5 总结一下
通过这个例子,你应该对OneThink的模型配置,文章模型,文章的分类,页面与文章的区别和巧用,通过controller进行密码验证,通过view控制显示等OneThink的使用熟练掌握了,在此基础上你可以对OneThink的文章、分类、导航、模型得心应手。

大家可以看下我用OneThink做的公司官网,其中用到了我之前分享的【创建团队模型】显示团队成员;文章编辑显示【大事记】时间轴;【文章背景】控制切换文章顶部大图;【聚合分类】直接显示分类下多篇文章内容;还有本文分享的【密码保护页面】创建工作台。。。。等等技术。

若有更多问题,欢迎加入我的QQ群:互联网开发团 457634030,进行交流哟!
最佳答案
评论( 相关
后面还有条评论,点击查看>>