游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

php手把手教你做网站(三十五)网站静态生成三实战标签的实现

  前边介绍了,pregmatchall,pregmatch以及用到的标签,下面我们来以具体的实例来说明标签的解析。
  模板news。html包含了include标签(通用头部,底部);imgq7。q578。comef0112cded5b4fa5cdd838。jpgfcname:getpicpath}获取banner图;2个cmlist,第一个获取所有新闻的分类,第2个显示文章列表(带分页)2个cmlist是否有分页以pagesize区别;显示日期使用了自定义方法(riqigeshi),显示日期格式;
  每一个标签解析的方式都是一样的,就是使用pregmatchall,代码比较多,大多是重复的,只贴出来一部分吧,参考下就可以按照自己的方式来写了。
  注意:生成详细页面的时候,有的时候会同时生成列表页,要限制一下总的页数,最多生成前边多少页,如果页数很多,直接循环生成,很大可能会出现卡死的情况{includeincludeheader}imgsrca2020imgdataimg。jpgdatasrcimgq7。q578。comef0112cded5b4fa5cdd838。jpgfcname:getpicpath}alt新闻中心bannerul{cmlistt:webcat,f:catname,id,cathtmlname,cathtmlpath,c:projectid87andparentid0,o:sortdesc,iddesc,l:,name:a}li{facatname}li{cmlist}ulspanclassbreads0位置:span首页新闻资讯ul{cmlistt:webnews,f:addtime,newsname,id,newsstatus,newspic,htmlname,htmlfolder,c:,o:sortdesc,iddesc,l:,name:a,pagesize:10}li{faaddtimefcname:riqigeshi,methstr:1}h2{fanewsname}h2{fanewsstatus}查看详细li{cmlist}ul!分页开始{page}!分页结束{includeincludefooter}
  创建htmlfunction()用于生成html页面模板名称htmlnamenews。html;添加或者编辑文章,保存以后的信息upaprDb::name();upapr;functionhtmlfunction(htmlname,upapr){1读取模板htmstrfilegetcontents(htmlname);2替换include标签htmstrincfunction(htmstr);3替换掉详情页的编号pregmatch(cs〔(。)〕i,htmstr,carr);carr〔0〕:cs〔id〕carr〔1〕:idif(carr){htmstrstrreplace(carr〔0〕,upapr〔carr〔1〕〕,htmstr);}4替换掉配置的路径信息replacstrhinkconfig::get(viewreplacestr);可以单个的替换htmstrstrreplace(PUJS,replacstr〔PUJS〕,htmstr);htmstrstrreplace(PUCSS,replacstr〔PUCSS〕,htmstr);htmstrstrreplace(PUIMG,replacstr〔PUIMG〕,htmstr);也可以循环数组,1次性全部替换foreach(replacstraskv){htmstrstrreplace(k,v,htmstr);}5替换cmf标签(自定义函数)htmstrcmffunction(htmstr);6替换cmonehtmstrcmonefunction(htmstr);7替换cmpagehtmstrcmpage(htmstr);8替换嵌套循环都用到cmlist标签,防止出错,嵌套循环放到前边替换htmstrloopcatfunction(htmstr);9替换模块内循环分页会涉及到分页的时候页码链接地址(存放的文件、文件名称),还有列表链接文章详情upaprarray();存放这些信息funcstrloopfunction(htmstr,upapr);htmstrfuncstr〔htmstr〕;upaprfuncstr〔upapr〕??upapr;}
  incfunction函数,替换include文件functionincfunction(htmstr){pregmatchall({include(。)}i,htmstr,includearr);cinfodb(config)field(sitetheme)find();cinfo〔sitetheme〕defaulti0;foreach(includearr〔1〕ask){读取模板信息kincludeheader截取出来的k带有空格需要trim(k)去掉ROOTPATHE:webincludearr〔0〕〔m〕{includeincludeheader}htmstrstrreplace(includearr〔0〕〔i〕,filegetcontents(Config(webtemplate。viewpath)。cinfo〔sitetheme〕。。trim(k)。。html),htmstr);i;}returnhtmstr;}
  cmffunction函数,替换自定义函数functioncmffunction(htmlstr){pregmatchall({cmf(。?)}is,htmlstr,arr);ii0;foreach(arr〔1〕asmeth){metharrexplode(,meth);fcnamejsondecode({。metharr〔1〕。})fcname;methstrjsondecode({。metharr〔1〕。})methstr??;htmlstrstrreplace(arr〔0〕〔ii〕,fcname(trim(metharr〔0〕),methstr),htmlstr);ii;}returnhtmlstr;}
  cmone函数,替换单页信息functioncmonefunction(htmlstr){pregmatchall({cmone(。?)}(。?){cmone}is,htmlstr,listone);m0;listone〔0〕原字符串listone〔1〕标签内的参数listone〔2〕替换的字符串foreach(listone〔1〕ask5){ttrim(jsondecode({。k5。})t);ftrim(jsondecode({。k5。})f);otrim(jsondecode({。k5。})o);ctrim(jsondecode({。k5。})c??);ltrim(jsondecode({。k5。})l??);nametrim(jsondecode({。k5。})name??);nameDb(t)field(f)where(c)order(o)limit(l)find();截取字段pregmatchall({f。name。(。?)}is,listone〔2〕〔m〕,farr);farr〔1〕字段存放的数组,字段带有空格要trim()删除pregstrlistone〔2〕〔m〕;finum0;foreach(farr〔1〕asfi){ffarrexplode(,fi);判断是否存在自定义函数if(count(ffarr)1){fcnamejsondecode({。ffarr〔1〕。})fcname;methstrjsondecode({。ffarr〔1〕。})methstr??;fiarexplode(,,ffarr〔0〕);可以是多个变量,合并成了字符串fistr;for(c0;ccount(fiar)1;c){fistr。name〔trim(fiar〔c〕)〕。,;}左侧参数fistr右侧常量参数methstrfistrmbsubstr(fistr,0,mbstrlen(fistr)1);pregstrstrreplace(farr〔0〕〔finum〕,fcname(fistr,methstr),pregstr);}else{pregstrstrreplace(farr〔0〕〔finum〕,name〔trim(farr〔1〕〔finum〕)〕,pregstr);}finum;}htmlstrstrreplace(listone〔0〕〔m〕,pregstr,htmlstr);m;}returnhtmlstr;}
  cmpage函数,替换单页信息
  整个模板应该只会出现一次,使用pregmatch即可。functioncmpage(htmstr){整个页面替换字段,执行完成以后要清除掉cmpage标签pregreplace({cmpage(。)},,htmstr);pregmatch({cmpage(。)},htmstr,pagearr);if(pagearr){ttrim(jsondecode({。pagearr〔1〕。})t);ftrim(jsondecode({。pagearr〔1〕。})f);otrim(jsondecode({。pagearr〔1〕。})o);ctrim(jsondecode({。pagearr〔1〕。})c??);ltrim(jsondecode({。pagearr〔1〕。})l??);nametrim(jsondecode({。pagearr〔1〕。})name??);namedb(t)field(f)where(c)order(o)limit(l)find();pregmatchall({f。name。(。?)}is,htmstr,fuearr);finum0;foreach(fuearr〔1〕asfi){ffarrexplode(,fi);if(count(ffarr)1){fcnamejsondecode({。ffarr〔1〕。})fcname;methstrjsondecode({。ffarr〔1〕。})methstr??;fiarexplode(,,ffarr〔0〕);可以是多个变量,合并成了字符串fistr;for(c0;ccount(fiar)1;c){fistr。name〔trim(fiar〔c〕)〕。,;}左侧参数fistr右侧常量参数methstrfistrmbsubstr(fistr,0,mbstrlen(fistr)1);htmstrstrreplace(fuearr〔0〕〔finum〕,fcname(fistr,methstr),htmstr);}else{htmstrstrreplace(fuearr〔0〕〔finum〕,name〔trim(fuearr〔1〕〔finum〕)〕,htmstr);};finum;}}htmstrpregreplace({cmpage(。)},,htmstr);returnhtmstr;}
  loopfunction函数,模块内循环,分页循环functionloopfunction(htmstr,upaprarray()){pregmatchall({cmlist(。?)}(。?){cmlist}is,htmstr,listarr);li0;foreach(listarr〔0〕askloop){pregmatch({。}U,kloop,marr);nametrim(jsondecode({。listarr〔1〕〔li〕。})name);ttrim(jsondecode({。listarr〔1〕〔li〕。})t);ftrim(jsondecode({。listarr〔1〕〔li〕。})f);otrim(jsondecode({。listarr〔1〕〔li〕。})o);ctrim(jsondecode({。listarr〔1〕〔li〕。})c??);ltrim(jsondecode({。listarr〔1〕〔li〕。})l??);pagesizetrim(jsondecode({。listarr〔1〕〔li〕。})pagesize??);if(pagesize){acountdb(t)field(f)where(c)count(1);pagecountceil(acountpagesize);if(pagecount0){pagecount1;}ipageupapr〔ipage〕;pagepagefunction(pagesize,pagecount,upapr,ipage);upapr〔pagecount〕empty(upapr〔pagecount〕)?pagecount:(int)upapr〔pagecount〕;if(pagecountupapr〔pagecount〕){upapr〔pagecount〕pagecount;}if(upapr〔pagecount〕1){upapr〔page〕true;}adb(t)field(f)where(c)order(o)page(ipage,pagesize)select();htmstrstrreplace({page},page,htmstr);}else{adb(t)field(f)where(c)order(o)limit(l)select();}hs;key1;foreach(aasname){name〔key〕key;hs。blockfunction(listarr〔2〕〔li〕,name,key,name);key;}htmstrstrreplace(listarr〔0〕〔li〕,hs,htmstr);li;arraysplice(a,0,count(a));}returnarray(htmstrhtmstr,upaprupapr);}
  blockfunction函数,替换循环字段functionblockfunction(pregstr,name,key,mdname){pregmatchall({f。mdname。(。?)}is,pregstr,fuearr);finum0;foreach(fuearr〔1〕asfi){ffarrexplode(,fi);if(count(ffarr)1){fcnametrim(jsondecode({。ffarr〔1〕。})fcname);methstrtrim(jsondecode({。ffarr〔1〕。})methstr??);fiarexplode(,,ffarr〔0〕);可以是多个变量,合并成了字符串fistr;for(c0;ccount(fiar)1;c){fistr。name〔trim(fiar〔c〕)〕。,;}左侧参数fistr右侧常量参数methstrfistrmbsubstr(fistr,0,mbstrlen(fistr)1);pregstrstrreplace(fuearr〔0〕〔finum〕,fcname(fistr,methstr),pregstr);}else{pregstrstrreplace(fuearr〔0〕〔finum〕,name〔trim(fuearr〔1〕〔finum〕)〕,pregstr);};pregstrstrreplace({key},key,pregstr);finum;}returnpregstr;}
  loopcatfunction嵌套循环functionloopcatfunction(htmstr){pregmatchall({cmbox}(。?){cmbox}is,htmstr,listarr);li0;pregstr;foreach(listarr〔1〕askcat){pregstrcheckcatfunction(kcat);htmstrstrreplace(listarr〔0〕〔li〕,pregstr,htmstr);li;}returnhtmstr;}
  checkcatfunction嵌套循环functioncheckcatfunction(hsstr){获取结束标志pregmatch({cmlist(。)}i,hsstr,marr);enptrim(jsondecode({。marr〔1〕。})enp??cmlist);pregmatchall({cmlist(。?)}(。?){。enp。}is,hsstr,listarr);k0;foreach(listarr〔1〕assm){ttrim(jsondecode({。sm。})t);ftrim(jsondecode({。sm。})f);otrim(jsondecode({。sm。})o);ctrim(jsondecode({。sm。})c??);ltrim(jsondecode({。sm。})l??);nametrim(jsondecode({。sm。})name);adb(t)field(f)where(c)order(o)limit(l)select();hs;key1;foreach(aasname){hs。blockfunction(listarr〔2〕〔k〕,name,key,name);替换参数pregmatch(。name。〔(。?)〕i,listarr〔2〕〔k〕,csarr);if(csarr){hsstrreplace(csarr〔0〕,name〔csarr〔1〕〕,hs);}key;}hsstrstrreplace(listarr〔0〕〔k〕,hs,hsstr);k;}if(pregmatch({cmlist(。)}i,hsstr,isrr)){returncheckcatfunction(hsstr);}returnhsstr;}
  pagefunction函数,分页函数functionpagefunction(pagesize,pagecount,upapr,ipage){pagstrulclasspagination;totalpagt10;cathtmlpath;if(upapr〔cathtmlpath〕){cathtmlpath。upapr〔cathtmlpath〕;}if(ipage1){pagstr。liclassdisabledspanspanli;}else{pagstr。lili;}if(ipage5){startsp1;if(pagecounttotalpagt){endsppagecount;}else{endsptotalpagt;}}else{if(pagecounttotalpagt){endsppagecount;startsp1;}else{endspipage5;startspipage4;if(ipagepagecount5){endsppagecount;startspipage(totalpagt(pagecountipage))1;}}}for(isstartsp;isendsp;is){if(is1){cathtmlnameupapr〔cathtmlname〕;}else{cathtmlnameupapr〔cathtmlname〕。。is;}if((int)ipage(int)is){pagstr。liclassactive。is。li;}else{pagstr。li。is。li;}}if(ipagepagecount){pagstr。liclassdisabledspanspanli;}else{pagstr。lispanspanli;}pagstr。ul;returnpagstr;}

vivoX70系列大爆料自从vivoX系列发布开始每一次新机发布都是亮点,从上一个X60系列的微云台的亮点到现在为新机用上自研的V1芯片都是国产手机的一次进步今天我就给大家爆料一下即将在9月9号发布的……华为HarmonyOS2。1即将推出专门为骁龙888进行适配相信大家也知道,华为P50系列的部分机型用上骁龙8884G处理器,虽然是迫于无奈,但华为显然想要给用户提供更出色的体验。这不,最近有博主曝光,9月份上市的骁龙888版本华为P5……留声机大铜喇叭有线圈吗?留声机连电都不用要线圈干什么?那个大铜喇叭就是一个空芯的号筒,里边什么都没有。留声机是一个以纯机械方式实现声音录放的机器。因为声音的本质是由声源振动来推动空气产生声波,当……补齐所有短板!小米MIX5不止带来2K屏,还有超强影像小米MIX4发布之后,似乎带给用户的惊喜并没有想象中那么大,毕竟是用户期待三年的作品,配置方面中规中矩属实没有想到。但也许是因为屏下镜头技术,小米MIX4不得不在其他地方做出妥……EVO加持下惠普ENVY13这不可思议的使用体验2020年9月,英特尔公布了雅典娜计划2。0IntelEvo平台正式亮相了。全新的IntelEvo平台会对笔记本进行全方位考量,包括外观、性能、技术、续航等因素。也就是说……小米Mix4评测黑科技担当再次上线,几乎完美的全面屏丨钛极客小米MIX4自从小米推出第一款MIX系产品,就给消费者留下了黑科技的印象,并且也一直在探索如何实现更高屏占比的真全面屏,从前置摄像头下置,到滑盖式升降前置摄像头,到第四代……用手机发头条,头条里面的免费图库素材哪里找?这个问题我告诉你:你用头条普通版写文章或微头条时,写完之后要配图片,就找你写文章输入法界面的上面左上角,有一个小的长方块图标,方块里面有一个小山坡,点开这个图标,就……官宣荣耀新机将搭载高通骁龙778G移动平台Qualcomm中国微信公众号5月19日消息,今天,在高通5G峰会上,高通技术公司宣布推出全新高通骁龙778G5G移动平台,将为来自荣耀、iQOO、Motorola、OPPO、……5G商用时代,共享充电宝加盟代理前景随着手机移动支付和移动互联网的飞速发展,手机的电量成为了大多数人所头疼的问题,随着5G手机的普及,手机每天充电23次成为了现状,而充电宝作为手机移动充电的工具,在分享经济的带动……长时间停车后电瓶亏电该怎么办呢爱车停在某个角落从来没动过,稍有不慎,就会出现电瓶亏电,那么出现这一情况后该怎么办,又该如何避免电瓶亏电呢?汽车电瓶也称蓄电池,是电池的一种,其工作原理是将化学能转化为电……京东图书与快手电商联手造星知多星计划培育直播达人8月28日,京东图书与快手电商共同举办宣讲会,面向快手达人推出知多星造星计划。双方希望通过这个计划使更多达人成为荐书明星,打造图书直播业务新生态,使更多消费者能够通过视频直播感……智能黑板如何助力校本资源建设?近年来,学校信息化建设进程普遍加快,教育科研不断推进,学科融合不断深入,以智慧课堂、智慧校园和智慧教育为代表的新教育初见端倪,教学质量进一步显现,学生潜力进一步发掘,学校整体的……
动圈耳机采用同轴三圈架构是噱头吗?最近,小不点的同轴三圈大耳GYFU正式上市了。我和这款产品的主创人员非常熟悉,也在产品的研发过程中提了一些意见建议,最终的成品也是我非常满意和喜欢的。因此我想用三篇文章来具体介……欧盟无线产品CERED认证测试项目有哪些?无线电设备CERED测试项目有哪些?19995EC指令已实施多年,诸多地方满足不了现有产品。其实欧盟早已在2007年就已开始起草新指令,但进度没有那么快,于是在2011年再提交……智能建造是什么为什么做什么怎么做?智能建造已成为建筑业发展的必然趋势和转型升级的重要抓手。但是目前在推进智能建造过程中仍存在不落地、不务实的情况。本文从智能建造是什么、为什么和做什么等方面对智能建造的内涵、意义……借助AI和大数据技术,探迹科技如何改革传统的销售模式?一个月能做些什么?从订单缺乏,业务停滞,到实现业绩逆势增长200,并完成数字化销售领域的革新,这是深圳市铭华航电工艺技术有限公司跑出来的速度。无独有偶,一个月内,税……电源适配器盐雾测试标准方法电源适配器盐雾测试标准方法1。电源适配器为什么要做盐雾测试?电源适配器在储存、运输和使用过程中,经常受到周围环境有害因素的影响,电源适配器工作性能、使用可靠性和寿命……浅谈未来建筑业智慧建造转型的必要性目前,全球建筑运营能耗已占到总能耗的30以上,若再加上建设过程中的能耗,这一指标接近50。此外,城市建筑垃圾占到垃圾总量的30到40,与建筑有关的空气污染、光污染等占到综合环境……麦克风METI备案办理所需材料麦克风METI备案办理所需材料。日本经济产业省(METI,MinistryofEconomy,TradeandIndustry)发布该方法详细信息,其制定者是该部门商务信息政策……韩国KC认证和KCC认证KCC:KoreaCommunicationCommission即韩国通讯委员会根据韩国《电气通讯基本法》第33条,以及《无线电波法》第46条和d第57条的规定,建立了广……欧盟MSDS化学说明书办理MSDS证书怎样办理?产品办理MSDS证书有什么作用?MSDS是化学品的安全说明书(MaterialSafetyDataSheet),国际上称作化学品安全信息卡,简称MSDS(……超跑SUVHiPhiX太科幻!翼展门对标ModelX,超大三提到超跑SUV你可能心里会有概念,再跟你提高合这个品牌相信很多人都没听说说过,但是提到展翼门设计以及车灯自带表情包,如果你关注汽车行业,那你一定不陌生,那就是被称为超跑SUV的……4GDTU新突破,小身材大用途通讯终端作为物联网的核心部件,其表现直接关系到应用方案在市场中的整体竞争力。随着物联网应用大规模落地,物联网设备微型化、集成化趋势明显。超小体积以市场需求为驱动,有……Redmi首款真无线蓝牙耳机RedmiAirDots,售价9刚刚在Redmi春季新品发布会上,除了期待已久的RedmiNote7Pro和Redmi7手机外,Redmi还带来了一款真无线蓝牙耳机RedmiAirDots。RedmiA……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网