LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2150|回复: 10

帮忙,PHP,在smarty模板中使用动态二阶下拉菜单

[复制链接]
发表于 2007-6-30 13:38:02 | 显示全部楼层 |阅读模式
网上有不少的关于PHP的动态二阶下拉菜单代码,但都是js,php,混合起来的
现在我想在smarty中用模板替换的方式,不知如何做
请有这方面经验 的人,分享一下

认识的,有用PHP的人,好像都没使用到动态二阶下拉菜单
更别说,在smarty里面实现这一功能的
 楼主| 发表于 2007-7-2 09:42:57 | 显示全部楼层
难道这个问题,属于比较难的?
回复 支持 反对

使用道具 举报

发表于 2007-7-9 17:41:23 | 显示全部楼层
用xajax试试,不过和smaty一起用没试过。
回复 支持 反对

使用道具 举报

发表于 2007-7-10 11:54:04 | 显示全部楼层
这个问题是很难^_^,因为需要你自己先搞清楚一些基本知识。。。。

貌似你并不了解php、javascript各自的适用环境:
php是基于服务器端的脚本语言,javascript基本是使用在客户端的脚本。
动态菜单是属于客户端的表现层的,用php是无法实现的。
xajax底层也是javascript+xml的。
先学好html再说吧。。。。。。。。。。。
客户端可用的技术:javascript,vbscript,java applet and so on
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-7-10 13:23:51 | 显示全部楼层
Post by cg111
这个问题是很难^_^,因为需要你自己先搞清楚一些基本知识。。。。

貌似你并不了解php、javascript各自的适用环境:
php是基于服务器端的脚本语言,javascript基本是使用在客户端的脚本。
动态菜单是属于客户端的表现层的,用php是无法实现的。
xajax底层也是javascript+xml的。
先学好html再说吧。。。。。。。。。。。
客户端可用的技术:javascript,vbscript,java applet and so on


我对js,不太熟
ajax的认识也很少

但用php搞个开源bbs,项目还是没问题(如果对效能要求不高的话)
至于 html ,则是小学生时代的事情了,很久以前的了

现在,如果不用模板分离的话,我就可以实现动态二阶菜单,只是因为我的项目都是smarty,所以就看看能否在smarty中实现这一功能
回复 支持 反对

使用道具 举报

发表于 2007-7-10 17:04:46 | 显示全部楼层
在smarty的tpl文件中写javascript和普通的html好象没有什么区别吧?
至少我用起来没发现区别^_&
tpl中可以包含css,javascript,如果愿意,加一段flash也可以的。
原来做过一个好象是在tpl中包含过一个javascript的动态的树型菜单的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-7-11 08:48:36 | 显示全部楼层
Post by cg111
在smarty的tpl文件中写javascript和普通的html好象没有什么区别吧?
至少我用起来没发现区别^_&
tpl中可以包含css,javascript,如果愿意,加一段flash也可以的。
原来做过一个好象是在tpl中包含过一个javascript的动态的树型菜单的。


在smarty的tpl档中,加入js代码,当然是非常容易的
在smarty中之所以很难实现此功能,不是因为在tpl档中加入js麻烦
而是因为,smarty中,无法直接在tpl档中嵌入php代码,而只能用模板替换的方式

但我实现这个二阶动态的代码,如下:
<script language="JavaScript">
                var onecount;
                onecount=0;
                subcat=new Array();
                <?php
                $sql="select * from cr_columninfo";
                $result=mysql_query($sql);
                $count=0;
                while($rs=mysql_fetch_array($result))
                {
                        $query="select * from cr_columninfo where columnid=$rs[columnfatherid]";
                        $kresult=mysql_query($query);
                        $row=mysql_fetch_array($kresult);
                ?>
                subcat[<?=$count;?>]=new Array("<?=$row[columnname ]?>","<?=$rs[columnname ]?>");
                <?php
                $count++;
                }
                ?>
        onecount=<?=$count?>;
                function getmem(locationid)
                {
                //alert(onecount);
                document.form1.subtype.length=0;
                var locationid=locationid;
                var i;
                document.form1.subtype.options[0]=new Option(' ','');
                //alert(onecount);
                for(i=0;i<onecount;i++)
                {
                   if (subcat[0]==locationid)
                   {
                     //var j=1;
                    // for(j=1;j<=subcat[1];j++)
                     //{
                     document.form1.subtype.options[document.form1.subtype.length]=new Option(subcat[1],subcat[1])
                     //if (j>9) j=j+9;
                    // }
                   }
                }
                }
</script>

很明显,这里面,js,html,php是混在一起的
而smarty里面,必须将html,php分开,就必须用到模板变量
而我这段代码,想要改成模板替换的方式
真的是有点麻烦,特别是本人对js不了解,

所以实在是不知该如何修改!

不知我有没有将问题描述清楚?

因此,我的难点,绝对不是如楼上所说的,在tpl中加入js会有问题!
回复 支持 反对

使用道具 举报

发表于 2007-7-13 13:53:36 | 显示全部楼层
不用JS是不可能的,总不能选一个刷一下页面吧,我用xajax解决的
function myResponse()
{
        $objResponse =& new legacyXajaxResponse();
        $objResponse->setCharEncoding("gb2312");

        return $objResponse;
}

function html_options($arr, $set='AaBa005353dffs')
{
        foreach($arr as $k=>$v)
        {
                if(is_array($v))
                {
                        $options[] = "<optgroup title='$k'>";
                        foreach($v as $k2=>$v2)
                        {
                                $selected = ($set == $k)?'selected':'';
                                if(is_array($set))$selected = (in_array($k, $set))?'selected':'';
                                $options[] = "<option value='$k2' $selected>$v2</option>";
                        }
                        $options[] = "</optgroup>";
                }
                else
                {
                        $selected = ($set == $k)?'selected':'';
                        if(is_array($set))$selected = (in_array($k, $set))?'selected':'';
                        $options[] = "<option value='$k' $selected>$v</option>";
                }
        }

        return implode("\n", $options);
}


function html_select($idname='select', $options='', $set='AaBa00fte6t5', $js='', $size=0)
{
        $size = ($size==0)?'':"size='$size'";
        $select = "<select name='$idname' id='$idname' $size $js>\n";
        if(is_array($options))$select .= html_options($options, $set);
        $select .= "</select>\n";

        return $select;
}

function ProvinceSelect($name='province', $cityname='city', $set='上海', $label='id_province', $id_city='id_city')
{
        global $db;
        $objResponse = myResponse();
        $sql = "select value,id from province where countrycode='86' order by value";
        $rs = $db->query($sql);
        while($row = $db->fetch($rs))
        {
                $province[$row[0]] = $row[0];
        }
        $objResponse->addassign($label, "innerHTML", html_select($name, $province, $set, "onchange=\"xajax_CitySelect('$cityname', this.options[this.selectedIndex].value, '', '$id_city')\""));
        return $objResponse;
}


function CitySelect($name='city', $province='上海', $set='上海', $label='id_city')
{
        global $db;
        $objResponse = myResponse();

        $sql = "select id from province where value='$province'";
        $rs = $db->query($sql);
        $row = $db->fetch($rs);
        $provinceid=$row[0];

        $sql = "select value from city where province_id='$provinceid'";
        $rs = $db->query($sql);
        $city['不限'] = '不限';
        while($row = $db->fetch($rs))
        {
                $city[$row[0]] = $row[0];
        }
        $objResponse->addassign($label, "innerHTML", html_select($name, $city, $set));
        return $objResponse;
}
回复 支持 反对

使用道具 举报

发表于 2007-7-13 13:58:52 | 显示全部楼层
smarty可以直接调用php函数的
回复 支持 反对

使用道具 举报

发表于 2007-7-30 09:26:47 | 显示全部楼层

有需要可以联系QQ29252399

参考页面:HTTP://life.xmulife.cn
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表