Home > Article > Backend Development > thinkphp的问题弄了半天了,还是不知道,各位大神帮忙看看吧
控制器中的代码:
public function testt(){
//$title="练习册";
//$content='
'.$_GET['name'];
//$this->assign('title',$title);
$User = M('name');
$list = $User->select();
$this->assign('list',$list);
$this->assign("title","SMARTY测试");
$this->display();
}
模板中的代码:
{$title}
list是空 你自己在检查下
list是为空,在控制器里面能查到数据,可是交给模板后,通过foreach标签函数处理后就变为空了。不知道哪里的错误???????????????????????????????????
public function _foreach($attr,$content) { static $_iterateParseCache = array(); //如果已经解析过,则直接返回变量值 $cacheIterateId = md5($attr.$content); if(isset($_iterateParseCache[$cacheIterateId])) return $_iterateParseCache[$cacheIterateId]; $tag = $this->parseXmlAttr($attr,'foreach'); $name = $tag['name']; $item = $tag['item']; $key = !empty($tag['key'])?$tag['key']:'key'; $name = $this->autoBuildVar($name); $parseStr = '<?php if(is_array('.$name.')): foreach('.$name.' as $'.$key.'=>$'.$item.'): ?>'; $parseStr .= $this->tpl->parse($content); $parseStr .= '<?php endforeach; endif; ?>'; $_iterateParseCache[$cacheIterateId] = $parseStr; if(!empty($parseStr)) { return $parseStr; } return ; }
你模板中的foreach应该写成{foreach name='' item=''}吧?
public function _foreach($attr,$content) { static $_iterateParseCache = array(); //如果已经解析过,则直接返回变量值 $cacheIterateId = md5($attr.$content); if(isset($_iterateParseCache[$cacheIterateId])) return $_iterateParseCache[$cacheIterateId]; $tag = $this->parseXmlAttr($attr,'foreach'); $name = $tag['name']; $item = $tag['item']; $key = !empty($tag['key'])?$tag['key']:'key'; $name = $this->autoBuildVar($name); $parseStr = '<?php if(is_array('.$name.')): foreach('.$name.' as $'.$key.'=>$'.$item.'): ?>'; $parseStr .= $this->tpl->parse($content); $parseStr .= '<?php endforeach; endif; ?>'; $_iterateParseCache[$cacheIterateId] = $parseStr; if(!empty($parseStr)) { return $parseStr; } return ; }
怎么办啊,我写的都是最简单的几句代码,
结果在源码里测就是parseXmlAttr函数里面出的问题。可是会是源码的问题么
怎么办啊,我写的都是最简单的几句代码,
结果在源码里测就是parseXmlAttr函数里面出的问题。可是会是源码的问题么
public function parseXmlAttr($attr,$tag) { //XML解析安全过滤 $attr = str_replace('&','___', $attr); $xml = '<tpl><tag '.$attr.' /></tpl>'; $xml = simplexml_load_string($xml); if(!$xml) { throw_exception(L('_XML_TAG_ERROR_').' : '.$attr); } $xml = (array)($xml->tag->attributes()); $array = array_change_key_case($xml['@attributes']); if($array) { $attrs = explode(',',$this->tags[strtolower($tag)]['attr']); if(isset($this->tags[strtolower($tag)]['must'])){ $must = explode(',',$this->tags[strtolower($tag)]['must']); }else{ $must = array(); } foreach($attrs as $name) { if( isset($array[$name])) { $array[$name] = str_replace('___','&',$array[$name]); }elseif(false !== array_search($name,$must)){ throw_exception(L('_PARAM_ERROR_').':'.$name); } } return $array; } }
怎么办啊,我写的都是最简单的几句代码,
结果在源码里测就是parseXmlAttr函数里面出的问题。可是会是源码的问题么
public function parseXmlAttr($attr,$tag) { //XML解析安全过滤 $attr = str_replace('&','___', $attr); $xml = '<tpl><tag '.$attr.' /></tpl>'; $xml = simplexml_load_string($xml); if(!$xml) { throw_exception(L('_XML_TAG_ERROR_').' : '.$attr); } $xml = (array)($xml->tag->attributes()); $array = array_change_key_case($xml['@attributes']); if($array) { $attrs = explode(',',$this->tags[strtolower($tag)]['attr']); if(isset($this->tags[strtolower($tag)]['must'])){ $must = explode(',',$this->tags[strtolower($tag)]['must']); }else{ $must = array(); } foreach($attrs as $name) { if( isset($array[$name])) { $array[$name] = str_replace('___','&',$array[$name]); }elseif(false !== array_search($name,$must)){ throw_exception(L('_PARAM_ERROR_').':'.$name); } } return $array; } }
public function _foreach($attr,$content) { static $_iterateParseCache = array(); //如果已经解析过,则直接返回变量值 $cacheIterateId = md5($attr.$content); if(isset($_iterateParseCache[$cacheIterateId])) return $_iterateParseCache[$cacheIterateId]; $tag = $this->parseXmlAttr($attr,'foreach'); $name = $tag['name']; $item = $tag['item']; $key = !empty($tag['key'])?$tag['key']:'key'; $name = $this->autoBuildVar($name); $parseStr = '<?php if(is_array('.$name.')): foreach('.$name.' as $'.$key.'=>$'.$item.'): ?>'; $parseStr .= $this->tpl->parse($content); $parseStr .= '<?php endforeach; endif; ?>'; $_iterateParseCache[$cacheIterateId] = $parseStr; if(!empty($parseStr)) { return $parseStr; } return ; }
上面说过了,list数组里的值并没有变化,只是在处理模版时没有正确的生成php代码罢了,我刚才下载了一个thinkphp,用楼主的代码试了下,结果是正常的,建议去thinkphp官网上重新下个最新版的看看
上面说过了,list数组里的值并没有变化,只是在处理模版时没有正确的生成php代码罢了,我刚才下载了一个thinkphp,用楼主的代码试了下,结果是正常的,建议去thinkphp官网上重新下个最新版的看看
运行环境出问题了,以前用的appserv换了个新的。问题解决了。不过以前那个用的没啥问题。
为啥就thinkphp的标签出问题呢???????
php环境最好在php3.0以上
运行环境出问题了,以前用的appserv换了个新的。问题解决了。不过以前那个用的没啥问题。
为啥就thinkphp的标签出问题呢???????
解决了,PHP6不行,我改成了PHP5,然后就可以了