二次开发第一天

哎,人比较懒,边玩边做吧,第一天构思栏目构架很繁琐,发呆了好几天,花了一个小时解决了一个搜索,一点一点记录下自己的过程吧

<form name="search" method="get" action="{APP_PATH}index.php" target="_blank">    
        <div class="option" onClick="wValDisp('h','1');"><span id="wn_h">资讯</span></div>

        <div class="sbox">
                <input type="hidden" name="m" value="search"/>
                <input type="hidden" name="c" value="index"/>
                <input type="hidden" name="a" value="init"/>
                <input type="hidden" name="typeid" value="1" id="typeid"/>
                <input type="hidden" name="siteid" value="{$siteid}" id="siteid"/>
                <input type="text" class="text" name="q" id="q"/>        
        </div>        
        <div class="sbtn"><input type="submit" value="搜" style="letter-spacing:-1px;" /></div>
        <div id="sbArea_h" style="display:none;">
            {php $j=0}
            {php $search_model = getcache('search_model_'.$siteid, 'search');}
            {loop $search_model $k=>$v}
            {php $j++;}
                <a  target="_self"  href="javascript:wValChg('{$j}','h');" onFocus="blur();"><div class="dselObj" id="id="wv_h_{$j}">{$v['name']}</div></a>{if $j != count($search_model)}<span></br></span>{/if}
            {/loop}
            {php unset($j);}  
            
        </div>
        </form>        
 <input type="hidden" name="typeid" value="1" id="typeid"/> 这里是为了有一个默认选择搜索的类型
搜索需要引用<script language="JavaScript" src="{JS_PATH}js/fun_index.js"></script> 这个JS
//39健康搜索
function getNavigatorType(){
    if(navigator.appName == "Microsoft Internet Explorer")
        return 1;  
    else if(navigator.appName == "Netscape")
        return 2;    
    else 
        return 0;
}

function getObject(objectId){ 
    // checkW3C DOM, then MSIE 4, then NN 4. 
    if(document.getElementById && document.getElementById(objectId)){ 
        return document.getElementById(objectId);
    }else if (document.all && document.all(objectId)){ 
        return document.all(objectId); // IE4,5.0 
    }else if (document.layers && document.layers[objectId]){ 
        return document.layers[objectId];  // Netscape 4.x 
    }else{ 
        return false; 
    } 
}

function wValChg(idx,sts){
    //var s = "http://www.yikao163.com/";
    if(idx == "1") {getObject("wn_"+ sts +"").innerHTML = "资讯"; getObject("typeid").value="1";}
    if(idx == "2") {getObject("wn_"+ sts +"").innerHTML = "图片"; getObject("typeid").value="3";}
    if(idx == "3") {getObject("wn_"+ sts +"").innerHTML = "下载"; getObject("typeid").value="2";}
    if(idx == "4") {getObject("wn_"+ sts +"").innerHTML = "专题"; getObject("typeid").value="52";}
    //m=search&c=index&a=init&typeid=1&siteid=1&q=测试一下
    /*if(sts == "h"){
        document.search.action = s + idx +".aspx";
    }*/
    getObject("sbArea_"+ sts +"").style.display = "none";
}

function wValDisp(sts,idx){
    if(getObject("sbArea_"+ sts +"").style.display == "none"){
        getObject("sbArea_"+ sts +"").style.display = "";
    }else{
        getObject("sbArea_"+ sts +"").style.display = "none";
    }
}

function setSelBox(event){
    var _event;
    switch (getNavigatorType()) {
        case 1 : // IE
            _event = window.event;
            node = _event.srcElement;
            nodeName = _event.srcElement.className;
            break;
        case 2 : // Netscape
            _event = event;
            node = _event.target;
            nodeName = _event.target.className;
            break;
        default :
            nodeName = "None"; 
            break;
    }
    if(nodeName == "dselObj"){
        
    }else{
        try{
            document.getElementById("sbArea_h").style.display = "none";
        }catch(e){}
    }
}
document.onmousedown = setSelBox;

//显示与隐藏列表
function showList(id,num){
    if(num == 1){
        document.getElementById(id).style.display = "block";
    }
    else{
        document.getElementById(id).style.display = "none";
    }
}

//选项卡切换
function showTab(n1,n2){
    var h=document.getElementById("Tab"+n1).getElementsByTagName("h2");
    var d=document.getElementById("Tab"+n1).getElementsByTagName("div");
    for(var i=0;i<h.length;i++){
        if(n2-1==i){
            h[i].className+=" up";
            d[i].className+=" block";
        }
        else {
            h[i].className=" ";
            d[i].className=" ";
        }
    }
}

//设为首页&加入收藏
var isIE=(document.all&&document.getElementById&&!window.opera)?true:false; 
var isMozilla=(!document.all&&document.getElementById&&!window.opera)?true:false; 
var isOpera=(window.opera)?true:false;
var seturl='url(#default#homepage)';
var weburl=window.location.href;
var webname=document.title;

function myhomepage()    {
    if(isMozilla){
        try {netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");} 
        catch (e){alert("此操作被浏览器拒绝!\n请在浏览器地址栏输入“about:config”并回车\n然后将[signed.applets.codebase_principal_support]设置为'true'");}
        var prefs = Components.classes['@mozilla.org/preferences-service;1'].getService(Components.interfaces.nsIPrefBranch);
        prefs.setCharPref('browser.startup.homepage',weburl);
    }
    if(isIE){
        this.homepage.style.behavior=seturl;this.homepage.sethomepage(weburl); 
    }
}

function addfavorite()
{

    if(isMozilla){
        if (document.all){ window.external.addFavorite(weburl,webname);}
        else if (window.sidebar){ window.sidebar.addPanel(webname, weburl,"");}
    }
    if(isIE){window.external.AddFavorite(weburl, webname);}    
}

//flash 浮标必要脚本
function insertFlash(elm, url, w, h, id) {
 if (!document.getElementById(elm)) return;
 var str = '';
 str += '<embed width="'+ w +'" height="'+ h +'" src="'+ url +'" quality="autohigh" wmode="opaque" type="application/x-shockwave-flash" plugspace="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" id='+id+'></embed>';
 document.getElementById(elm).innerHTML = str;
}

function insertFlash1(elm, url, w, h, id) {
 if (!document.getElementById(elm)) return;
 var str = '';
 str += '<embed width="'+ w +'" height="'+ h +'" src="'+ url +'" quality="autohigh" wmode="transparent" type="application/x-shockwave-flash" plugspace="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" id='+id+'></embed>';
 document.getElementById(elm).innerHTML = str;
}


//** Featured Content Slider script- (c) Dynamic Drive DHTML code library: http://www.dynamicdrive.com.
var featuredcontentslider={
enablepersist: true, //persist to last content viewed when returning to page?
settingcaches: {}, //object to cache "setting" object of each script instance

buildcontentdivs:function(setting){
    var alldivs=document.getElementById(setting.id).getElementsByTagName("div")
    for (var i=0; i<alldivs.length; i++){
        if (this.css(alldivs[i], "contentdiv", "check")){ //check for DIVs with class "contentdiv"
            setting.contentdivs.push(alldivs[i])
                alldivs[i].style.display="none" //collapse all content DIVs to begin with
        }
    }
},

buildpaginate:function(setting){
    this.buildcontentdivs(setting)
    var sliderdiv=document.getElementById(setting.id)
    var pdiv=document.getElementById("paginate-"+setting.id)
    var toc=setting.toc
    var pdivlinks=pdiv.getElementsByTagName("a")
    var toclinkscount=0 //var to keep track of actual # of toc links
    for (var i=0; i<pdivlinks.length; i++){
        if (this.css(pdivlinks[i], "toc", "check")){
            if (toclinkscount>setting.contentdivs.length-1){ //if this toc link is out of range (user defined more toc links then there are contents)
                pdivlinks[i].style.display="none" //hide this toc link
                continue
            }
            pdivlinks[i].setAttribute("rel", ++toclinkscount) //store page number inside toc link
            pdivlinks[i][setting.revealtype]=function(){
                featuredcontentslider.turnpage(setting, this.getAttribute("rel"))
                return false
            }
            setting.toclinks.push(pdivlinks[i])
        }
        else if (this.css(pdivlinks[i], "prev", "check") || this.css(pdivlinks[i], "next", "check")){ //check for links with class "prev" or "next"
            pdivlinks[i].onclick=function(){
                featuredcontentslider.turnpage(setting, this.className)
                return false
            }
        }
    }
    this.turnpage(setting, setting.currentpage, true)
    if (setting.autorotate[0]){ //if auto rotate enabled
        pdiv[setting.revealtype]=function(){
            featuredcontentslider.cleartimer(setting, window["fcsautorun"+setting.id])
        }
        sliderdiv["onclick"]=function(){ //stop content slider when slides themselves are clicked on
            featuredcontentslider.cleartimer(setting, window["fcsautorun"+setting.id])
        }
        setting.autorotate[1]=setting.autorotate[1]+(1/setting.enablefade[1]*50) //add time to run fade animation (roughly) to delay between rotation
     this.autorotate(setting)
    }
},

urlparamselect:function(fcsid){
    var result=window.location.search.match(new RegExp(fcsid+"=(\\d+)", "i")) //check for "?featuredcontentsliderid=2" in URL
    return (result==null)? null : parseInt(RegExp.$1) //returns null or index, where index (int) is the selected tab's index
},

turnpage:function(setting, thepage, autocall){
    var currentpage=setting.currentpage //current page # before change
    var totalpages=setting.contentdivs.length
    var turntopage=(/prev/i.test(thepage))? currentpage-1 : (/next/i.test(thepage))? currentpage+1 : parseInt(thepage)
    turntopage=(turntopage<1)? totalpages : (turntopage>totalpages)? 1 : turntopage //test for out of bound and adjust
    if (turntopage==setting.currentpage && typeof autocall=="undefined") //if a pagination link is clicked on repeatedly
        return
    setting.currentpage=turntopage
//    setting.contentdivs[turntopage-1].style.zIndex=++setting.topzindex
    this.cleartimer(setting, window["fcsfade"+setting.id])
    setting.cacheprevpage=setting.prevpage
    if (setting.enablefade[0]==true){
        setting.curopacity=0
        this.fadeup(setting)
    }
    if (setting.enablefade[0]==false){ //if fade is disabled, fire onChange event immediately (verus after fade is complete)
        setting.contentdivs[setting.prevpage-1].style.display="none" //collapse last content div shown (it was set to "block")
        setting.onChange(setting.prevpage, setting.currentpage)
    }
    setting.contentdivs[turntopage-1].style.visibility="visible"
    setting.contentdivs[turntopage-1].style.display="block"
    if (setting.prevpage<=setting.toclinks.length) //make sure pagination link exists (may not if manually defined via "markup", and user omitted)
        this.css(setting.toclinks[setting.prevpage-1], "selected", "remove")
    if (turntopage<=setting.toclinks.length) //make sure pagination link exists (may not if manually defined via "markup", and user omitted)
        this.css(setting.toclinks[turntopage-1], "selected", "add")
    setting.prevpage=turntopage
    if (this.enablepersist)
        this.setCookie("fcspersist"+setting.id, turntopage)
},

setopacity:function(setting, value){ //Sets the opacity of targetobject based on the passed in value setting (0 to 1 and in between)
    var targetobject=setting.contentdivs[setting.currentpage-1]
    if (targetobject.filters && targetobject.filters[0]){ //IE syntax
        if (typeof targetobject.filters[0].opacity=="number") //IE6
            targetobject.filters[0].opacity=value*100
        else //IE 5.5
            targetobject.style.filter="alpha(opacity="+value*100+")"
    }
    else if (typeof targetobject.style.MozOpacity!="undefined") //Old Mozilla syntax
        targetobject.style.MozOpacity=value
    else if (typeof targetobject.style.opacity!="undefined") //Standard opacity syntax
        targetobject.style.opacity=value
    setting.curopacity=value
},

fadeup:function(setting){
    if (setting.curopacity<1){
        this.setopacity(setting, setting.curopacity+setting.enablefade[1])
        window["fcsfade"+setting.id]=setTimeout(function(){featuredcontentslider.fadeup(setting)}, 50)
    }
    else{ //when fade is complete
        if (setting.cacheprevpage!=setting.currentpage) //if previous content isn't the same as the current shown div (happens the first time the page loads/ script is run)
            setting.contentdivs[setting.cacheprevpage-1].style.display="none" //collapse last content div shown (it was set to "block")
        setting.onChange(setting.cacheprevpage, setting.currentpage)
    }
},

cleartimer:function(setting, timervar){
    if (typeof timervar!="undefined"){
        clearTimeout(timervar)
        clearInterval(timervar)
        if (setting.cacheprevpage!=setting.currentpage){ //if previous content isn't the same as the current shown div
            setting.contentdivs[setting.cacheprevpage-1].style.display="none"
        }
    }
},

css:function(el, targetclass, action){
    var needle=new RegExp("(^|\\s+)"+targetclass+"($|\\s+)", "ig")
    if (action=="check")
        return needle.test(el.className)
    else if (action=="remove")
        el.className=el.className.replace(needle, "")
    else if (action=="add")
        el.className+=" "+targetclass
},

autorotate:function(setting){
 window["fcsautorun"+setting.id]=setInterval(function(){featuredcontentslider.turnpage(setting, "next")}, setting.autorotate[1])
},

getCookie:function(Name){ 
    var re=new RegExp(Name+"=[^;]+", "i"); //construct RE to search for target name/value pair
    if (document.cookie.match(re)) //if cookie found
        return document.cookie.match(re)[0].split("=")[1] //return its value
    return null
},

setCookie:function(name, value){
    document.cookie = name+"="+value

},

init:function(setting){
    var persistedpage=this.getCookie("fcspersist"+setting.id) || 1
    var urlselectedpage=this.urlparamselect(setting.id) //returns null or index from: mypage.htm?featuredcontentsliderid=index
    this.settingcaches[setting.id]=setting //cache "setting" object
    setting.contentdivs=[]
    setting.toclinks=[]
//    setting.topzindex=0
    setting.currentpage=urlselectedpage || ((this.enablepersist)? persistedpage : 1)
    setting.prevpage=setting.currentpage
    setting.revealtype="on"+(setting.revealtype || "click")
    setting.curopacity=0
    setting.onChange=setting.onChange || function(){}
    if (setting.contentsource[0]=="inline")
        this.buildpaginate(setting)
}

}
View Code

 <div class="option" onClick="wValDisp('h','1');"><span id="wn_h">资讯</span></div>

<a  target="_self"  href="javascript:wValChg('{$j}','h');" onFocus="blur();"><div class="dselObj" id="id="wv_h_{$j}">{$v['name']}</div></a>{if $j != count($search_model)}<span></br></span>{/if}

这两句要跟里面的JS对应起来

参考代码

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>Js特效:Js实现的下拉列表框效果--中国IT人才网!IT求职,IT招聘</title>
</head>
<style type="text/css">
*{ margin:0; padding:0;}
body { font-size:12px; line-height:150%;}
td{ height:22px; padding:6px;}
a{font-size:12px; color:#000000; text-decoration:none;}
a:link{color: #000000;}
a:visited{color: #000000;}
a:hover{text-decoration: underline; color:#000000;}
a:active{color:#000000;}
img{border:none;}
ul,li{ list-style-type:none;}

.search{ width:300px; margin:30px auto;}
.sel{float:right;border:solid 1px #FFC128; height:18px;width:60px;overflow:hidden;margin-top:3px;}

.option {width:50px;height:16px;padding:2px 0 0 6px;margin:0px 0 0 0px;color:#d78100;font-size:12px;line-height:14px;+line-height:16px;position:absolute;z-index:10;background:#fff url(http://images.qqyy.com/buttonbg.gif) no-repeat -645px -4px;cursor:pointer;}
#sbArea_h {width:49px;font-size:14px;color:#d78100;padding:1px 0 1px 0px;margin:18px 0 0 0px;border:#f5a429 1px solid;position:absolute;z-index:20;background:#fff;}
#sbArea_h a {float:left;color:#666; text-decoration:none;}
#sbArea_h a:hover {color:#fff;background:#f90 url(http://images.qqyy.com/buttonbg.gif) no-repeat -625px -4px;}
#sbArea_h div {float:left;width:43px;padding:2px 0 2px 5px;-padding:3px 0 0 5px;cursor:pointer;}
</style>
<script type="text/javascript">
function wValDisp(sts,idx)
{
    if(getObject("sbArea_"+ sts +"").style.display == "none")
    {
        getObject("sbArea_"+ sts +"").style.display = "";
    }
    else
    {
        getObject("sbArea_"+ sts +"").style.display = "none";
    }
}
function getObject(objectId)
{ 
    // checkW3C DOM, then MSIE 4, then NN 4. 
    if(document.getElementById && document.getElementById(objectId))
    { 
        return document.getElementById(objectId);
    }
    else if (document.all && document.all(objectId))
    { 
        return document.all(objectId); // IE4,5.0 
    }
    else if (document.layers && document.layers[objectId])
    { 
        return document.layers[objectId];  // Netscape 4.x 
    }
    else
    { 
        return false; 
    } 
}
function wValChg(idx,sts){
    if(idx == "s") getObject("wn_"+ sts +"").innerHTML = "综合";
    if(idx == "h") getObject("wn_"+ sts +"").innerHTML = "人才";
    if(idx == "j") getObject("wn_"+ sts +"").innerHTML = "职位";
    if(idx == "z") getObject("wn_"+ sts +"").innerHTML = "资讯";
    getObject("sbArea_"+ sts +"").style.display = "none";
}
function getNavigatorType()
{
    if(navigator.appName == "Microsoft Internet Explorer")
        return 1;  
    else if(navigator.appName == "Netscape")
        return 2;    
    else 
        return 0;
}
function setSelBox(event)
{
    var _event;
    switch (getNavigatorType())
    {
        case 1 : // IE
            _event = window.event;
            node = _event.srcElement;
            nodeName = _event.srcElement.className;
            break;
        case 2 : // Netscape
            _event = event;
            node = _event.target;
            nodeName = _event.target.className;
            break;
        default :
            nodeName = "None"; 
            break;
    }
    if(nodeName == "dselObj")
    {
        
    }else
    {
        try
        {
            document.getElementById("sbArea_h").style.display = "none";
        }
        catch(e){}
    }
}
document.onmousedown = setSelBox;
</script>
<body>
<div class="search">
    <div class="sel">    
        <input type="hidden" name="w" value="h"/>
        <div class="option" onClick="wValDisp('h','web');"><span id="wn_h">综合</span></div>
        <div id="sbArea_h" style="display:none;">
            <a target="_self" href="javascript:wValChg('s','h');" onFocus="blur();"><div class="dselObj" id="wv_h_0">综合</div></a>
            <a target="_self" href="javascript:wValChg('h','h');" onFocus="blur();"><div class="dselObj" id="wv_h_0">人才</div></a>
            <a target="_self" href="javascript:wValChg('j','h');" onFocus="blur();"><div class="dselObj" id="wv_h_1">职位</div></a>
            <a target="_self" href="javascript:wValChg('z','h');" onFocus="blur();"><div class="dselObj" id="wv_h_2">资讯</div></a>
        </div>
    </form>
    </div>
</div>
</body>
</html>
View Code

注意JS里面的提交地址的变化,这里主要采用GET方式,post方式的话得要另外想办法了



2.{php echo runhook('glogal_header')} {php echo runhook('glogal_menu')}这两个跟后台设置是否显示有关系

3.用到一些函数
  {$url}当前地址
  
  getcache是 读取缓存文件的函数
  具体函数实现见phpcms\libs\functions\global.func.php中
  
/**
* 读取缓存,默认为文件缓存,不加载缓存配置。
* @param string $name 缓存名称
* @param $filepath 数据路径(模块名称) caches/cache_$filepath/
* @param string $config 配置名称
*/
function getcache($name, $filepath='', $type='file', $config='')

  就像{php $area_linkage = getcache(1,'linkage'); $area_data = $area_linkage[data];} <!-- 区域缓存 --> 就是读取caches\caches_linkage\caches_data下面的区域缓存

  {str_cut($r[catname],12,"")}截取12个字符,汉字跟字母字符还有点区别的

  {url_par("areaid=$key",$url)} 格式化一般用作超链接后面的产生参数,例如<li><a class="i4" href="{url_par("areaid=$key",$url)}">{$val}</a></li>



posted on 2015-01-15 15:17  HOT SUMMER  阅读(340)  评论(0)    收藏  举报

导航