ThinkPHP怎么样更好的使用Smarty第三方插件,thinkPHP判断是否修改成功

关于使用PHPEXCEL,首先需要把下载好的文件更名为Excel(PHPExcel.php 
PHPExcel文件)放入ThinkPHP包的Vendor文件夹中,算是导入了一个新类。

thinkPHP中使用save方法来更新数据的
save方法的正常执行时返回值是影响的记录数,出错时返回false,返回为0和返回false在很多业务场景下都是不同的。

如果你在使用ThinkPHP框架的时候不想采用TP自带的模版系统,而使用第三方的模版系统,你有很多其他的选择,在这里我仅介绍Smarty这种比较官方,而且比较强大的模版系统。

其次就是关于导出函数的使用,具体代码如下所示:

而当修改的内容和原有内容一致的时候返回的也就是0,通常在修改内容的表单中不进行任何修改点击修改按钮就是这种情况。
0和false是不同的,尽管作为布尔型时都代表假。0代表的是修改未修改而没有执行错误,false代表执行的时候发生了错误。
所以在判断是否修改成功时不能使用if(….->…->save())作为判断的条件,而应该使用if(….->…->save()!==false)作为判断更新执行与否的条件,同时判断值和类型是否和false匹配。

由于Smarty兼容PHP4,因此,它的效率会相对低一点点,这个低只是相对的,估计等Smarty啥时候正式放弃PHP4的时候,效率可能会上很大一个台阶。

 public function imorder()
      {     
        $list =
$_SESSION[‘depart’];  //通过SESSION传递过来的已经在数据库中查询出来的数据集。
       $num=count($list);  // 对查询出来的数据进行统计。
        error_reporting(E_ALL);
        ini_set(‘display_errors’, TRUE);
        ini_set(‘display_startup_errors’, TRUE);
  
 
   Vendor(‘Excel.PHPExcel’);
   Vendor(‘Excel.PHPExcel.IOFactory’);
   Vendor(‘Excel.PHPExcel.Reader.Excel5’);
        $objPHPExcel = new PHPExcel();
        $objPHPExcel->getProperties()->setCreator(“Maarten
Balliauw”)
                                     ->setLastModifiedBy(“Maarten
Balliauw”)
                                     ->setTitle(“Office 2007 XLSX
Test Document”)
                                     ->setSubject(“Office 2007 XLSX
Test Document”)
                                     ->setDescription(“Test document
for Office 2007 XLSX, generated using PHP classes.”)
                                     ->setKeywords(“office 2007
openxml php”)
                                     ->setCategory(“Test result
file”);  
        $objPHPExcel->setActiveSheetIndex(0)
                    ->setCellValue(‘A1’,
‘学工号’)   //确定导出的表中的每一列的名称。
                    ->setCellValue(‘B1’, ‘姓名’)
                    ->setCellValue(‘C1’, ‘班级名称’)
     ->setCellValue(‘D1’, ‘消费日期’)
     ->setCellValue(‘E1’, ‘消费时间’)
        ->setCellValue(‘F1’, ‘消费年度’)
     ->setCellValue(‘G1’, ‘消费金额’)
        ->setCellValue(‘H1’, ‘余额’)
     ->setCellValue(‘I1’, ‘操作员’);
  for ($i=0; $i < $num; $i++) {
   $n=$i+2;
        $objPHPExcel->setActiveSheetIndex(0)
                    ->setCellValue(‘A’.$n,
$list[$i][‘STUEMPNO’])   //每一列对应的数值。
                    ->setCellValue(‘B’.$n,
$list[$i][‘CUSTNAME’])
                    ->setCellValue(‘C’.$n,
$list[$i][‘CLASSNAME’])
     ->setCellValue(‘D’.$n, $list[$i][‘XFDATE’])
     ->setCellValue(‘E’.$n, $list[$i][‘XFTIME’])
     ->setCellValue(‘F’.$n, $list[$i][‘NDNAME’])
     ->setCellValue(‘G’.$n, $list[$i][‘JE’])
        ->setCellValue(‘H’.$n, $list[$i][‘YE’])
     ->setCellValue(‘I’.$n, $list[$i][‘FIRSTNAME’]);
                 }
        $objPHPExcel->getActiveSheet()->setTitle(‘title’);
        $objPHPExcel->setActiveSheetIndex(0);
        spl_autoload_register(array(‘Think’,’autoload’));
        header(‘Content-Type: application/vnd.ms-excel’);
        header(‘Content-Disposition:
attachment;filename=”文件名.xls”‘);  //导出excel文件的名字是已经定义过的。
        header(‘Cache-Control: max-age=0’);
        $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel,
‘Excel5’);
        $objWriter->save(‘php://output’);
        exit;
      }

下面在mysql命令行中举个例子:


 

新建个表:

 


mysql> create table t(id int);  Query OK, 0 rows affected (0.85 sec)

官方标准使用方法:

插入条数据:

在TP框架的PlugIns目录下面,有一个SmartTemplate目录,里面就是系统自带的Smarty插件。

mysql> insert into t(id)values(2);  Query OK, 1 row affected (0.24 sec)

使用方法如下:

进行一条不改变数据的更新语句:

1、在项目的Conf/Config.php文件里加上:

mysql> update t set id=2 where id=2;  Query OK, 0 rows affected (0.13 sec)  Rows matched: 1  Changed: 0  Warnings: 0

PHP代码

可以注意到Changed为0,说明并未修改内容。更新语句是正常执行的,这就对应着save()返回0的时候。

  1. return array(   
  2.     ‘THINK_PLUGIN_ON’ => true,   
  3.     ‘TMPL_ENGINE_TYPE’=>’smarty’,   
  4. );  

执行一条改变数据的更新语句:

2、下载好Smarty,并将smarty的libs目录整个拷至项目的PlugIns目录下(说明一下,PlugIns目录可能会不存在,需要自己建立),同时将libs目录改名为SmartTemplate(希望没有记错,其实也就是与THINKPHP的PlugIns目录里的SmartyTemplate目录同名即可),如果你不愿意把目录改成这个名字,那么,你必须到TP的插件目录里修改插件文件,使之包含路径正确。

mysql> update t set id=3 where id=2;  Query OK, 1 row affected (0.14 sec)  Rows matched: 1  Changed: 1  Warnings: 0

3、注意修改每次修改action或模板文件后删除Temp下的html文件

Changed为1,说明这条更新语句修改了内容。对应着save()>0的时候。

说明一下:上面的内容来自于官方,由lin_chaoqi朋友解答的,网址为:

再来执行一条错误的更新语句:

 

mysql> update t set id=2 where ida=3;  ERROR 1054 (42S22): Unknown column 'ida' in 'where clause'

发生错误,对应save()为false的时候。

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

标签:
网站地图xml地图