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样式,提示文字加入了自己的li
<extend name=”ba
<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 st
<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,进行交流哟!
最佳答案