1. 论坛系统升级为Xenforo,欢迎大家测试!
    排除公告

NEATTeamplate一些foreach的bugs

本帖由 peterdocter2006-03-05 发布。版面名称:后端开发

  1. peterdocter

    peterdocter New Member

    注册:
    2006-03-05
    帖子:
    1
    赞:
    0
    如果有样一个数组
    $test=array(1=>'a',2=>'b');
    <!-- BEGINB test -->
    {test}
    <!-- ENDB test -->
    <!-- BEGIN test -->
    {test}
    <!-- END test -->
    这样就不起作用了!我已经也试过在
    NEATTemplateCompiler.php
    加上
    /**
    * foreach 处理
    * @access private
    * @return void
    */

    function _ParseFOREACH(){
    if(preg_match_all('/\[(?:\s*)foreach:(?:\s*)([a-zA-Z0-9_.]+)(?:\s*)\]/', $this->contents,$reg) )
    {
    $value[$reg[1][0]]='$'.$reg[1][0];
    $v[v]='$v';
    $phpCode = '<?php' . "\r\n"
    . 'is_array( ' . $value[$reg[1][0]] . ' ) ? ' . $value[$reg[1][0]]. ': '.$value[$reg[1][0]].'= array();' . "\r\n"
    . 'foreach( ' . $value[$reg[1][0]] . ' as ' .$v[v]. ')' . "\r\n"
    . '{' . "\r\n"
    . '?>';
    // 把原始内容替换成对应的PHP代码
    /*
    [foreach:name] 变成
    is_array($name)?$name:$name=array();
    foreach($name as $value ){
    */
    $this->contents = str_replace( $reg[0], $phpCode, $this->contents );
    // 把原始内容替换成对应的PHP代码
    /*
    [name]变成
    echo $value
    */
    $seach='['.$reg[1][0].']';
    $phpCode='<?php echo '.$v[v].';?>';
    $this->contents = str_replace( $seach, $phpCode, $this->contents);
    // 把原始内容替换成对应的PHP代码
    /*
    [/foreach]变成
    }
    */
    $seach='[/foreach]';
    $phpCode='<?php }?>';
    $this->contents = str_replace( $seach, $phpCode, $this->contents );
    }
    }
    就是模板直接这个用到就可以不设置模板变量
    [foreach:test]
    [test]
    [/foreach]
    生成代码也正常,就是不知道为什么不显示出来?
    <?php
    is_array( $test ) ? $test: $test= array();
    foreach( $test as $v)
    {
    ?>
    <?php echo $v;?>
    <?php }?>
    最好你们可以马上修改一下这个bugs吧!模板中要到循环本身的数组很多地方都用到的!有这个功能,可以遍历数组的形式就支持得更多!
     
    #1 peterdocter, 2006-03-05
    由版主最后编辑: 2006-03-05
  2. 西集

    西集 New Member

    注册:
    2006-03-07
    帖子:
    5
    赞:
    0
    楼住弄个FIX版好了!
     
  3. walker

    walker New Member

    注册:
    2005-09-04
    帖子:
    40
    赞:
    2
    汗,我看看
     
  4. walker

    walker New Member

    注册:
    2005-09-04
    帖子:
    40
    赞:
    2
    Code:

    $tpl['list'][0]['name'] = 'a';
    $tpl['list'][1]['name'] = 'b';

    $objTP->SV( $tpl );

    Template :

    <!-- BEGIN test -->
    {test.name}
    <!-- END test -->
     
  5. walker

    walker New Member

    注册:
    2005-09-04
    帖子:
    40
    赞:
    2
    这个不算bug的,但是可以改进一下.改进成数组可以直接使用,而不是重构.