域名注册|域名申请|域名空间|空间租用|虚拟主机租用
中域互联诚意为您提供域名注册、虚拟主机等网络服务,欢迎光临,热线:020-32676839、32696039
118 繁體中文 118 联系我们    118 关于我们    118 建站信息中心    118 显示在线咨询
118
118
虚拟主机

JAVASCRIPT + PHP 应用二:网页设计中树形菜单的动态实现

javascript 点击次数:648

 树形菜单,熟悉WINDOWS程序管理器的读者一定不会陌生。单击项目左侧的+号,项目展开;再次单击,项目收缩。读过很多篇有关树形菜单的JAVASCRIPT实现方法,原理很简单,都是利用STYLE中DISPLAY属性的控制。笔者本文的重点并不侧重于此,倒是想谈一谈如何实现每一次从数据库中提取数据并动态更新树形菜单。
  树形菜单主要用来导航。网站有很多栏目,每个栏目下有很多子栏目,栏目经常变动,如增加新栏目,改变现有栏目名称,调整主次栏目之间关系等等,如果每一次都去改动页面代码,非常不便。而且因为信息都存放在数据库中,动态实现变得可能和必要。
  本文并不侧重理论,只是为大家提供自己的一段代码,和大家一起来探讨一下PHP实现问题。为了便于说明,笔者对数据库作了一些改动,假设菜单字符串存放在MENU表中,MAIN字段存放主菜单字符串,SUB字段存放子菜单字符串,SUBID字段存放子菜单标识。


<PHP
 $DB = NEW MY_DB();
 $DB->QUERY("SELECT SUBID, MAIN FROM MENU GROUP BY MAIN ORDER BY SUBID");
 WHILE ($DB->NEXT_RECORD()){
  $MAIN[] = $DB->F("MAIN");
  $KEY[] = $DB->F("SUBID");
 }
 /*首先,连接数据库,查询所谓的栏目名称。以上代码采用了PHPLIB中的数据库函数,其中,$MAIN数组用来存放主菜单字符串,$KEY数组用来存放子菜单关键字。大家可以采用多种方法,因人而异*/
 FOR ($I=0;$I<COUNT($MAIN);$I++){
  $J=0;
  $DB->QUERY("SELECT SUB, SUBID FROM MENU WHERE MAIN=".$MAIN[$I]."");
  ////利用QUERY查询出与当前主菜单匹配的所有子菜单字符串
>
/*以下代码和HTML代码结合到一起,大家看起来可能会不习惯,但这样代码显得简洁多了。为了模拟树形菜单,笔者源程序中使用了几个图片文件,L.GIF, M.GIF和P.GIF,并利用ONMOUSE事件模拟菜单的动态效果。PHP语句主要是为JAVASCRIPT制作标签(TAG)的ID*/
<TABLE WIDTH="140" BORDER="0" CELLSPACING="0" CELLPADDING="0" CLASS="F14">
  <TR>
    <TD WIDTH="15"></TD>
    <TD ID="<PHP ECHO "M_".$KEY[$I]; >" WIDTH="9" HEIGHT="21"><IMG SRC="IMAGES/P.GIF" WIDTH="9" HEIGHT="21"></TD>
    <TD>
      <DIV STYLE="CURSOR:HAND" ONCLICK="JAVASCRIPT:MAKEMENU(<PHP ECHO $KEY[$I]; >)"  ONMOUSEOVER="JAVASCRIPT:MAKESHOW(IN)" ONMOUSEOUT="JAVASCRIPT:MAKESHOW(OUT)">&NBSP;<PHP ECHO $MAIN[$I]; ></DIV>
    </TD>
  </TR>
  <TR ID="<PHP ECHO "S_".$KEY[$I]; >" STYLE="DISPLAY:NONE">
    <TD WIDTH="15"></TD>
    <TD COLSPAN="2">
        <TABLE WIDTH="100%" BORDER="0" CELLSPACING="0" CELLPADDING="0" CLASS="F9">
        <PHP
         WHILE ($DB->NEXT_RECORD()){
        >
          <TR>
           <TD WIDTH="12">
<IMG SRC="IMAGES/<PHP ECHO ++$J==$DB->NF()"L.GIF":"T.GIF"; >" WIDTH="12" HEIGHT="21"></TD>
////需要说明一下,$J变量在这里用来决定显示什么图片。此句的意思是,子菜单的最后一项显示L.GIF,其它项显示T.GIF
            <TD>&NBSP;<PHP ECHO "<A HREF="YOURURL">YOURSTR</A>";></TD>
          </TR>
        <PHP
         }
        >
        </TABLE>
    </TD>
  </TR>
</TABLE>
<PHP
 }
>
到此为止,PHP的使命已经结束,大家可以把代码运行一下,看看输出是什么。总而言之,它的输出结果正是树形菜单所要的结构。下面我们需要构造JAVASCRIPT代码。很简单,我不打算作向详细的描述。
<SCRIPT LANGUAGE="JAVASCRIPT1.2">
<!--
 FUNCTION MAKEMENU(ID){
  MID="M_"+ID;
  SID="S_"+ID;
  WITH (DOCUMENT){
   IF (ALL(SID).STYLE.DISPLAY=="NONE"){
    ALL(SID).STYLE.DISPLAY="";
    ALL(MID).INNERHTML="<IMG SRC=IMAGES/M.GIF WIDTH=9 HEIGHT=21>";
   }ELSE{
    ALL(SID).STYLE.DISPLAY="NONE";
    ALL(MID).INNERHTML="<IMG SRC=IMAGES/P.GIF WIDTH=9 HEIGHT=21>";
   }
  }
 }
 
 FUNCTION MAKESHOW(TO){
  WITH (DOCUMENT){
   IF (TO==IN){
    WINDOW.EVENT.SRCELEMENT.STYLE.COLOR="RED";
    WINDOW.EVENT.SRCELEMENT.STYLE.FONTWEIGHT="BOLD";
   }ELSE{
    WINDOW.EVENT.SRCELEMENT.STYLE.COLOR="";
    WINDOW.EVENT.SRCELEMENT.STYLE.FONTWEIGHT="";
   }
  }
 }
-->
</SCRIPT>
  熟悉JAVASCRIPT的读者,以上代码理解起来应该不成问题。这段代码的难点就在于PHP的实现部分,调试时遇到很大麻烦,总是提示JAVASCIRPT错误。在排除万难之后,把这段代码奉献给大家,希望能为大家以后的网页设计工作节省一点宝贵的时间。

 

欢迎转载《JAVASCRIPT + PHP 应用二:网页设计中树形菜单的动态实现》,请保留出处。
返回首页 | 关于我们 | 联系我们 | 付款方式118 | 帮助中心 | 提问帮助 | 中域互联招聘 网站地图 建站信息中心
客服1号:619086478 客服2号:759043498 客服3号:419602084 客服4号:707187709
技术1号:502825590 技术2号:609223275 技术3号:347054506 网站备案:626709096
电话:020-32676839、32696039、32651958 传真:020-32677208 邮件和MSN:service@118cy.net 118
广州市炬正通信技术有限公司 地址:广州市黄埔大道中员村白马岗街艾琳大楼406 邮编:510655 
《中华人民共和国增值电信业务经营许可证》ISP证编号:粤B2-20080048  粤ICP备07025283号
广州虚拟主机提供商-中域互联营业执照