提供简单的emlog模版修改教程,分享一些有趣的程序源代码,记录每一次emlog修改的经历!
首页 关于本站 网站模板
代码教程
  • Emlog教程
  • 米拓教程
  • SEO优化教程
  • Ecshop教程
  • zblog教程
  • Excel技巧
  • 电脑软件教程
  • 互联网
  • 免费资源
  • 网络新闻
  • 留言咨询
  • 在线问答
  • 申请友链
  • 网址导航
  • 联系舍力
    舍力
    登录
    侧边栏壁纸
    博主头像
    舍力

    静以修身。

    • 累计撰写 1140 篇文章
    • 累计收到 3550 条评论
    • 首页
    • 栏目
      • 首页
      • 关于本站
      • 网站模板
      • 代码教程
        • Emlog教程
        • 米拓教程
        • SEO优化教程
        • Ecshop教程
        • zblog教程
        • Excel技巧
        • 电脑软件教程
      • 互联网
        • 免费资源
        • 网络新闻
      • 留言咨询
        • 在线问答
        • 申请友链
        • 网址导航
      • 联系舍力
    代码教程
    • 利用@media screen实现自适应网页布局兼容IE的respond.js 2015-6-30
      利用@media screen实现自适应网页布局兼容IE的respond.js respond.js 是一个快速、轻量的 polyfill,用于为 IE6-8 以及其它不支持 CSS3 Media Queries 的浏览器提供媒体查询的 min-width 和 max-width 特性,实现响应式网页设计(Responsive Web Design)。 (function(w) { "use strict"; w.matchMedia = w.matchMedia || function(doc, undefined) { var bool, docElem = doc.documentElement, refNode = docElem.firstElementChild || docElem.firstChild, fakeBody = doc.createElement("body"), div = doc.createElement("div"); div.id = "mq-test-1"; div.style.cssText = "position:absolute;top:-100em"; fakeBody.style.background = "none"; fakeBody.appendChild(div); return function(q) { div.innerHTML = '&shy;<style media="' + q + '"> #mq-test-1 { width: 42px; }</style>'; docElem.insertBefore(fakeBody, refNode); bool = div.offsetWidth === 42; docElem.removeChild(fakeBody); return { matches: bool, media: q }; }; }(w.document); })(this); (function(w) { "use strict"; var respond = {}; w.respond = respond; respond.update = function() {}; var requestQueue = , xmlHttp = function() { var xmlhttpmethod = false; try { xmlhttpmethod = new w.XMLHttpRequest(); } catch (e) { xmlhttpmethod = new w.ActiveXObject("Microsoft.XMLHTTP"); } return function() { return xmlhttpmethod; }; }(), ajax = function(url, callback) { var req = xmlHttp(); if (!req) { return; } req.open("GET", url, true); req.onreadystatechange = function() { if (req.readyState !== 4 || req.status !== 200 && req.status !== 304) { return; } callback(req.responseText); }; if (req.readyState === 4) { return; } req.send(null); }, isUnsupportedMediaQuery = function(query) { return query.replace(respond.regex.minmaxwh, "").match(respond.regex.other); }; respond.ajax = ajax; respond.queue = requestQueue; respond.unsupportedmq = isUnsupportedMediaQuery; respond.regex = { media: /@media+\{(*\{*\})+/gi, keyframes: /@(?:\-(?:o|moz|webkit)\-)?keyframes+\{(?:*\{*\})+*\}/gi, comments: /\/\**\*+(*\*+)*\//gi, urls: /(url\()?(+)?(\))/g, findStyles: /@media *(+)\{(+?)$/, only: /(only\s+)?(+)\s?/, minw: /\(\s*min\-width\s*:\s*(\s*+)(px|em)\s*\)/, maxw: /\(\s*max\-width\s*:\s*(\s*+)(px|em)\s*\)/, minmaxwh: /\(\s*m(in|ax)\-(height|width)\s*:\s*(\s*+)(px|em)\s*\)/gi, other: /\(*\)/g }; respond.mediaQueriesSupported = w.matchMedia && w.matchMedia("only all") !== null && w.matchMedia("only all").matches; if (respond.mediaQueriesSupported) { return; } var doc = w.document, docElem = doc.documentElement, mediastyles = , rules = , appendedEls = , parsedSheets = {}, resizeThrottle = 30, head = doc.getElementsByTagName("head") || docElem, base = doc.getElementsByTagName("base"), links = head.getElementsByTagName("link"), lastCall, resizeDefer, eminpx, getEmValue = function() { var ret, div = doc.createElement("div"), body = doc.body, originalHTMLFontSize = docElem.style.fontSize, originalBodyFontSize = body && body.style.fontSize, fakeUsed = false; div.style.cssText = "position:absolute;font-size:1em;width:1em"; if (!body) { body = fakeUsed = doc.createElement("body"); body.style.background = "none"; } docElem.style.fontSize = "100%"; body.style.fontSize = "100%"; body.appendChild(div); if (fakeUsed) { docElem.insertBefore(body, docElem.firstChild); } ret = div.offsetWidth; if (fakeUsed) { docElem.removeChild(body); } else { body.removeChild(div); } docElem.style.fontSize = originalHTMLFontSize; if (originalBodyFontSize) { body.style.fontSize = originalBodyFontSize; } ret = eminpx = parseFloat(ret); return ret; }, applyMedia = function(fromResize) { var name = "clientWidth", docElemProp = docElem, currWidth = doc.compatMode === "CSS1Compat" && docElemProp || doc.body || docElemProp, styleBlocks = {}, lastLink = links, now = new Date().getTime(); if (fromResize && lastCall && now - lastCall < resizeThrottle) { w.clearTimeout(resizeDefer); resizeDefer = w.setTimeout(applyMedia, resizeThrottle); return; } else { lastCall = now; } for (var i in mediastyles) { if (mediastyles.hasOwnProperty(i)) { var thisstyle = mediastyles, min = thisstyle.minw, max = thisstyle.maxw, minnull = min === null, maxnull = max === null, em = "em"; if (!!min) { min = parseFloat(min) * (min.indexOf(em) > -1 ? eminpx || getEmValue() : 1); } if (!!max) { max = parseFloat(max) * (max.indexOf(em) > -1 ? eminpx || getEmValue() : 1); } if (!thisstyle.hasquery || (!minnull || !maxnull) && (minnull || currWidth >= min) && (maxnull || currWidth <= max)) { if (!styleBlocks) { styleBlocks = ; } styleBlocks.push(rules); } } } for (var j in appendedEls) { if (appendedEls.hasOwnProperty(j)) { if (appendedEls && appendedEls.parentNode === head) { head.removeChild(appendedEls); } } } appendedEls.length = 0; for (var k in styleBlocks) { if (styleBlocks.hasOwnProperty(k)) { var ss = doc.createElement("style"), css = styleBlocks.join("\n"); ss.type = "text/css"; ss.media = k; head.insertBefore(ss, lastLink.nextSibling); if (ss.styleSheet) { ss.styleSheet.cssText = css; } else { ss.appendChild(doc.createTextNode(css)); } appendedEls.push(ss); } } }, translate = function(styles, href, media) { var qs = styles.replace(respond.regex.comments, "").replace(respond.regex.keyframes, "").match(respond.regex.media), ql = qs && qs.length || 0; href = href.substring(0, href.lastIndexOf("/")); var repUrls = function(css) { return css.replace(respond.regex.urls, "$1" + href + "$2$3"); }, useMedia = !ql && media; if (href.length) { href += "/"; } if (useMedia) { ql = 1; } for (var i = 0; i < ql; i++) { var fullq, thisq, eachq, eql; if (useMedia) { fullq = media; rules.push(repUrls(styles)); } else { fullq = qs.match(respond.regex.findStyles) && RegExp.$1; rules.push(RegExp.$2 && repUrls(RegExp.$2)); } eachq = fullq.split(","); eql = eachq.length; for (var j = 0; j < eql; j++) { thisq = eachq; if (isUnsupportedMediaQuery(thisq)) { continue; } mediastyles.push({ media: thisq.split("(").match(respond.regex.only) && RegExp.$2 || "all", rules: rules.length - 1, hasquery: thisq.indexOf("(") > -1, minw: thisq.match(respond.regex.minw) && parseFloat(RegExp.$1) + (RegExp.$2 || ""), maxw: thisq.match(respond.regex.maxw) && parseFloat(RegExp.$1) + (RegExp.$2 || "") }); } } applyMedia(); }, makeRequests = function() { if (requestQueue.length) { var thisRequest = requestQueue.shift(); ajax(thisRequest.href, function(styles) { translate(styles, thisRequest.href, thisRequest.media); parsedSheets = true; w.setTimeout(function() { makeRequests(); }, 0); }); } }, ripCSS = function() { for (var i = 0; i < links.length; i++) { var sheet = links, href = sheet.href, media = sheet.media, isCSS = sheet.rel && sheet.rel.toLowerCase() === "stylesheet"; if (!!href && isCSS && !parsedSheets) { if (sheet.styleSheet && sheet.styleSheet.rawCssText) { translate(sheet.styleSheet.rawCssText, href, media); parsedSheets = true; } else { if (!/^(*\/\/)/.test(href) && !base || href.replace(RegExp.$1, "").split("/") === w.location.host) { if (href.substring(0, 2) === "//") { href = w.location.protocol + href; } requestQueue.push({ href: href, media: media }); } } } } makeRequests(); }; ripCSS(); respond.update = ripCSS; respond.getEmValue = getEmValue; function callMedia() { applyMedia(true); } if (w.addEventListener) { w.addEventListener("resize", callMedia, false); } else if (w.attachEvent) { w.attachEvent("onresize", callMedia); } })(this); 直接下载>>respond.zip<<文件
      • 2015年6月30日
      • 10402 阅读
      • 2 评论
      代码教程
    • 删除ecshop手机网页WAP版的方法分享 2015-6-26
      删除ecshop手机网页WAP版的方法分享     删除ecshop自带的WAP版。用手机打开ECSHOP,就会跳转到mobile文件夹,如果打开wap功能,就能看到wap版得网站,且有BUG,难看。但目前智能手机、PAD、IPhone、Android可以跟电脑一样浏览和购物。实在不行,就下载个uc浏览器。所以这个wap功能实在无用武之地,可以彻底删除,且提高安全性。 1、删除/wap和/mobile目录和目录下的所有文件 2、删除根目录index.php中的 3、删除相关数据库(在SQL执行以下代码) DELETE FROM ecs_shop_config WHERE ecs_shop_config.code in ( "wap", "wap_config","wap_logo"); 4、删除languages/zh_cn/admin/shop_config.php中的
      • 2015年6月26日
      • 22084 阅读
      • 1 评论
      Ecshop教程
    • 必知信息发布技巧 - 关于关键词不得不知道的四点 2015-6-13
      必知信息发布技巧 - 关于关键词不得不知道的四点     1、选择核心关键字:饰品作为核心关键字其热门程度之高可想而知,一般像饰品这样的热门关键字基本上是通过百度推广做上去的,如果不惜金钱为代价可以通过百度推广,搜索发现,这个关键字已经被一些权威站点或者百度竞价垄断。不过你可以选择其他的相关的做核心关键字。比如"饰品+赠送","女性饰品购物”等等。     2、相关关键字:每个搜索引擎都给大家提供了参考。百度,雅虎,谷歌都有相关搜索,而且雅虎还有一个热门搜索,显示近期常用的相关词语。大家可以把相关关键字词作为网站的分类栏目。作为分类栏目好处是可以突出关键字,让其他内页辅助,并且可以在网站内多次合理的出现。稍微细心的朋友都会发现,很多时候页面里无相关内容,只因为分类栏目与搜索的关键字相同,却出现在搜索结果里。     3、生僻关键字:做生僻关键字主要是将来结合百度下拉进行生僻关键字炒作,比如在百度中输入品牌(公司名称)+空格出现你想要的生僻关键词,做生僻关键词前期需要大量投入文章,其文章标题要以热门关键字+生僻关键字的组合出现,例如OBH 气泡水机,最后通过百度下来营销工具,把生僻关键字做到百度下拉菜单栏目里。     4、垃圾关键字:你可以自己根据自己的网站内容,寻找一些相关的,但是很少被人使用的关键字。虽然这类关键字带来的流量很小,不过排名容易上去,也许一个页面,一个更新信息,被收录后当天就能排在第一页。补充一些相关页面比制造一直垃圾页面更能带来流量。特别是对于一些地方站,行业站来说,这是个比较好的方法。我有个网站,在来路统计里看到,关键字舍力博客一个月才被搜索几十次,但是所有的生僻关键字加一起,却占据了10%。
      • 2015年6月13日
      • 11386 阅读
      • 8 评论
      SEO优化教程
    • 标题拟定 - 如何设置关键词更好的被收录(标题关键词策划) 2015-6-13
      标题拟定 - 如何设置关键词更好的被收录(标题关键词策划) 更好的被收录策划关键词: 1、产品名称 2、公司名+产品名称 3、地区+产品名称 4、型号+产品名称 5、类别+产品名称 6、用途+产品名称 7、地区+型号+产品名称 8、品牌+型号+产品名称 9、性能+产品名称 10、产品名称+价格 11、产品名称+厂家 12、产品名称+批发 13、产品名称+供应商  ……其它的产品也是一样,如果是全国市场,可以在产品的前面加上各城市名。 (要注意的是产品名称里不要放电话号码或者QQ之类的)这样的话您的客户就可以通过不同的关键词搜索到您这边,效果自然就来得快了。
      • 2015年6月13日
      • 9925 阅读
      • 0 评论
      SEO优化教程
    • 信息发布技巧 - 百度收录规则(百度内部人员大揭底) 2015-6-13
      信息发布技巧 - 百度收录规则(百度内部人员大揭底)     如果想让百度收录的更多,我们就要写原创,而且要保质保量的完成,这样才能将即时客户转变成潜在客户,如果一个网站不能做到吸引客户,让他们没有了解的欲望,那这样的网站是很不成功的。所以我们不仅要提高网站的内容质量,还要了解百度收录的秘密。 百度讨厌的几种做法:     1、点击后打开的页面与客户想看的页面大相径庭,是另一个不相干的网页,这是一些作弊行为,百度是很不喜欢的,如果这种情况很多或者说是主要的“优化”形式,这个站的收录内容应该是很少了,而且是越来越少,因为用户体验上不去,权重也会越来越低。     2、这个问题很常见,百度要求内容与题目要有呼应。如果只是标题中有这种关键词,而内容中出现的很少这就属于作弊行为,百度会察觉到的,如果百度不在信任你的网站,那收录的内容一定会越来越少。     3、百度收录如果都是千篇一律,那用户体验一定也会下降,所以他们并不喜欢收录同样的内容,即使很精彩很经典,也不如新的更能吸引眼球。百度喜新厌旧,如果网站每天都更新,而且内容原创,受客户欢迎,那何愁百度不来收录呢?所以想增加收录量,网站内容一定要新颖。 百度对于内容的要求:  一、标题     1、原创:标题也需要原创,不要复制粘贴,搜索引擎喜欢原创的内容,重复的内容发布没有意义,搜索引擎不会收录。     2、带有长尾核心关键词:首先,确定你要推广的主关键词,如果你要推广高顶灯,那么,你的关键词就是“高顶灯”。然后,你要知道,主关键词的竞争是比较剧烈的,而且笼统的一个“高顶灯”,既不利于百度搜索引擎收录,也不能有效打动顾客,那么,如何具体化这个主关键词,至关重要,那就需要加入“长尾关键词”。     站在消费者的角度,这样一个标题也呼之欲出了,一连串的带有关键词的标题就出来了。 二、如何写内容     内容可以从多个方面进行描述如:产品概述、适用场所、性能、售后服务、特点等分段描述,注意用户体验。 三、图片     “治大国如烹小鲜”,发布产品信息,也应该有炒一碟菜的细致、精心。而一篇没有精美的图片相辉映的产品信息,就好比讲究“色香味俱全”的菜肴,少了“色”这一味,让人顿失胃口。 四、收录     只要不是重复性的内容,属原创内容百度,360,搜狗等搜索引擎一定会收录,客户在搜索引擎上搜索“高顶灯”类相关信息搜索结果中即会有您发布的信息。
      • 2015年6月13日
      • 9287 阅读
      • 1 评论
      SEO优化教程
    • 【转】5月份百度算法调整,排名下降原因分析 2015-6-12
      【转】5月份百度算法调整,排名下降原因分析     受夫唯老师的邀请,昨天在搜外的公开课上分享了百度K站的一些分析和算法的调整,经过今天为各位朋友同学分析了几十个网站之后,基本上确定了5月百度打击的核心目的是“SEO优化过度”。 经过数据整理得出以下特征:     1、绝大部被降权网站,标题、关键词、描述中都有关键词堆砌行为,推荐学习58同城的TDK写法。在TDK中堆砌关键词也是百度识别SEO站点的主要有效方式之一。     2、大部分被降权网站在文本、alt、超链接中的title属性中有堆砌关键词。这属于搜索引擎反作弊规则的重要一环,建议合理使用这些标签,而不是在其中使劲添加关键词。     3、部分网站有过度使用加粗标签。这个标签是百度打击SEO优化的一个主要标签。非常容易造成降权。     4、部分网站有多个H1等作弊行为,多个H1将会导致被反作弊规则识别,直接降权。     5、不少站点出现了大量的空连接或者重复链接,这是用户体验差的表现,有一定概率造成降权。     6、有大约1/5的站点访问速度特别慢。请及时更换空间或者服务器,访问速度过低会被降权,这是百度站长平台多次声明过的。     7、不少网站使用了QQ客服代码链接:http://wpa.qq.com/msgrd?v=3……,是以直接的链接形式出现的,建议这样的链接用JS实现或者加nofollow。有可能导致搜索引擎误判。     8、少量的网站存在一定数量死链接,建议尽快处理好。     9、在诊断过程中出现了一个可能是被百度误伤的正常优化站,建议可以调整自己的优化手法,或者向百度反馈,或者等待即可。     10、大部分网站都有大量的重复链接(内链),或者重复导出链接(向外导出链接),这是容易触发反作弊规则的一个情况。  以下是今天网站诊断过程中找到的几个很有代表性的截图:     上面的网站同时匹配了TDK堆砌关键词、多个H1作弊、重复链接、alt中关键词堆砌、title属性关键词堆砌、内页存在大量导出链接。嗯,这个站不调整自己的网站基本上不可能恢复排名了。
      • 2015年6月12日
      • 15696 阅读
      • 0 评论
      SEO优化教程
    • SEO中TDK写法的意思以及注意事项 2015-6-12
      SEO中TDK写法的意思以及注意事项   在SEO中,所谓的TDK其实就是title、description、keywords这三个标签,这三个标签在网站的优化过程中,至关重要所以今天童童来和大家分享下,如何去写好TDK标签! 1、title标题标签     一般采用的是关键词+网站名模式,建议是1-3个关键词用下划线_连接,最后小划线-链接网站名,标题一般建议是28个字,百度对网站标题索引是28个字,即你写的多排名结果不会显示出完整标题,所以最好是28个字内。 2、keywords关键词标签     建议选取网站的核心关键词3个左右,不要太多,用半角逗号相连。新人朋友有些喜欢在keywords标签中加入很多关键词,生怕浪费了,其实没这个必要,想什么都抓住,最后什么也抓不住。而且现在的keywords标签搜索引擎都不怎么看的。 3、description描述标签     建议是站名开头,用网站关键词说成一句话,一定要通顺。描述标签一般写120字以内,建议是64个字以内,因为百度等搜索引擎对描述标签排名索引是64个字。     Title标签是最为重要的一环,关系着目标关键词的排名,Keywords标签对百度搜索结果影响不大,Description标签是对title的一个补充,适合长尾关键词出现。     所有标签要符合四不过三,三不过四,二不过五的关键词撰写原则。所谓原则就是指四个字的关键词不要重复出现超过三次,三个字的关键词不要重复出现超过四次,二个字的关键词不要重复出现超过五次。
      • 2015年6月12日
      • 12768 阅读
      • 0 评论
      SEO优化教程
    • emlog教程:手机访问自动跳转到首页或相应文章地址 2015-6-12
      emlog教程:手机访问自动跳转到首页或相应文章地址 手机访问自动跳转到首页或相应文章地址,在模板文件header.php中<head></head>之间加入如下代码即可。 <script type="text/javascript"> if(/AppleWebKit.*Mobile/i.test(navigator.userAgent) || (/MIDP|SymbianOS|NOKIA|SAMSUNG|LG|NEC|TCL|Alcatel|BIRD|DBTEL|Dopod|PHILIPS|HAIER|LENOVO|MOT-|Nokia|SonyEricsson|SIE-|Amoi|ZTE/.test(navigator.userAgent))){ if(window.location.href.indexOf("?mobile")<0){ try{ if(/Android|webOS|iPhone|iPod|BlackBerry/i.test(navigator.userAgent)){ window.location.href="<?php echo BLOG_URL; ?>/m/?post=<?php echo $logid;?>"; } }catch(e){} } } </script>
      • 2015年6月12日
      • 13183 阅读
      • 16 评论
      Emlog教程
    • Ecshop:后台添加新功能栏目以及管理权限设置 2015-6-11
      Ecshop:后台添加新功能栏目以及管理权限设置 一、添加菜单项 打开 /admin/includes/inc_menu.php文件(后台框架左边菜单),在最后添加一行如下: 1$modules = 'sns_list.php?act=list'; ecshop默认一级菜单项有16项,所里这里的例子从17开始。当然这个key可以随便取的,index.php文件中对菜单用了ksort排序。“17_other_menu” 表示一级菜单,“sns_list”表示二级菜单。等号后面的值表示该菜单栏目打开的页面链接。 二、配置菜单语言  打开 /languages/zh_cn/admin/common.php文件,添加语言 1$_LANG = '其它设置'; 2$_LANG = 'SNS管理'; 这时候,用管理员身份(admin用户)登录后台,便可看到新添加的菜单项了。因为admin的权限是“all”。如果后台有多个管理员,比如ecshop商城的供货商们,或者其它管理人员(由admin创建的其它可登陆后台的账户),如果想让他们也拥有新添加菜单的查看权利,则必须为他们分配该栏目的管理权限。 三、把新菜单加入权限列表 打开 /languages/zh_cn/admin/priv_action.php文件,在“权限管理的一级分组”注释行下面添加如下代码 1$_LANG = '其它设置'; 这里的“other_manager”是该一级栏目的权限名称,这里和栏目名称“17_other_menu”保持一致,也可以随便取个名。这里以示区别,就没有和菜单名一样。 然后,添加二级栏目“sns_list”的权限名称。在本文件的最后添加即可 1//其它管理 2$_LANG = 'SNS管理'; 这里这个权限名称和二级菜单名是一致的。这两项现在在哪里呢?如下图 四、把一级菜单和二级菜单的权限关联起来 Ecshop:后台添加新栏目打开数据库,看到{pre}_admin_action表,新增两行数据。如下图 截图中第1列数据是action_id,是该表的自增主键。第2列数据是parent_id,来自上级的action_id。第3列数据就是step3中定义的权限名(键)。这样的话,两种权限就联系起来了。到这里,打开后台“管理员列表”,点击“分派权限”的图标,便可以看到step3示图所示权限了。用某后台用户勾选提交,该用户登陆后就能看到新增的菜单项了。
      • 2015年6月11日
      • 20929 阅读
      • 0 评论
      Ecshop教程
    • Ecshop一些比较常用的标签函数分享 2015-6-11
      Ecshop一些比较常用的标签函数分享 限制某个参数调用的数量: <!-- {if $smarty.foreach.参数.index lt 数量}-->代码<!-- {/if} --> 控制当某个参数少于多少时的显示方式: <!-- {if $smarty.foreach.参数.iteration<数量}-->代码<!-- {/if} --> 以上的参数函数如下(提供部分): 排行榜:top_goods 热门商品:hot_goods 精品推荐:best_goods 新品上市:new_goods 分类商品:cat_goods 最新文章:new_articles 举例: <!-- {foreach name=top_goods from=$top_goods item=goods}--> <!-- {if $smarty.foreach.top_goods.iteration<3}--><ul class="topcp_tp"><li><a href="{$goods.url}"><img src="{$goods.thumb}" alt="{$goods.name|escape:html}" class="samllimg" /></a></li></ul><!-- {/if} --> <!-- {if $smarty.foreach.top_goods.iteration>3}--><ul class="topcp_wz"><li><a href="{$goods.url}" title="{$goods.name|escape:html}">{$goods.short_name}</a></li></ul><!-- {/if} --> <!-- {/foreach} -->
      • 2015年6月11日
      • 20383 阅读
      • 0 评论
      Ecshop教程
    • Emlog模板设置插件使用教程及开发规范 2015-6-4
      Emlog模板设置插件使用教程及开发规范     一直以来,emlog走的轻量级路线,没有集成模板后台设置,于是很多功能强大的模板不得不在需要的时候,修改文件以改变设置。那么,有了这个插件以后,就可以不用如此纠结了,只要模板按照开发规范来开发,就可以使用本插件在后台进行设置了。重点强调,本插件是辅助插件,所有设置依赖于模板的功能,而不是插件本身,因此不要问我为什么没有blabla功能,请去寻求模板作者。 插件名称:模板设置 插件作者:奇遇  下载地址:http://www.emlog.net/plugin/144 哪些模板支持?     多模板,尤其是CMS模板,会有很多设置项,大多会有一个options.php文件,当你需要修改配置时,就得去修改文件,那么哪些模板才能用上插件的后台设置功能呢? 答案是:按照规范来开发的模板。模板开发者请看下面! 如何让模板能被插件识别?     在模板目录里放入options.php,内容格式如下即可,可以任意增加设置项,注意$options变量和注释: <?php /*@support tpl_options*/ !defined('EMLOG_ROOT') && exit('access deined!'); $options = array( 'sidebar' => array( 'type' => 'radio', 'name' => '侧边栏位置', 'values' => array( 'left' => '左边', 'right' => '右边' ), 'default' => 'right', ), 'sortIcon' => array( 'type' => 'image', 'name' => '分类图标设置', 'values' => array( TEMPLATE_URL . 'images/star.png', ), 'depend' => 'sort', 'unsorted' => true, 'description' => '给不同的分类设置不一样的小icon,以20×20为宜', ), ); options.php里,每个元素都该写什么?     如上所示,$options数组里,key为设置项的id,而value是一个数组,数组里包含若干个元素。其中type属性和name属性必选,name是设置项名字,而type用来指定设置项的类型,支持的类型如下: radio: 单选按钮 checkbox: 复选按钮 text: 文本 image: 图片 page: 页面 sort: 分类 tag: 标签     对于所有类型,default属性用于指定默认值,当没有指定default时,使用values里第一个值,若都没有指定,则会使用奇怪的默认值。     对于radio和chexkbox,values属性用来设置各个按钮的值和显示名称。     除sort外,均可以指定depend为sort,表示该选项可以根据不同的分类设置不同的值,当指定depend为sort时,可选unsorted属性,为true时,表示包括未分类,为false不包括,默认为true。     sort和page可设置multi属性为true,表示多选。     description属性可选,用以描述该选项。     若type为text,可设置multi属性为true,表示多行文本,即input和textarea的区别,可选属性rich用以支持富文本,若设置该值,将加载编辑器。     若type为sort、page或者tag,且设置了多选,默认值将为空,否则将为第一个该类型的值。 模板里如何调用设置项     插件提供简单方法_g($key),如上示例,可以使用_g('sidebar')来获取侧边栏的设置,取到的值将为0或者1,使用_g('sortIcon')来获取分类icon的全部设置,以分类id为key的数组,使用_g('sortIcon.1')来获取分类id为1(如果存在)的sortIcon。需要注意的是,对于类型为page的,将取到页面id,类型为sort的,将取到分类id,类型为tag的,将取到标签名。 若不传递参数,即使用_g()方法将获取到所有设置项,对于老的模板迁移来的,可以用extract(_g());来代替原来的加载option文件。
      • 2015年6月4日
      • 15345 阅读
      • 1 评论
      Emlog教程
    • Emlog博客程序像置顶文章一样显示热门和最新文章图标 2015-6-4
      Emlog博客程序像置顶文章一样显示热门和最新文章图标 Emlog是一款基于PHP和MySQL的功能强大的博客及CMS建站系统。致力于为您提供快速、稳定,且在使用上又极其简单、舒适的内容创作及站点搭建服务。 如何像置顶文章一样显示热门和最新文章图标,如下图所示 代码直接放入标题后面即可 <?php if(((date('Ymd',time())-date('Ymd',$value))<=2)&&($value=='n')){?> 说明:当发布日期小于2天则显示 <?php }elseif($value>=300){?> 说明:当访问量大于300则显示 <?php }?>
      • 2015年6月4日
      • 8459 阅读
      • 2 评论
      Emlog教程
    • 14
    • 15
    • 16
    • 17
    • 18
    博主栏壁纸
    博主头像 舍力

    静以修身。

    1140 文章数
    3550 评论量
    • emlogpro实现分站功能(同一后台,不同前端)
    倒计时
    最新评论
    • 肥饶
      肥饶
      1 年前
      这个好  随机
    • 爱比宝
      爱比宝
      2 年前
      好工具,谢谢分享
    • 上海网站建设
      上海网站建设
      2 年前
      感谢分享
    • ET聊
      ET聊
      2 年前
      分享资源交流经验
    • 百胜综合盘
      百胜综合盘
      2 年前
      很8错!感谢分享
    • 百科情报站
      百科情报站
      3 年前
      你这网站可以哦, 来换个友链吧
    • 舍力
      舍力
      3 年前
      @言之在线:win10都还没有弄明白呢
    • 言之在线
      言之在线
      3 年前
      win11好还是win10好
    • 天兴工作室
      天兴工作室
      3 年前
      网站整改,我网站友链全部下了,麻烦我的链接也可以删掉了
    • 贵金属回收
      贵金属回收
      3 年前
      善良让这世界有了温暖,如果都是冷漠,那多无趣
    载入天数...载入时分秒...
    基于宝塔面板,数据存储于阿里云ECS 粤ICP备11021420号