建站系统中用户个性化页面的实现

news/2024/5/12 16:36:46/文章来源:https://blog.csdn.net/weixin_34128839/article/details/92056086

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

一个建站系统,如果想要在政府网站中使用,个性化页面通常是一个评测指标,所以无法避免,必须面对。

从技术层面讲,一旦涉及个性化,就会引入cookie,session等问题,这些都是cache的对立面,会对程序的性能造成严重影响。据我所了解,一般系统都是通过定制方式来解决这个问题。对于单实例系统这是可行的,但是对于多站点系统呢?

不能事先假设建站系统的使用者(站点设计者)的能力,强迫他们使用复杂的解决方案。这篇文章是我对这个问题的解决方案,只是一种可行的,主要是应付某种评测的解决方案。同时作为设计者的个性化帮助文档。

1、个性化入口
在建站系统中划出一个url空间作为个性化的入口。/wpersonal(我就把他定死了),对于我们的建站系统来说,就是在后台的“站点设计”页面中建立一个wpersonal目录,然后将你所需要的模板放在这个目录中即可。
您可以控制登陆方式,避免用户在登陆界面选择。比如:/wpersonal?dtLogin=true&loginMethod=qq,/wpersonal?dtLogin=true&loginMethod=LocalLogin,登出用 /verifyMe?dowhat=logout
 
a、认证,当浏览器指向/wpersonal时,如果用户已经登录,那么就显示,反之引导用户进入登录页面,登录之后返回此处。
b、默认个性化主页,如果个性化仅仅设计了一个主页面,通过css和其它技术展现个性化,那么只要将个性化的链接设置成某个模板即可。比如:/wpersonal/index.ftl。有些公司对css很感冒(招募精通css的意味着付出更多的工资),更喜欢用不同的页面来展示个性化成分,比如:/wpersional/style1.ftl,/wpersonal/style2.ftl。在这种情况下,需要在后台“个性化”元素里面定义一些记录。稍后会介绍“个性化元素”。

2、个性化内容
个性化内容非常宽泛,作为建站系统的设计者无法预知站点设计者的个性化思路。作为建站系统的设计者,当然希望能够满足站点设计者的所有要求,但这个很难做到(因为我不够聪明)。我只能给设计者提供以下设计思路,至于是否合理,可以在使用过程中相互交流。

个性化记录属性有:siteId,cat,f1,f2,f3,f4,f5,uniqueNumber

siteId是long,站点ID
cat:类别
uniqueFieldNum : 从左到右几个字段构成站点个性化记录的唯一性。(用户不会拥有矛盾的个性化条目,比如背景红色,背景蓝色不会同时拥有。)

注意,除了siteId,这些字段的解释是不固定的。作为站点设计者,你自己去添加自己去解释。下面我来提供一种解释方案仅供参考。

要求:
1、有两个风格的页面共用户选择,style1.ftl,style2.ftl
2、每个页面中显示用户选择要显示的内容块。

处理/wpersonal的servlet采取一种约定来处理默认主页的问题。当用户请求/wpersonal时,显示哪一张张页面是这样决定的:
(为了便于书写,个性化记录用json格式表示)
1、如果用户已经有了保存的偏好,比如:{siteId:5566,cat:'homepage',f1:'style1.ftl'},那么就显示wpersonal/style1.ftl
2、如果没有,那么就找到{siteId:5566,cat:'homepage',f1:'anydefault.ftl',f2:'default'},这个值必须在后台事先添加。
3、如果没有处理第二步,那么页面会提示找不到默认模板。

模板的选择问题解决了,接下来是如何显示用户定义的块呢?个性化记录的设计如下:
{siteId:5566,cat:'section',f1:'1234',uniqueNumber:3},这里f1的值是目录的ID,如果用户的自定义条目中有这个条目,就显示这个目录,反之则不显示。在freemarker模板里面可以这么书写:
<# if(siteUserSettings.findByF1Mine('section','1234')??)>
说明用户选择了这个目录,显示出来。这是最简单的情况,有或者没有而已。不牵涉到在哪里,怎么显示等等。
</#if>

接下来是如何保存用户的偏好,这是个单调而重复的工作,我专门为此写了一个基于yui的js插件,当然也是基于最简单的情况而写,你可以查看js源码,写自己的插件以满足更复杂的要求。


下面以一个网站作为说明:

1、进入http://www.fhsafety.gov.cn,点击上面的“登陆个性化“,如果用户没有登陆,将引导到登陆页面,登陆后返回个性化页面。

2、在后台的”网络域名-》个性化设置“,预先加入以下条目。

f1 f2 f3
homepage
style100.ftl
default 青青河草
homepage
style101.ftl

蓝色忧郁
section 84224 安全动态
section 84225 通知公告
section 84135 矿山监管









这是个性化选择页面:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta charset="utf-8">
<title>WebCus Form  Test Suite</title>
</head>
<body class="yui3-skin-sam"><div id="webcus-c"><script type="text/x-template"><form action="#"><p>风格选择:</p><% Y.Array.each(this.webcuss.getByCat("homepage"),function(one){ %><label><input type="radio" name="theme" id="webcusitem-<%= one.id %>"<%= one.mine ? "checked" : "" %>><%= one.f3 %></label><br/><% }); %><p>----------------------------------</p><p>栏目选择:</p><% Y.Array.each(this.webcuss.getByCat("section"),function(one){ %><label><input type="checkbox" id="webcusitem-<%= one.id %>"<%= one.mine ? "checked" : "" %>><%= one.f2 %></label><br/><% }); %><input type="submit" value="保存" style="margin:10px 30px;"></form></script>
</div><script src="${yuiSeed}" type="text/javascript"></script>
<script type="text/javascript"><#include "webcus-form-page.js"></script>
<script type="text/javascript">_WEBCUS_FORM({siteId:${site.id?c},container:'#webcus-c',afterSave: function(){alert('以保存!'); //这里可以使用任意js代码。location.href = "/wpersonal";},updateCats:[]});
</script></body>
</html>

这是style100.ftl

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta charset="utf-8">
<title>WebCus Form  Test Suite</title>
</head>
<body class="yui3-skin-sam"><p>style100,默认,<a href="webcus_form.ftl">设定个性化</a></p><#if (siteUserSettings.hasMyCustoms())> <#-- 如果有个性化设置,说明用户至少操作过 --><#if siteUserSettings.hasMyCustoms("section")> <#-- 虽然用户曾经自定义过,但有可能仅仅修改了主题什么的,还要判断有没有自定义目录 --><#list siteUserSettings.findByCatMine("section") as mc><#assign sec = site.findSection(mc.f1)><div><h2>${sec.name}:</h2><ol><#list sec.articlesPage(1,8) as ar><li><a href="${ar.url}">${ar.getTitle(20,"...")}</a></li></#list></ol></div></#list><#else><#list siteUserSettings.findByCat("section") as mc> <#-- 注意,这里是findByCat,而不是findByCatMine 全部显示 --><#assign sec = site.findSection(mc.f1)><div><h2>${sec.name}:</h2><ol><#list sec.articlesPage(1,8) as ar><li><a href="${ar.url}">${ar.getTitle(20,"...")}</a></li></#list></ol></div></#list></#if>
<#else><#-- 这里当然是全部显示,因为用户还没有自定义操作过,当然你可以决定此种情况下,显示哪些内容 --><#list siteUserSettings.findByCat("section") as mc><#assign sec = site.findSection(mc.f1)><div><h2>${sec.name}:</h2><ol><#list sec.articlesPage(1,8) as ar><li><a href="${ar.url}">${ar.getTitle(20,"...")}</a></li></#list></ol></div></#list></#if></body>
</html>

有没有发现模板里有重复代码?请考虑使用freemark的宏。


您可以登录建站系统,自己尝试:http://sb.m3958.com


转载于:https://my.oschina.net/jianglibo/blog/167259

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_760795.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

建立社交网站(Social network)的WordPress的三大顶级插件(译)

面试的时候被问到如何使用CMS建设社交网站&#xff0c;完全一头雾水&#xff0c;然后去google、百度了&#xff0c;发现可以使用Drupal或Joomls或WordPress快速建立&#xff0c;特别是WordPress&#xff0c;有一些建设社交网站的现成插件 本文翻译自&#xff1a;http://wpmu.or…

网站迁移--Tomcat为前端的网站迁移

1.修改tomcat server.xml的端口8080改成80.2.Server.xml添加&#xff1a;<Host name"localhost" appBase"webapps"unpackWARs"true" autoDeploy"true"xmlValidation"false" xmlNamespaceAware"false"><…

在IE9中为你的网站自定义JumpList

Windows7允许你将任何一个应用程序固定到Windows状态栏以方便日后使用&#xff0c;你可以将这个功能看作是快捷方式的一种升级&#xff0c;毕竟&#xff0c;它比快捷方式看起来要人性化许多。这是微软在给Windows7设置的许多人性化的小功能中的一个亮点&#xff0c;相信许多使用…

探讨国外网站设计动用的成本,网页设计师必看

【摘 要】我们都承认国外的网站设计价格高&#xff0c;同样一个看似简单的网站价格是国内几倍或者数倍。通过此文&#xff0c;希望国内的网站设计师同行稍稍静下心来&#xff0c;不要浮躁... 同样是一个网站设计&#xff0c;国外的设计却蕴涵了设计背后的更多东西&#xff0c;…

安全狗云备份、服云、网站安全中心web端全面更新

2019独角兽企业重金招聘Python工程师标准>>> 近日&#xff0c;安全狗对web端安全狗服云、云备份、网站安全中心进行了全面的升级更新&#xff0c;将为安全狗的用户朋友们带来全新的、更好的体验。 之前有很多用户表示能否用人民币 购买空间&#xff0c;用安全…

给网站添加浏览器标题图标favicon.ico

2019独角兽企业重金招聘Python工程师标准>>> 嘿嘿&#xff0c;比较简单&#xff0c;直接贴代码了(常见的浏览器如IE、Firefox、Chrome都适用)&#xff1a; <head><link rel"icon" href"img/favicon.ico" type"image/x-icon"…

新手学习在Ubuntu 14.04搭建Javaweb网站(1)--设置root密码

2019独角兽企业重金招聘Python工程师标准>>> 1.使用VMware安装了Ubuntu 14.04 x64位版&#xff0c;VMware根据ISO识别出是安装的Ubuntu&#xff0c;所以使用VMware Easy Install&#xff0c;安装的时候要会要求输入账号和密码 2.安装完成后&#xff0c;使用创建的账…

分析网站配色的Firefox插件[前端工具]

推荐一个Firefox插件&#xff0c;Rainbow Color Tools&#xff0c;一款网页取色工具&#xff0c;有个特色功能是能够分析网站的配色&#xff0c;如图&#xff1a; 插件&#xff1a; 下载Firefox插件Rainbow Color Tools

20个令你喜悦的食品相关网站案例推荐

食品相关的网站是越来越好。以帮助那些热爱美食的人群。新的餐馆的菜谱中&#xff0c;总是有一些新的东西弹出。所以今天我们决定收集一些很好的例子来激励你。你会看到&#xff0c;食品网站通常都喜欢用大和多彩的摄影&#xff0c;优雅的排版&#xff0c;和偶尔细微的纹理的东…

分享25个漂亮的国外绿色网站设计作品

在现在的网页设计中&#xff0c;绿色是设计师们最喜欢选用的颜色之一&#xff0c;绿色代表着活力、生长、宁静和青春。今天&#xff0c;本文收集了25个漂亮的国外绿色网站设计作品与大家分享&#xff0c;希望能带给你灵感&#xff0c;一起欣赏。 1. Reap 2. Zaarly 3. Nebud-Jo…

使用wmap扫描指定网站并获取网站漏洞信息

前置条件 靶机&#xff1a;OWASP_Broken_Web_Apps_VM_0.94 靶机IP&#xff1a;192.168.88.138 初始密码是&#xff1a;root/owaspbwa kali安装的镜像为&#xff1a;kali-linux-2019.1a-amd64.iso KaliIP为&#xff1a;192.168.88.132 使用wmap服务扫描web服务 进入到Met…

网站扫描工具paros proxy(v3.2.13)安装与使用总结

2019独角兽企业重金招聘Python工程师标准>>> 1、安装 (1) 安装JRE 首先确保已安装JRE [Java Run Time Enviroment (JRE) 1.4 (or above) ] 注意&#xff1a;一定要先安装JRE&#xff0c;然后再安装paros proxy&#xff0c;如果先安装paros proxyr后安装JRE&#x…

2011年国外最受欢迎的15个网站

2019独角兽企业重金招聘Python工程师标准>>> 面向全球电子商务知识库网站eBizMBA公布了2011年国外最受欢迎的15个网站&#xff1a; 1 谷歌 eBizMBA排名第1&#xff0c;估计每月访客900,000,000人&#xff0c;竞争力排名第1&#xff0c;Quantcast排名第1&#xff0c;…

网站配置https,免费ssl证书下载和安装,个人是nginx服务器

免费获取ssl证书网站&#xff1a;https://www.sslforfree.com 看着三个按钮&#xff0c;英语和我不是很熟&#xff0c;就不一一翻译了。 1、就说具体操作步骤了&#xff0c;域名解析&#xff0c;添加两条 txt 记录&#xff0c;对应 参数、值,见上面图片第二条。生效时间可以设置…

HTML5浏览器测试网站汇总

我经常看到有很多人询问HTML5某个特性当前各浏览器的支持情况。的确&#xff0c;因为HTML5内容庞大&#xff0c;特性众多&#xff0c;而浏览器的支持情况又混杂不一&#xff0c;随时都有可能变化&#xff0c;所以了解起来比较困难。在这里&#xff0c;我汇总了一些常用的网站供…

构建LAMP动态网站

虽然关于LAMP架设的文章&#xff0c;51cto上已经有很多很多了&#xff0c;但我还是想写一篇这样的文章&#xff0c;来对自己的工作经验做个总结。我将把《构建LAMP动态网站》分两篇文章来进行讲解&#xff0c;第一篇首先是搭建一个LAMP的WEB框架&#xff0c;第二篇是在这个WEB框…

Linux:安利一个下载rpm包的网站

网站&#xff1a;http://rpm.pbone.net 比如要下载&#xff1a;container-selinux&#xff0c;可以搜索&#xff0c;搜索结果如下&#xff1a; 建议复制下载链接&#xff0c;使用迅雷下载&#xff1a;

已将此网站报告为不安全的解决办法

遇到问题&#xff1a;我使用的是IE9浏览器这几天访问51cto.com的网站总显示下图&#xff1a; 心想&#xff0c;我只是访问51cto.com的学习网站&#xff0c;并没有访问无关的。公司应该也没有设置啥禁止访问这个的。访问其他网站&#xff0c;也没出现这个提示&#xff0c;于是就…

.NET_.NET 发布(publish)网站_01-2

http://msdn.microsoft.com/zh-cn/library/377y0s6t(VS.80).aspx 本文内容 预编译写入预编译输出Visual Web Developer 允许发布&#xff08;publish&#xff09;网站&#xff0c;将编译网站&#xff0c;并输出复制到指定的位置&#xff0c;如成品服务器&#xff08;正式服务器…

网易帐号通帮你一一列举邮箱注册过的所有网站

对于我们来说&#xff0c;邮箱除了收发邮件&#xff0c;最多的用途就是注册账户了&#xff0c;比如论坛、购物、移动服务等等&#xff0c;久而久之&#xff0c;我们使用一个邮箱地址注册过哪些网站都记不清了。 网易帐号通&#xff0c;帮你快速检测邮箱注册过的网站。 最近网易…