首先我发现实现点击下拉框中的选项跳转传递信息的功能是需要javascript实现的。于是我把相应代码拷过来,把跳转的地址改掉。接着我发现无法 把<option value=''>中value的值传过去,因为用’.'运算符没有任何用。于是又去看dede中的代码,原来js中要用’+‘来连接地址。由于省级和市级下拉框都需要用到js,而如果我使用同一个函数,则不好区分我传递的信息是哪一个,所以我用了两个函数,但是如果是一模一样的函数,只是最后的地址有一点不同的话,跳转总是会出现问题,无法正常传递信息。于是我又去看dede的代码,发现他有两个关于下拉框跳转的函数,一个是传递的id一个是传递的选项值。如图。
然后,本来是准备写很多和函数的,由于在每个函数里都会用到sql语句,每个函数里我都得进行模型实例化,太麻烦了,想起在看ThinkCMF中上传头像的代码时,看见他在所有方法前创建了全局的变量来进行实例化,这样就不必写很多重复的代码了。如图。
其次,在写的过程中,发现了一些要注意的地方,比如,在进行查询语句使用where()时,通常我们是要将int型与int型比较,可有时我们需要比较字符串,此时必须要在变量两边用双引号为其加上引号。还有如果我们只是需要找到一条信息,而此时使用select(),它返回的是二维数组,这里需要注意。而find方法是最多只会返回一条数据。
最后,在显示市级区级时,我的省级下拉框处应该显示的是我已经选择的内容,也就是说,我已经选择了的省级我需要一直保存着,这里我用到了session。
代码如下。
IndexadminController.class.php
<?php
namespace Student\Controller;
use Common\Controller\AdminbaseController;
class IndexadminController extends AdminbaseController{
protected $province_model;
protected $city_model;
protected $area_model;
//系统Action类提供了一个初始化方法_initialize接口,可以用于扩展需要,_initialize方法
// 会在所有操作方法调用之前首先执行
function _initialize(){
parent::_initialize();
$this->province_model=D("Common/Province");
$this->city_model=D("Common/City");
$this->area_model=D("Common/Area");
}
function index(){
$p=$this->province_model->select();
$this->assign('p',$p);
if($_GET['p']){
$pro=$_GET['p'];
// var_dump($_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"]);//输出当前完整URL
//注意一下,tp的查询语句,生成的sql语句,查询的username=admin,这种格式的少了单引号
$pselect=$this->province_model->where('province='."'".$pro."'")->select();
$this->assign('ps',$pselect[0]);
session('ps',$pselect[0]);
$c=$this->city_model->where('father='.$pselect[0]['id'])->select();
$this->assign('c',$c);
}
if($_GET['c']){
$father=$_GET['c'];
$cselect=$this->city_model->where('id='.$father)->select();
$this->assign('cs',$cselect[0]);
$a=$this->area_model->where('father='.$father)->select();
$this->assign('a',$a);
$this->assign('ps',session('ps'));
}
if($_POST){
$area=$_POST['area'];$city=$_POST['city'];$province=$_POST['province'];
$an=$this->area_model->where('id='.$area)->getField('area');
$cn=$this->city_model->where('id='.$city)->getField('city');
$pn=$this->province_model->where('id='.$province)->getField('province');
$this->assign('pn',$pn);
$this->assign('cn',$cn);
$this->assign('an',$an);
}
$this->display();
}
}
index.html
<admintpl file="header" />
<script LANGUAGE="JavaScript">
function ChangePage(sobj)
{
var ntxt = sobj.options[sobj.selectedIndex].text;
if(sobj.options[sobj.selectedIndex].value==0)
{
location.href="{:U('Indexadmin/index')}";
}
else
{
var ns = ntxt.split('|');
location.href="{:U('Indexadmin/index')}&p="+ns[0];
}
}
function ChangePage2(sobj)
{
var nv = sobj.options[sobj.selectedIndex].value;
if(sobj.options[sobj.selectedIndex].value==0)
{
location.href="{:U('Indexadmin/index')}";
}
else
{
location.href="{:U('Indexadmin/index')}&c="+nv;
}
}
</script>
</head>
<body class="J_scroll_fixed" style="min-width:800px;">
<div class="wrap J_check_wrap">
<ul class="nav nav-tabs">
<li class="active"><a href="{:U('Indexadmin/index')}">学生信息</a></li>
</ul>
<form action="{:U('Indexadmin/index')}" method="post">
<table class="table table-hover table-bordered table-list">
<select name="province" id="province" onChange="ChangePage(this)">
<?php if(!$ps) { ?>
<option value='0'>--省--</option>
<?php } else { ?>
<option value={$ps.id}>{$ps.province}</option>
<?php } ?>
<volist name='p' id='p'>
<option value={$p.id}>{$p.province}</option>
</volist>
</select>
<select name="city" id="city" onChange="ChangePage2(this)">
<?php if(!$cs) { ?>
<option value='0'>--市--</option>
<?php } else { ?>
<option value={$cs.id}>{$cs.city}</option>
<?php } ?>
<volist name='c' id='c'>
<option value={$c.id}>{$c.city}</option>
</volist>
</select>
<select name="area" id="area">
<option value='0'>--区--</option>
<volist name='a' id='a'>
<option value={$a.id}>{$a.area}</option>
</volist>
</select>
<input type='submit' value='提交'>
</table>
</form>
<?php if($pn&&$cn&&an){ ?>
{$pn}-{$cn}-{$an}
<?php } ?>
</div>
<script src="__ROOT__/statics/js/common.js"></script>
</body>
</html>
效果如图。
有很多地方写的很复杂,可能是因为我用的都是很简单的东西,所以复杂了,还有很多我不知道的很有效率的方法期待着我的探索。
...当该页面还有其他信息的时候要注意,跳转到新页面时其他信息要保存