cnitblog.com/lxasp - - 有一种信念叫做编程
|
posts - 54, comments - 34, trackbacks - 0, articles - 0
|
|
置顶随笔
代码生成器信息系统开发技术解决方案:Template Engine + JSON + HTA + PHP/ASP/JSP/JS Framework
用户中心系统访问权限架构简述
访客:Guest ↓↓注册:Signup ↓↓登录:Login{Usr,Pwd} 个人:Person→登入:Enter{Usr,Pwd}→应用:App { 类目:Class └模块:Modal └动作:Action[RecordsFilter:{组别:Group,分片:Place}] └表单:Form[FieldsFilter:{下拉:GroupCombo,隐藏:GroupHide}] └表格:Grid[纯列表:ListGrid、可编辑:EditGrid] }
特点:简单、灵活、强大!
权限粒度严格细分 能够挂接多种系统 便于发现所需功能 不需要无限分类树 开发省力容易配置
一套信息系统开发的获得成功的三大要点:
一、前提:物资到位;
包括两方面——资金:周付工资(500--2000元/周);硬件:室内安静、空调、暖气、办公桌、办公椅、电脑主机、笔记本、多个大屏幕显示器、服务器。
二、重点:跟踪到位(目前最欠缺的);
提供一名或多名需求分析跟踪人员,提供开发人员任务提醒和开发质量监督,以及后勤支持包括:餐饮、娱乐、旅游等。买卖双方应该是互相服务,而不是单向地谁对谁服务的事情;除了卖方经理带买方的领导出去消费、娱乐、旅游,而且还要买方的跟踪人员带卖方的开发人员出去消费、娱乐、旅游。
三、保障:制度到位。
领导要足够重视信息系统在单位中的应用,制定与信息系统相关政策规章制度,促使业务流程围绕信息系统为中心畅通接轨,通过信息系统而去规范原有的业务流程,为系统推广使用扫清障碍。
这三要点是环环相扣,相互相承的。第一点没有的条件下是不可能有二、三点的,第二点没有做好的时候就不能先做第三点!目前最多的问题是第二点没有做好的情况下做了第三点,这样只会使得原有的业务流程出现更多突出问题! 2006-2017 Lead eXperience Application System Provider -- 领先体验应用系统提供者 Lead eXperience Application System Platform -- 领先体验应用系统平台
数据字典的设计需要依照模板和必备的附加字段(应该从长计议,包含:时间、地点、人物)来设计
◇生成取字段名的类代码(三重命名:DataName, CodeName, lang[chs, eng, ...]->ViewName)
◇生成添加、修改各个字段的表单控件的HTML模板
◇生成添加、修改各个字段的表单模板的操作代码
◇生成添加、修改各个字段的数据库操作代码
◇生成“查看/显示”功能的各个字段的HTML模板
◇生成“查看/显示”功能的各个字段的数据库操作代码
◇生成列表分页(Grid)和快速搜索的HTML模板
◇生成列表分页(Grid)和快速搜索的相关操作代码
◇生成“高级搜索”功能的各个字段的HTML模板
◇生成“高级搜索”功能的各个字段的数据库操作代码
◇生成连接每个功能跳转调用的代码
◇生成常用的功能性操作的代码(一些标志位的修改:审核、回收站等)
※应该将前台和后台的用户和管理员的控制面板整合,统一为“在权限控制下(ACL)的用户操作中心”
database->modal->controller->view->
lang[chs, eng, ...]->form->inputs
lang[chs, eng, ...]->grid
应该简化为:
config->code builder{
database->modal->controller->view->
lang[chs, eng, ...]->form->inputs
lang[chs, eng, ...]->grid
}
|
2017年4月27日
摘要: 关系数据库的设计思路和程序可重用的设计思路是相反的。
一套数据库应用系统的设计就是要把这两种相反的设计思路融合在一起。
示例
学生
姓名
证件类型
证件号码
电子邮箱
手机号码
教师
姓名
证件类型
证件号码
电子邮箱
手机号码
关系数据库的设计思路是【拆】
学生基本表
教师基本表
学生证件表
教师证件表
学生联系表
教师联系表
程序可重用的设计思路是【合】
设计一个用户的基类
然后把学生和教师继承于用户的基类
用户
学生
教师 阅读全文
2016年5月6日
本人懂得 visual basic,delphi,vbscript,asp,php,jsp,java,xml,html,css,javascript,python,jquery,extjs,vuejs,auguarjs,bootstrap,react,babel,thinkphp,codeigniter,laravel,symfony,phalcon,yii,autoit,purebasic,powerbasic,docker,stucts,spring mvc,hibernate,jpa repository,annotation,weblogic等单词的拼写... 本人懂得 dreamweaver,photoshop,eclipse,apache,nginx,lighttpd,jdk,redis,memcached,tomcat,mysql,sql server,oracle,toad,postgresql,sublime text,visual studio,visio,xmind,navicat,nodejs,electron,mongodb,visualsvn server,tortoisesvn,bitnami,redmine,scm manager,firefox,firebug,virtualbox,vmware,serv-u,filezilla等软件的下载....
2016年4月26日
摘要: <!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=devi... 阅读全文
2016年3月17日
win7禁用zip文件夹的注册表文件 Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\CompressedFolder\CLSID] @="{E88DCCE0-B7B3-11d1-A9F0-00AA0060FA31}-"
[HKEY_CLASSES_ROOT\CompressedFolder\ShellEx\DropHandler] @="{ed9d80b9-d157-457b-9192-0e7280313bf0}-"
[HKEY_CLASSES_ROOT\CompressedFolder\ShellEx\StorageHandler] @="{E88DCCE0-B7B3-11d1-A9F0-00AA0060FA31}-"
[HKEY_CLASSES_ROOT\SystemFileAssociations\.zip\CLSID] @="{E88DCCE0-B7B3-11d1-A9F0-00AA0060FA31}-"
[HKEY_CLASSES_ROOT\CABFolder\CLSID] @="{0CD7A5C0-9F37-11CE-AE65-08002B2E1262}-"
[HKEY_CLASSES_ROOT\SystemFileAssociations\.cab\CLSID] @="{0CD7A5C0-9F37-11CE-AE65-08002B2E1262}-" 将php作为文本文件打开的注册表文件 Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\.php] "PerceivedType"="text" @="aspfile"
2015年11月20日
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8"/>
<meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=no"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<title>/*原生JavaScript仿jQuery的$取元素的超级迷你版*/</title>
<meta name="author" content="(pkmaster|pk4321)"/>
</head>
<body>
<div id="d1"></div>
<script>
/*原生JavaScript仿jQuery的$取元素的超级迷你版*/
(function(window, UND) {
if(window.V===UND){
var document=window.document,_GTN='getElementsByTagName'
,$=function(t){
return function(p){
return (!t)?document.getElementById(p):(!p)?document[_GTN](t)[0]:p[_GTN](t);
}
};
V=$();V.$=$;
V.K=function(v){return"function"==typeof(v)?5:"string"==typeof(v)?8:0};
V.cint=function(s){return parseInt(s,10)};
};
})(this);
</script>
<script>
/*
使用方法:
◇返回ID对应的单个元素的“单对象”:
V.$()(第二对括号:“ID”字符串) == V(ID“字符串”)
◇返回TAG对应的元素数组的首个“单对象”:
V.$(第一对括号:TAG“字符串”)()
◇返回某个父母元素的对象内部的TAG对应的“对象数组”:
V.$(第一对括号:TAG“字符串”)(第二对括号:“TAG”所在的父母元素的“对象”而不是ID“字符串”)
*/
V('d1').innerHTML=V.K(V)+V.$('title')().innerHTML+V.$('script')(V.$('body')())[1].innerHTML;
</script>
</body>
</html>
2015年11月7日
<script id="tpl" type="text/html">
<ul>
<% for (var i = 0, l = data.list.length; i < l; i ++) { %>
<li>用户: <%=data.list[i].user%> / 网站:<%=data.list[i].site%>'tmp'%</li>//
<% };var j=(i===2)?i:'j'; /*只能这样注释不能用双斜杠哦!*/ %><%=j%>
</ul>
</script>
<div id="view"></div>
<script>
$=function(n){return document.getElementById(n)};
function tpl (str) {
return new Function("data", "_", /*定义函数的参数,"data"=输入数据,"_"=输出结果字符串*/
"_='';_+=" + "'" /*构造函数体内容*/
+ str.replace(/[\r\t\n]/g, " ") /*替换全部回车符、换行符和制表符,这样有一个问题是脚本内不能出现双斜杠注释*/
.replace(/'(?=[^%]*%>)/g,"\t") /*将脚本代码内的单引号临时替换为制表符*/
.split("'").join("\\'") /*将脚本代码外的单引号转换为"输出结果字符串"内的单引号*/
.split("\t").join("'") /*将脚本代码内的制表符替换回去为单引号*/
.replace(/<%=(.+?)%>/g, "';_+=$1;_+='") /*用数据替换模板的<%=xxx%>变量*/
.split("<%").join("';") /*将起始标签替换为"输出结果字符串"的结尾并开始新的"脚本代码部分"*/
.split("%>").join("_+='") /*将结束标签替换为开始新的"输出结果字符串"*/
+ "'; return _;" /*加上"输出结果字符串"的结尾,并返回*/
);
}
$('view').innerHTML=tpl($('tpl').innerHTML)({list:[{user:"u1",site:"s1"},{user:"u2",site:"s2"}]});
</script>
其实<%%>这种标签在ASP/JSP环境下都有使用,容易造成冲突,建议换成<##>。其实#号在编程语言里使用率算底的,通常也就CSS用得多一些。用文本编辑器的替换功能将以上代码的全部%替换为#也是很方便的哦!修改后的代码如下:
<script id="tpl" type="text/html">
<ul>
<# for (var i = 0, l = ul.li.length; i < l; i ++) { #>
<li>用户: <#=ul.li[i].user#> / 网站:<#=ul.li[i].site#>'tmp'#</li>//
<# };var j=(i===2)?i:'j'; /*禁用双斜杠注释*/ #><#=j#>
</ul>
</script>
<div id="view"></div>
<script>
$=function(n){return document.getElementById(n)};
function tpl (str,dat) {
if(typeof(dat)==="undefined")dat="ul";
return new Function(dat, "_", /*定义函数的参数,"data"=输入数据,"_"=输出结果字符串*/
"_='';_+=" + "'" /*构造函数体内容*/
+ str.replace(/[\r\t\n]/g, " ") /*替换全部回车符、换行符和制表符,这样有一个问题是脚本内不能出现双斜杠注释*/
.replace(/'(?=[^#]*#>)/g,"\t") /*将脚本代码内的单引号临时替换为制表符*/
.split("'").join("\\'") /*将脚本代码外的单引号转换为"输出结果字符串"内的单引号*/
.split("\t").join("'") /*将脚本代码内的制表符替换回去为单引号*/
.replace(/<#=(.+?)#>/g, "';_+=$1;_+='") /*用数据替换模板的<#=xxx#>变量*/
.split("<#").join("';") /*将起始标签替换为"输出结果字符串"的结尾并开始新的"脚本代码部分"*/
.split("#>").join("_+='") /*将结束标签替换为开始新的"输出结果字符串"*/
+ "'; return _;" /*加上"输出结果字符串"的结尾,并返回*/
);
}
$('view').innerHTML=tpl($('tpl').innerHTML)({li:[{user:"u1",site:"s1"},{user:"u2",site:"s2"}]});
</script>
2015年11月6日
( function(window,document,UN){
document.ready = ( function(){
var readyList,
OBJ="object",OBJF="function",OBJA="array",STRC="complete",STRR="onreadystatechange",STRD="DOMContentLoaded",
// The ready event handler and self cleanup method
DOMContentLoaded = function() {
if ( document.addEventListener ) {
document.removeEventListener( STRD, DOMContentLoaded, false );
ReadyObj.ready();
} else if ( document.readyState === STRC ) {
// we're here because readyState === "complete" in oldIE
// which is good enough for us to call the dom ready!
document.detachEvent( STRR, DOMContentLoaded );
ReadyObj.ready();
}
},
ReadyObj = {
// Is the DOM ready to be used? Set to true once it occurs.
isReady: false,
// A counter to track how many items to wait for before
// the ready event fires. See #6781
readyWait: 1,
// Hold (or release) the ready event
holdReady: function( hold ) {
if ( hold ) {
ReadyObj.readyWait++;
} else {
ReadyObj.ready( true );
}
},
// Handle when the DOM is ready
ready: function( wait ) {
// Either a released hold or an DOMready/load event and not yet ready
if ( (wait === true && !--ReadyObj.readyWait) || (wait !== true && !ReadyObj.isReady) ) {
// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
if ( !document.body ) {
return setTimeout( ReadyObj.ready, 1 );
}
// Remember that the DOM is ready
ReadyObj.isReady = true;
// If a normal DOM Ready event fired, decrement, and wait if need be
if ( wait !== true && --ReadyObj.readyWait > 0 ) {
return;
}
// If there are functions bound, to execute
readyList.resolveWith( document, [ ReadyObj ] );
// Trigger any bound ready events
//if ( ReadyObj.fn.trigger ) {
// ReadyObj( document ).trigger( "ready" ).unbind( "ready" );
//}
}
},
bindReady: function() {
if ( readyList ) {
return;
}
readyList = ReadyObj._Deferred();
// Catch cases where $(document).ready() is called after the
// browser event has already occurred.
if ( document.readyState === STRC ) {
// Handle it asynchronously to allow scripts the opportunity to delay ready
setTimeout( ReadyObj.ready, 1 );
// Mozilla, Opera and webkit nightlies currently support this event
} else if ( document.addEventListener ) {
// Use the handy event callback
document.addEventListener( STRD, DOMContentLoaded, false );
// A fallback to window.onload, that will always work
window.addEventListener( "load", ReadyObj.ready, false );
// If IE event model is used
} else if ( document.attachEvent ) {
// ensure firing before onload,
// maybe late but safe also for iframes
document.attachEvent( STRR, DOMContentLoaded );
// A fallback to window.onload, that will always work
window.attachEvent( "onload", ReadyObj.ready );
// If IE and not a frame
// continually check to see if the document is ready
var top = false;
try {
top = window.frameElement == null && document.documentElement;
} catch(e) {}
if ( top && top.doScroll ) {
( function doScrollCheck() {
if ( !ReadyObj.isReady ) {
try {
// Use the trick by Diego Perini
// http://javascript.nwbox.com/IEContentLoaded/
top.doScroll("left");
} catch(e) {
return setTimeout( doScrollCheck, 50 );
}
// and execute any waiting functions
ReadyObj.ready();
}
})();
}
}
},
_Deferred: function() {
var // callbacks list
callbacks = [],
// stored [ context , args ]
fired,
// to avoid firing when already doing so
firing,
// flag to know if the deferred has been cancelled
cancelled,
// the deferred itself
deferred = {
// done( f1, f2, )
done: function() {
if ( !cancelled ) {
var args = arguments,
i,
length,
elem,
type,
_fired,
class2type = {};
class2type["["+OBJ+" Function]"] = OBJF;
class2type["["+OBJ+" Array]"] = OBJA;
if ( fired ) {
_fired = fired;
fired = 0;
}
for ( i = 0, length = args.length; i < length; i++ ) {
elem = args[ i ];
type=(elem == null ? String( elem ) : class2type[ Object.prototype.toString.call(elem) ] || OBJ);
if ( type === OBJA ) {
deferred.done.apply( deferred, elem );
} else if ( type === OBJF ) {
callbacks.push( elem );
}
}
if ( _fired ) {
deferred.resolveWith( _fired[ 0 ], _fired[ 1 ] );
}
}
return this;
},
// resolve with given context and args
resolveWith: function( context, args ) {
if ( !cancelled && !fired && !firing ) {
// make sure args are available (#8421)
args = args || [];
firing = 1;
try {
while( callbacks[ 0 ] ) {
callbacks.shift().apply( context, args ); //shifts a callback, and applies it to document
}
}
finally {
fired = [ context, args ];
firing = 0;
}
}
return this;
},
// resolve with this as context and given arguments
resolve: function() {
deferred.resolveWith( this, arguments );
return this;
},
// Has this deferred been resolved?
isResolved: function() {
return !!( firing || fired );
},
// Cancel
cancel: function() {
cancelled = 1;
callbacks = [];
return this;
}
};
return deferred;
}
};
return function( fn ) {
// Attach the listeners
ReadyObj.bindReady();
// Add the callback
readyList.done( fn ); //readyList is result of _Deferred()
};
})();
})( this,document);
以上代码用js压缩后才1.6KB。使用示例:
<script src="docready.js"></script>
<script>/*<![CDATA[/*pkmaster@2015q4*/
$=function(n){return document.getElementById(n)};
document.ready(function(){
$('fo1').innerHTML="HELLO document.ready ok!!";
});
try{
$('fo1').innerHTML="not use document.ready fail?";
}catch(e){
document.write('fail!');
}
//]]></script>
<pre>
很多行很多的文本
</pre>
<div id="fo1">fo1</div>
2015年10月31日
var chsSplitSize = function(inputstr,size) {
var inarr = inputstr.split(""),strcurr,strnext,asccurr,ascnext,posonebase=0,lastzerobase=0,chsnext=false,i,j,k=0,ou=[],s;
inarr.push("");
for(i=0;i<inarr.length-1;i++){
strcurr=inarr[i];strnext=inarr[i+1];
try {
asccurr = strcurr.charCodeAt(0);
ascnext = strnext.charCodeAt(0);
} catch (e) {};
if (asccurr > 255){
posonebase+=2;
}else{
posonebase++;
};
if (ascnext > 255){
chsnext=true;
}else{
chsnext=false;
};
if(chsnext&&(posonebase-lastzerobase)==(size-1)){
s="";
for(j=k;j<=i;j++){
s+=inarr[j];
}
k=i+1;
lastzerobase=posonebase;
if(s.length>0)ou.push(s);
}else if((posonebase-lastzerobase)==size){
s="";
for(j=k;j<=i;j++){
s+=inarr[j];
}
k=i+1;
lastzerobase=posonebase;
if(s.length>0)ou.push(s);
}
}
if((posonebase-lastzerobase)<=size){
s="";
for(j=k;j<=i;j++){
s+=inarr[j];
}
k=i+1;
lastzerobase=posonebase;
if(s.length>0)ou.push(s);
}
return ou;
};
// 123456789012345678901
var s="",arr=chsSplitSize("一二三234我的额1额56789四五六七",12);
for(var i=0;i<arr.length;i++){
s+='<div>'+arr[i]+'</div>\n';
}
alert(s);
2015年8月24日
2015年8月17日
<!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=no"/> <meta http-equiv="X-UA-Compatible" content="IE=edge"/> <title>html5兼容xml的编写更少代码的规范</title> <style> *{margin:0;padding:0} </style> </head> <body> <pre> 第一行DOCTYPE大写,html小写 ; <br/>无子节点的标签,结束/>标签前不要额外空格 ; &#169; 特殊字符用数字编码,而不用名字&copy; ; 标志型属性用readonly="1" disabled="1" selected="1" checked="1" ; 属性值一律使用双引号括起来 ; 脚本代码如果有服务器脚本的单独分开 ; 脚本代码格式如本文档的示例 ; 按钮一律使用<button而不用<input type="button" </pre>
http://javascript-minifier.com http://cssminifier.com
<br/> <hr/>
<form id="form1" method="post" action="#"> <div class="fmfs"> <div class="fmf"><label>表单控件字段22</label><br/> <input type="text" id="i22" readonly="1"/> <button type="button" id="i22b" class="b" onclick="alert('i22')"></button> </div> </div> </form>
版权字符 &#169;
<script>/*<![CDATA[/*pkmaster@2015q2*/ (function(WN,DC,UN){ var php=WN.$P?WN.$P:$P={}; <?php echo 'php["hello"]="hello world";'?> })(this,document); //]]></script>
<script>/*<![CDATA[/*pkmaster@2015q2*/ (function(WN,DC,UN){ var php=WN.$P?WN.$P:$P={}; DC.getElementById("i22").value=(UN!==php["hello"]?php["hello"]:""); alert(UN!==php["und"]?php["und"]:"0"); })(this,document); //]]></script>
</body> </html> 页面内javascript代码书写示例:
(function(Win,Doc,Und){ var php=Win.$P?Win.$P:$P={}; php['v1']='1'; })(this,document);
(function(Win,Doc,Und){ var php=Win.$P?Win.$P:$P={}; php['v2']='2'; })(this,document);
(function(Win,Doc,Und){ var php=Win.$P?Win.$P:$P={}; alert(php['v2']===Und?php['v1']:!1); })(this,document);
|
|