getElementsByClassName的用法 和 js获取class

原文:http://blog.sina.com.cn/s/blog_78106bb10100xyg1.html

 

因为IE浏览器不支持getElementsByClassName,所以你要自己写一个方法得到class

但是火狐浏览器知道getElementsByClassName,可以直接的用

<html>
<head>
   <title></title>
   <script type="text/javascript">
       window.onload = function () {
           var tagName = getClass("div", "a1");

          //因为返回的是包含多个元素的数组,所以要遍历一下
            for (var i = 0; i < tagName.length; i++) { 

               tagName[i].innerHTML = "你好";
           }
          
           var tagName = getClass("div", "a2");
           for (var i = 0; i < tagName.length; i++) {
               tagName[i].innerHTML = "ALL好";
           }
       }

       function getClass(tagname, className) { //tagname指元素,className指class的值

        //判断浏览器是否支持getElementsByClassName,如果支持就直接的用
            if (document.getElementsByClassName) {   

               return getElementsByClassName(className);
           }
           else {    //当浏览器不支持getElementsByClassName的时候用下面的方法
                var tagname = document.getElementsByTagName_r(tagname);  //获取指定元素
                var tagnameAll = [];     //这个数组用于存储所有符合条件的元素
                for (var i = 0; i < tagname.length; i++) {     //遍历获得的元素
                    if (tagname[i].className == className) {     //如果获得的元素中的class的值等于指定的类名,就赋值给tagnameAll
                        tagnameAll[tagnameAll.length] = tagname[i];
                   }
               }
               return tagnameAll;
           }
       }
   </script>
</head>
<body>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
</body>
</html>

我建议不要用上面的方法,用JQuery,可以省去很多的代码

简体繁体转换JS(JavaScript)脚本

在一个政府网站看到简繁转换的js方法挺不错的,现整理出来,方便以后使用。

1、首先把下面这个链接放在提醒用户繁简转换的地方:
<a href="javascript:StranBody()" id="StranLink">简体版</a>

需要注意的是id是不能换的。
2、把这段js外部调用的代码加在网页最底部的</body>前:
<script language="javascript" type="text/javascript" src="繁简字转换js"></script>
3、js文件代码如下:

	var Default_isFT = 0                //默认是否繁体,0-简体,1-繁体
	var StranIt_Delay = 20 //翻译延时毫秒(设这个的目的是让网页先流畅的显现出来)
	var StranLink_Obj=document.getElementById("StranLink");
  //	alert(StranLink_Obj);
  	if (StranLink_Obj) {

		var JF_cn="ft"+self.location.hostname.toString().replace(/./g,"")

        var BodyIsFt=getCookie(JF_cn)

        if(BodyIsFt!="0")
			BodyIsFt=Default_isFT

  	 	 with(StranLink_Obj)
        {
                if(typeof(document.all)!="object")         //非IE浏览器
                {
                    href="javascript:StranBody()"
                }
                else
                {
                        href="#";
                        onclick= new Function("StranBody();return false")
                }
               title=StranText("点击以繁体中文方式浏览",0,0)

               innerHTML=StranText(innerHTML,0,0)

        }
        if(BodyIsFt=="0"){
        	setTimeout("StranBody()",StranIt_Delay)
        }

  	 	}
 function StranText(txt,toFT,chgTxt){

        if(txt==""||txt==null)

			return ""
		if(toFT == null){
			toFT = BodyIsFt;
		}else{
			toFT = toFT;
		}
        // toFT=toFT==null?BodyIsFt:toFT

        if(chgTxt)

			txt=txt.replace((toFT?"简":"繁"),(toFT?"繁":"简"))

        if(toFT){

        	return Traditionalized(txt)

		}else {

			return Simplized(txt)

		}
   } 

function StranBody(fobj) {
	     // alert('StranBody');
        if(typeof(fobj)=="object"){

			var obj=fobj.childNodes

        }else {
                var tmptxt=StranLink_Obj.innerHTML.toString();
                if(tmptxt.indexOf("繁")<0){
                        BodyIsFt=0;
                        StranLink_Obj.innerHTML=StranText(tmptxt,1,1);
                        StranLink_Obj.title=StranText(StranLink_Obj.title,1,1);

                } else{
                        BodyIsFt=1;
                        StranLink_Obj.innerHTML=StranText(tmptxt,0,1);
                        StranLink_Obj.title=StranText(StranLink_Obj.title,0,1);

                }
                setCookie(JF_cn,BodyIsFt,7);
                var obj=document.body.childNodes;
        }
        for(var i=0;i<obj.length;i++){
                var OO=obj.item(i)
                if("||BR|HR|TEXTAREA|".indexOf("|"+OO.tagName+"|")>0||OO==StranLink_Obj)continue;
                if(OO.title!=""&&OO.title!=null)OO.title=StranText(OO.title);
                if(OO.alt!=""&&OO.alt!=null)OO.alt=StranText(OO.alt);
                if(OO.tagName=="INPUT"&&OO.value!=""&&OO.type!="text"&&OO.type!="hidden")OO.value=StranText(OO.value);
                if(OO.nodeType==3){OO.data=StranText(OO.data)} else{ 
                	if(OO.tagName!='object'&& OO.tagName!='OBJECT'&& OO.tagName!='undefined')StranBody(OO);
                	}
        }
  }
  function JTPYStr(){
        return '沈产历系于系连锁与携变为规业饮竞华创国财皑蔼碍爱翱袄奥坝罢摆败颁办绊帮绑镑谤剥饱宝报鲍辈贝钡狈备惫绷笔毕毙闭边编贬变辩辫鳖瘪濒滨宾摈饼拨钵铂驳卜补参蚕残惭惨灿苍舱仓沧厕侧册测层诧搀掺蝉馋谗缠铲产阐颤场尝长偿肠厂畅钞车彻尘陈衬撑称惩诚骋痴迟驰耻齿炽冲虫宠畴踌筹绸丑橱厨锄雏础储触处传疮闯创锤纯绰辞词赐聪葱囱从丛凑窜错达带贷担单郸掸胆惮诞弹当挡党荡档捣岛祷导盗灯邓敌涤递缔点垫电淀钓调迭谍叠钉顶锭订东动栋冻斗犊独读赌镀锻断缎兑队对吨顿钝夺鹅额讹恶饿儿尔饵贰发罚阀珐矾钒烦范贩饭访纺飞废费纷坟奋愤粪丰枫锋风疯冯缝讽凤肤辐抚辅赋复负讣妇缚该钙盖干赶秆赣冈刚钢纲岗皋镐搁鸽阁铬个给龚宫巩贡钩沟构购够蛊顾剐关观馆惯贯广规硅归龟闺轨诡柜贵刽辊滚锅国过骇韩汉阂鹤贺横轰鸿红后壶护沪户哗华画划话怀坏欢环还缓换唤痪焕涣黄谎挥辉毁贿秽会烩汇讳诲绘荤浑伙获货祸击机积饥讥鸡绩缉极辑级挤几蓟剂济计记际继纪夹荚颊贾钾价驾歼监坚笺间艰缄茧检碱硷拣捡简俭减荐槛鉴践贱见键舰剑饯渐溅涧浆蒋桨奖讲酱胶浇骄娇搅铰矫侥脚饺缴绞轿较秸阶节茎惊经颈静镜径痉竞净纠厩旧驹举据锯惧剧鹃绢杰洁结诫届紧锦仅谨进晋烬尽劲荆觉决诀绝钧军骏开凯颗壳课垦恳抠库裤夸块侩宽矿旷况亏岿窥馈溃扩阔蜡腊莱来赖蓝栏拦篮阑兰澜谰揽览懒缆烂滥捞劳涝乐镭垒类泪篱离里鲤礼丽厉励砾历沥隶俩联莲连镰怜涟帘敛脸链恋炼练粮凉两辆谅疗辽镣猎临邻鳞凛赁龄铃凌灵岭领馏刘龙聋咙笼垄拢陇楼娄搂篓芦卢颅庐炉掳卤虏鲁赂禄录陆驴吕铝侣屡缕虑滤绿峦挛孪滦乱抡轮伦仑沦纶论萝罗逻锣箩骡骆络妈玛码蚂马骂吗买麦卖迈脉瞒馒蛮满谩猫锚铆贸么霉没镁门闷们锰梦谜弥觅绵缅庙灭悯闽鸣铭谬谋亩钠纳难挠脑恼闹馁腻撵捻酿鸟聂啮镊镍柠狞宁拧泞钮纽脓浓农疟诺欧鸥殴呕沤盘庞国爱赔喷鹏骗飘频贫苹凭评泼颇扑铺朴谱脐齐骑岂启气弃讫牵扦钎铅迁签谦钱钳潜浅谴堑枪呛墙蔷强抢锹桥乔侨翘窍窃钦亲轻氢倾顷请庆琼穷趋区躯驱龋颧权劝却鹊让饶扰绕热韧认纫荣绒软锐闰润洒萨鳃赛伞丧骚扫涩杀纱筛晒闪陕赡缮伤赏烧绍赊摄慑设绅审婶肾渗声绳胜圣师狮湿诗尸时蚀实识驶势释饰视试寿兽枢输书赎属术树竖数帅双谁税顺说硕烁丝饲耸怂颂讼诵擞苏诉肃虽绥岁孙损笋缩琐锁獭挞抬摊贪瘫滩坛谭谈叹汤烫涛绦腾誊锑题体屉条贴铁厅听烃铜统头图涂团颓蜕脱鸵驮驼椭洼袜弯湾顽万网韦违围为潍维苇伟伪纬谓卫温闻纹稳问瓮挝蜗涡窝呜钨乌诬无芜吴坞雾务误锡牺袭习铣戏细虾辖峡侠狭厦锨鲜纤咸贤衔闲显险现献县馅羡宪线厢镶乡详响项萧销晓啸蝎协挟携胁谐写泻谢锌衅兴汹锈绣虚嘘须许绪续轩悬选癣绚学勋询寻驯训讯逊压鸦鸭哑亚讶阉烟盐严颜阎艳厌砚彦谚验鸯杨扬疡阳痒养样瑶摇尧遥窑谣药爷页业叶医铱颐遗仪彝蚁艺亿忆义诣议谊译异绎荫阴银饮樱婴鹰应缨莹萤营荧蝇颖哟拥佣痈踊咏涌优忧邮铀犹游诱舆鱼渔娱与屿语吁御狱誉预驭鸳渊辕园员圆缘远愿约跃钥岳粤悦阅云郧匀陨运蕴酝晕韵杂灾载攒暂赞赃脏凿枣灶责择则泽贼赠扎札轧铡闸诈斋债毡盏斩辗崭栈战绽张涨帐账胀赵蛰辙锗这贞针侦诊镇阵挣睁狰帧郑证织职执纸挚掷帜质钟终种肿众诌轴皱昼骤猪诸诛烛瞩嘱贮铸筑驻专砖转赚桩庄装妆壮状锥赘坠缀谆浊兹资渍踪综总纵邹诅组钻致钟么为只凶准启板里雳余链泄';
     }
  function FTPYStr(){
        return '瀋產歷係於繫連鎖與攜變為規業飲競華創國財皚藹礙愛翺襖奧壩罷擺敗頒辦絆幫綁鎊謗剝飽寶報鮑輩貝鋇狽備憊繃筆畢斃閉邊編貶變辯辮鼈癟瀕濱賓擯餅撥缽鉑駁蔔補參蠶殘慚慘燦蒼艙倉滄廁側冊測層詫攙摻蟬饞讒纏鏟産闡顫場嘗長償腸廠暢鈔車徹塵陳襯撐稱懲誠騁癡遲馳恥齒熾沖蟲寵疇躊籌綢醜櫥廚鋤雛礎儲觸處傳瘡闖創錘純綽辭詞賜聰蔥囪從叢湊竄錯達帶貸擔單鄲撣膽憚誕彈當擋黨蕩檔搗島禱導盜燈鄧敵滌遞締點墊電澱釣調叠諜疊釘頂錠訂東動棟凍鬥犢獨讀賭鍍鍛斷緞兌隊對噸頓鈍奪鵝額訛惡餓兒爾餌貳發罰閥琺礬釩煩範販飯訪紡飛廢費紛墳奮憤糞豐楓鋒風瘋馮縫諷鳳膚輻撫輔賦複負訃婦縛該鈣蓋幹趕稈贛岡剛鋼綱崗臯鎬擱鴿閣鉻個給龔宮鞏貢鈎溝構購夠蠱顧剮關觀館慣貫廣規矽歸龜閨軌詭櫃貴劊輥滾鍋國過駭韓漢閡鶴賀橫轟鴻紅後壺護滬戶嘩華畫劃話懷壞歡環還緩換喚瘓煥渙黃謊揮輝毀賄穢會燴彙諱誨繪葷渾夥獲貨禍擊機積饑譏雞績緝極輯級擠幾薊劑濟計記際繼紀夾莢頰賈鉀價駕殲監堅箋間艱緘繭檢堿鹼揀撿簡儉減薦檻鑒踐賤見鍵艦劍餞漸濺澗漿蔣槳獎講醬膠澆驕嬌攪鉸矯僥腳餃繳絞轎較稭階節莖驚經頸靜鏡徑痙競淨糾廄舊駒舉據鋸懼劇鵑絹傑潔結誡屆緊錦僅謹進晉燼盡勁荊覺決訣絕鈞軍駿開凱顆殼課墾懇摳庫褲誇塊儈寬礦曠況虧巋窺饋潰擴闊蠟臘萊來賴藍欄攔籃闌蘭瀾讕攬覽懶纜爛濫撈勞澇樂鐳壘類淚籬離裏鯉禮麗厲勵礫曆瀝隸倆聯蓮連鐮憐漣簾斂臉鏈戀煉練糧涼兩輛諒療遼鐐獵臨鄰鱗凜賃齡鈴淩靈嶺領餾劉龍聾嚨籠壟攏隴樓婁摟簍蘆盧顱廬爐擄鹵虜魯賂祿錄陸驢呂鋁侶屢縷慮濾綠巒攣孿灤亂掄輪倫侖淪綸論蘿羅邏鑼籮騾駱絡媽瑪碼螞馬罵嗎買麥賣邁脈瞞饅蠻滿謾貓錨鉚貿麽黴沒鎂門悶們錳夢謎彌覓綿緬廟滅憫閩鳴銘謬謀畝鈉納難撓腦惱鬧餒膩攆撚釀鳥聶齧鑷鎳檸獰甯擰濘鈕紐膿濃農瘧諾歐鷗毆嘔漚盤龐國愛賠噴鵬騙飄頻貧蘋憑評潑頗撲鋪樸譜臍齊騎豈啓氣棄訖牽扡釺鉛遷簽謙錢鉗潛淺譴塹槍嗆牆薔強搶鍬橋喬僑翹竅竊欽親輕氫傾頃請慶瓊窮趨區軀驅齲顴權勸卻鵲讓饒擾繞熱韌認紉榮絨軟銳閏潤灑薩鰓賽傘喪騷掃澀殺紗篩曬閃陝贍繕傷賞燒紹賒攝懾設紳審嬸腎滲聲繩勝聖師獅濕詩屍時蝕實識駛勢釋飾視試壽獸樞輸書贖屬術樹豎數帥雙誰稅順說碩爍絲飼聳慫頌訟誦擻蘇訴肅雖綏歲孫損筍縮瑣鎖獺撻擡攤貪癱灘壇譚談歎湯燙濤縧騰謄銻題體屜條貼鐵廳聽烴銅統頭圖塗團頹蛻脫鴕馱駝橢窪襪彎灣頑萬網韋違圍爲濰維葦偉僞緯謂衛溫聞紋穩問甕撾蝸渦窩嗚鎢烏誣無蕪吳塢霧務誤錫犧襲習銑戲細蝦轄峽俠狹廈鍁鮮纖鹹賢銜閑顯險現獻縣餡羨憲線廂鑲鄉詳響項蕭銷曉嘯蠍協挾攜脅諧寫瀉謝鋅釁興洶鏽繡虛噓須許緒續軒懸選癬絢學勳詢尋馴訓訊遜壓鴉鴨啞亞訝閹煙鹽嚴顔閻豔厭硯彥諺驗鴦楊揚瘍陽癢養樣瑤搖堯遙窯謠藥爺頁業葉醫銥頤遺儀彜蟻藝億憶義詣議誼譯異繹蔭陰銀飲櫻嬰鷹應纓瑩螢營熒蠅穎喲擁傭癰踴詠湧優憂郵鈾猶遊誘輿魚漁娛與嶼語籲禦獄譽預馭鴛淵轅園員圓緣遠願約躍鑰嶽粵悅閱雲鄖勻隕運蘊醞暈韻雜災載攢暫贊贓髒鑿棗竈責擇則澤賊贈紮劄軋鍘閘詐齋債氈盞斬輾嶄棧戰綻張漲帳賬脹趙蟄轍鍺這貞針偵診鎮陣掙睜猙幀鄭證織職執紙摯擲幟質鍾終種腫衆謅軸皺晝驟豬諸誅燭矚囑貯鑄築駐專磚轉賺樁莊裝妝壯狀錐贅墜綴諄濁茲資漬蹤綜總縱鄒詛組鑽緻鐘麼為隻兇準啟闆裡靂餘鍊洩';
       } 
 function Traditionalized(cc){
        var str='',ss=JTPYStr(),tt=FTPYStr();
        for(var i=0;i<cc.length;i++){
                if(cc.charCodeAt(i)>10000&&ss.indexOf(cc.charAt(i))!=-1)str+=tt.charAt(ss.indexOf(cc.charAt(i)));
                  else str+=cc.charAt(i);
            }
        return str;
   }
 function Simplized(cc){
        var str='',ss=JTPYStr(),tt=FTPYStr();
        for(var i=0;i<cc.length;i++)
        {
                if(cc.charCodeAt(i)>10000&&tt.indexOf(cc.charAt(i))!=-1)str+=ss.charAt(tt.indexOf(cc.charAt(i)));
                  else str+=cc.charAt(i);
        }
        return str;
  }

 function setCookie(name, value){                //cookies设置
        var argv = setCookie.arguments;
        var argc = setCookie.arguments.length;
        var expires = (argc > 2) ? argv[2] : null;
        if(expires!=null) {
                var LargeExpDate = new Date ();
                LargeExpDate.setTime(LargeExpDate.getTime() + (expires*1000*3600*24));
        }
        document.cookie = name + "=" + escape (value)+";path=/"+((expires == null) ? "" : ("; expires=" +LargeExpDate.toGMTString()));
 }    	 	
  function getCookie(Name)  {                       //cookies读取

        var search = Name + "=";
        if(document.cookie.length > 0) {
                offset = document.cookie.indexOf(search);
                if(offset != -1) {
                        offset += search.length;
                        end = document.cookie.indexOf(";", offset);
                        if(end == -1) end = document.cookie.length;
                        return unescape(document.cookie.substring(offset, end));
                 } else return "";
          }
   }

CS0016: 未能写入输出文件...\App_Web_default.aspx.cdcab7d2.zii776dc.dll”--"拒绝访问。 " 解决方法

Asp.NET部署后访问网站出现问题(Windows 7 旗舰版):

CS0016:
未能写入输出文件“c:WindowsMicrosoft.NetFrameworkv4.0.30319Temporary ASP.NET
Filesweb4b49f66123a749fcApp_Web_default.aspx.cdcab7d2.zii776dc.dll”--“拒绝访问。

解决方法:

找到C:WindowsTemp 目录,在其属性->安全->编辑->添加 IIS_IUSERS用户 赋予"完全控制"权限

 

...注意:这可能不是最佳方案,如果有其他方法 或 赋予IIS_IUSERS用户 "完全控制"权限,会有其他什么隐患呢?请大家指出一下..

教你管理SQL实例(15)多实例并存

一、多实例并存的技术限制
可以在已运行 SQL Server 早期版本实例的计算机上安装 SQL Server。如果计算机上已存在默认实例,则 SQL Server 必须作为命名实例安装。
SQL Server 2008最多允许在一台机器上安装50个实例。从理论上讲,只要硬件性能足够,就可以在一台机器上并存50个实例。二、并行实例的原因
在一台机器上是否并存多少个实例,没有绝对值。一般多实例并存的场景主要有以下几种:
1. 隔离不同的管理结构和安全配置
例如,某个实例要求sa帐户,另一个实例也要求sa帐户但密码不同,另一个实例禁用sa帐户。

2. 不同的性能要求
通过对每个实例的属性配置,或者通过资源调控器,可以为每个实例实现不同的内存、CPU、磁盘资源,从而实现不同的性能要求。

3. 不同的服务等级协议(SLA)
不同的数据库应用程序可能需要不同的SLA,特别是关于RTO(recovery time objective)和RPO(recovery point objectives)。
例如,客户可能需要某个实例实现7*24运行,并且要求可以恢复到最后一笔交易;对另一个实例可能只需要5*8运行,并且只要求可以恢复到备份点。

4. 不同的历史版本
例如,可以将SQL Server 2005与SQL Server 2008安装在同一台机器上。这种场景尤其用于背靠背升级时。

5. 不同的排序规则
例如,某个实例为SQL_Latin1_General_CP1_CI_AS(西欧字符集),另一个实例为Chinese_PRC_CI_AS(简体中文字符集)。

三、注意事项
1. 防止端口冲突
  并行安装 SQL Server 实例时,请注意避免 IP 地址上的 TCP 端口号冲突。当 数据库引擎的两个实例都配置为使用默认 TCP 端口 (1433) 时,通常会发生冲突。要避免冲突,请将一个实例配置为使用非默认的固定端口,或者使用动态端口。

2. 规划硬件负载
同一台机器上安装了多个并行的实例,对这台机器的硬件会有较多的竞争,需要提前规划硬件负载,以及为每个实例配置不同的硬件资源。。

3. Server Core 模式
SQL Server 2012 不能在运行 Windows Server 2008 R2 Server Core SP1 的计算机上与早期版本的 SQL Server 一起并行安装。

并行实例.png

 

来源:http://bbs.51cto.com/thread-1085337-1.html

php倒序输出字符串

说明,开发的程序中,需要面包屑导航功能,根据分类ID循环显示上级分类,默认是先显示下级分类再显示上级分类,与实际实际情况刚好相反.

最终函数代码:

function get_list_fid($module,$id){
global $tres;
$tsql='select * from '.DB_PRE.'list where id='.$id;
$tdata=get_alldata($tsql);
if($tdata){
foreach($tdata as $row){
$tres .= '#@#><a href="'.get_url($module,'list','lid').$row['id'].'">'.get_list_name($row['id']).'</a>';
if($row['fid']!=0){
get_list_fid($module,$row['fid']);
}
}
}
$tres = implode(array_reverse(explode('#@#',$tres)));//倒序分类链接代码顺序
return $tres;
}

explode() 函数把字符串打散为数组。
array_reverse() 接受数组 array 作为输入并返回一个单元为相反顺序的新数组
implode() 函数把数组元素组合为一个字符串。

 

implode(array_reverse(explode('#@#',$tres)))

 

 

php数组特定元素修改方法

原数组格式

$tdata=

Array
(
[0] => Array
(
[id] => 1
[fid] => 0
[l_title] => 今日头条
[l_key] => 今日头条
[l_desc] => 今日头条
[l_ico] => ../upload/images/14842284478853.jpg
[l_module] => article
[l_hidden] => 0
)

[1] => Array
(
[id] => 2
[fid] => 11
[l_title] => 头条新闻
[l_key] => 头条新闻
[l_desc] => 头条新闻
[l_ico] =>
[l_module] => article
[l_hidden] => 0
)

[2] => Array
(
[id] => 11
[fid] => 0
[l_title] => 明日新闻
[l_key] => 明日新闻
[l_desc] => 明日新闻
[l_ico] =>
[l_module] => article
[l_hidden] => 0
)

)

需求:fid为上级分类ID,使用smarty模板引擎时需输出上级分类名称,而不是ID。即数组元素fid修改成分类名称。

已有函数get_list_name($id),可通过分类id获取分类名称。

代码片段

//上级菜单ID替换成菜单名
foreach($tdata as $row){
foreach($row as $k=>$v){
if($k=='fid'){
if($row[$k]==0){
$row[$k] = '顶级分类';
}else{
$row[$k] = get_list_name($v);
}
}
}
$data[] = $row;
}
//上级菜单ID替换成菜单名

$data即为新数组,格式为

 

Array
(
[0] => Array
(
[id] => 1
[fid] => 顶级分类
[l_title] => 今日头条
[l_key] => 今日头条
[l_desc] => 今日头条
[l_ico] => ../upload/images/14842284478853.jpg
[l_module] => article
[l_hidden] => 0
)

[1] => Array
(
[id] => 2
[fid] => 明日新闻
[l_title] => 头条新闻
[l_key] => 头条新闻
[l_desc] => 头条新闻
[l_ico] =>
[l_module] => article
[l_hidden] => 0
)

[2] => Array
(
[id] => 11
[fid] => 顶级分类
[l_title] => 明日新闻
[l_key] => 明日新闻
[l_desc] => 明日新闻
[l_ico] =>
[l_module] => article
[l_hidden] => 0
)

)

最后通过赋值即可在模板中循环使用。

代码:

$smarty -> assign('list', $data);//给变量赋值

 

模板中代码:

{foreach item=li from=$list}
<tr>
<td>{$li.id}</td>
<td>{$li.fid}</td>
<td>{assign var="module" value="{$lng.{$li.l_module}}"}
{$module}</td>
<td>{$li.l_title}</td>
<td>{$li.l_key}</td>
<td>{$li.l_desc}</td>
<td><a href="list.php?module={$li.l_module}&type=edit&id={$li.id}">编辑</a>&nbsp;<a href="list.php?module={$li.l_module}&type=del&id={$li.id}">删除</a></td>
</tr>
{/foreach}

 

smarty模板中如何调用PHP自定义函数

registerPlugin函数,该函数的原型为

void registerPlugin(string type,
string name,
mixed callback,
bool cacheable,
mixed cache_attrs);

function htmlcode($paras) {
extract($paras);
Return str_replace('/n/r','<br>',str_replace(' ',' ',$cont));
}
$smarty=new Smarty();
$smarty->registerPlugin('function','format_content','htmlcode');
$smarty->display("list.html");

 

//list.html
<table width="500px" border="0" cellspacing="5" cellpadding="1" bgcolor="#add3ef">
{section name=reply loop=$content}
<tr bgcolor="#eff3ff">
<td>标题:{$content[reply].title} 用户:{$content[reply].user}</td>
</tr>
<tr bgcolor="#ffffff">
<td>内容:{format_content cont=$content[reply].content}</td>
</tr>
{/section}
</table>

smarty模板引擎在模板中定义变量的技巧

在开发网站时,遇到一个变量调用的问题。

变量{$module}为模块的名称

需要根据模块名称调用对应的中文名称,在语言文件中有对应的写出.调用格式{$lng.英文模块名}

因模块有多个,无法通过固定赋值得出.

所有通过在模板中定义变量实现,方法如下:

{assign var="module" value="{$lng.{$li.l_module}}"}//其中{$li.l_module}为调出的模块英文名
{$module}//{$module}实际上就是{$lng.英文模块名}格式.

通过以上方法,实现了smarty模板引擎在模板中定义变量,满足实际需求.

 

 

快速的模块式开发框架

当写完一个程序之后,需要再写另一个程序时,比如当你写完一个留言版之后,需要再写一个文章管理程序。请看,一般留言板程序执行文件结构:
config.php
header.inc.php
footer.inc.php
index.php
globals.php
.....
文件管理程序或其它程序的结构也可以是这样子的。因为,如果程序是放在同一个网站动行,配置是相同的,在讲究程序与代码分离的的现阶段,还要配置模板引擎,就有很多重复工作要做。如果有一个程序,可以把自已以前写的程序整合在一起,又要保持原有的独立性。程序拥有独立性与整合性并存。这就是我要说的,模块式开发。这,就需要一个适合自已的框架。
首先,从目录结构上区分一个这个框架,为易于理解,简主要结构如下:
includes/
modules/
index.php
config.php
......
1、目录includex下可以放一些常用的类库,如smarty类库,ado数据类库,或自定义类、函数库等等,每一类一个目录,然后把这些配置路经统一放置在config.php文件中
2、modules目录用来存放模块,如留言模块。每个模块为一个目录。
3、将index.php设为统一程序入口
4、config.php为全局使用的配置文件
下面就举个简单的例子:
输入网址index.php?module=article&action=list就引入下面的文件
index.php
config.php
modules/article/index.php
modules/article/list.php
QUOTE:
index.php内容如:
define('SHOW', true);//定义入口常量
require_once('config.php');//调入配置文件
$module = $_GET['module'];//调用模块
if (empty($_GET['module'])) $module = 'public';//默认值
if (!preg_match ("/^[a-z_]+$/i", $module)) die('参数错误!'); //使模块名字参数只接受字母及_字符组成,防注入
$path_module = PATH_MODULE.$module.'/';//模块路径
is_file($path_module.'index.php') or die(FILE_NULL);//如果模块不存在就停止
require_once($path_module.'index.php');//调用模块
……
config.php内容如:
defined('SHOW') or die(header("HTTP/1.1 403 Not Forbidden"));//检测是否有入口常量
define('DB_HOST', '127.0.0.1');//数据库地址
define('DB_USER', 'qh663');//数据库用户名
……//其它数据库配置与全局环境设置,如定义上面的常量(PATH_MODULE)
modules/article/index.php//模块入口,接受操作动作
defined('SHOW') or die(header("HTTP/1.1 403 Not Forbidden"));//检测是否有入口常量
$action = $_POST['action'];接受动作
if (!preg_match ("/^[a-z_]+$/i", $action)) die('参数错误!'); //使模块名字参数只接受字母及_字符组成,防注入
……//这里处理载入action之类的
modules/article/list.php//相应动作的执行,这里,可以包含任意所需代码实现
defined('SHOW') or die(header("HTTP/1.1 403 Not Forbidden"));//检测是否有入口常量

一个模块,只一个参数。一个动作,也只一个参数。看下,是不是很爽?
程序的独立与整合,只操作modules目录下的mod即可。并且程序只一个入口,非常安全!

php遍历引入文件夹中所有的文件

php遍历引入文件夹中所有的文件

在开发程序时,使用语言文件,需要在语言文件夹中设置多个php文件,分别存储不同的类型语言,在引入时进行遍历循环,方便后期维护及管理。

示例代码:

$folder_url='include/lang/' . WEB_LANG . '/';//文件夹路径,相对于根目录,与代码文件所在位置无关。
foreach( glob($folder_url.'*.php') as $filename ) include_once $filename;//循环所有语言文件