ag游戏客服|官方二次开发

?找回密码
?立即注册
搜索
热搜: 活动 交友 discuz
查看: 3180|回复: 3
打印 上一主题 下一主题

求助老大个后台文章导出的问题

? [复制链接]

1

主题

3

帖子

126

积分

vip用户

Rank: 5Rank: 5

金币
0
贡献
123
跳转到指定楼层
楼主
发表于 2017-3-17 20:20:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
想在后台 文档这里,添加导出搜索到的文章。
可以导出全部勾选的文章,没有勾选的不导出。
看了您那个贴子。有些参数不太明白。
如果按勾选的文档导出的话,有没有办法实现呢?
先谢谢啦~~
http://www.dedebase.com/forum.ph ... hlight=%B5%BC%B3%F6

另外文中提到的程序包貌似不能下载了。

1

主题

3

帖子

126

积分

vip用户

Rank: 5Rank: 5

金币
0
贡献
123
沙发
?楼主| 发表于 2017-3-17 20:22:47 | 只看该作者
如果按搜索关键词,搜索到的文章导出是怎么做呢?是不是跟上面的一样就行。只要导出勾选的就行吧。我感觉

1046

主题

1109

帖子

5334

积分

超级版主

Rank: 8Rank: 8

金币
256
贡献
3959
板凳
发表于 2017-3-17 22:54:49 | 只看该作者
本帖最后由 dedebase 于 2017-3-17 23:07 编辑

导出全部勾选的文章原理是:

? ?第一步:批量获取选中的id,这个是由ag游戏客服|官方的里面封装的js实现的。

? ???第二步:把获取到的文章id 进行处理转换成??字符串 ,例如??1,2,3,5,6

? ???实现代码是:

? ?? ???if( !empty($aid) && empty($qstr) ) $qstr = $aid;
? ?? ???
? ?? ???if($qstr=='')
? ?? ???{
? ?? ?? ?? ?ShowMsg('参数无效!',$ENV_GOBACK_URL);
? ?? ?? ?? ?exit();
? ?? ???}
? ?? ???$qstrs = explode('`',$qstr);
? ?? ???$idstrs = implode(',', $qstrs);

? ?第三步:查询要导出的数据:

? ?sql语句是:Select * From `#@__archives` where id in($idstrs)

? ? 也就是说这里使用了 sql语言里面 in 来查询表中的某些id。

? ?只要你把上面的三步弄明白了,那么,这个功能就实现了。

===============实现方法=======================

? ? 上面那三步只是分析如何实现的,那里面的代码不用管,下面是具体的实现代码,请跟着一步一步操作。

??下载phpexcel类库,官方已经搬到这里了:https://github.com/PHPOffice/PHPExcel

? ?1)下载后把Classes文件夹放到??/dede/目录里面。
? ?2)复制下面的代码保存到文件download_excel.php里面,也放到/dede/目录里面。

测试:

? ? 在浏览器里面输入:localhost/dedecms/dede/download_excel.php?action=allexport&aid=86`87

??注意:请把红色的路径换上你的域名,上面因为我在子目录dedecms装的程序,如果你装在根目录里面,则去掉这个dedecms。

? ? 86`87:表示把文章id为86和87的文章导出来。
? ???
导出功能代码:

  1. require_once(dirname(__FILE__)."/config.php");

  2. if ($action == 'allexport') {

  3. ? ?? ? //批量获取文章id
  4. ? ?? ?? ?? ?if( !empty($aid) && empty($qstr) ) $qstr = $aid;
  5. ? ?? ?? ?? ?
  6. ? ?? ?? ?? ?if($qstr=='')
  7. ? ?? ?? ?? ?{
  8. ? ?? ?? ?? ?? ? ShowMsg('参数无效!',$ENV_GOBACK_URL);
  9. ? ?? ?? ?? ?? ? exit();
  10. ? ?? ?? ?? ?}
  11. ? ?? ?? ?? ?$qstrs = explode('`',$qstr);
  12. ? ?? ?? ?? ?$idstrs = implode(',', $qstrs);

  13. ? ?? ???include_once (dirname(__FILE__).'/Classes/PHPExcel.php');

  14. ? ?? ???// Create new PHPExcel object
  15. ? ?? ???$objPHPExcel = new PHPExcel();

  16. ? ?? ???$objActSheet = $objPHPExcel->getActiveSheet();

  17. ? ?? ???// Set document properties
  18. ? ?? ???$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");

  19. ? ?? ???$objPHPExcel->setActiveSheetIndex(0)
  20. ? ?? ???->setCellValue('A1', 'id')
  21. ? ?? ???->setCellValue('B1', '标题')
  22. ? ?? ???->setCellValue('C1', '发布时间')
  23. ? ?? ???->setCellValue('D1', '会员id')
  24. ? ?? ???->setCellValue('E1', '栏目id');
  25. ? ?? ???$query = "Select * From `#@__archives` where id in($idstrs) ";
  26. ? ?? ???$dsql->SetQuery($query);
  27. ? ?? ???$dsql->Execute();

  28. ? ?? ???$index = 1;

  29. ? ?? ???while ($row = $dsql->GetArray()) {

  30. ? ?? ?? ?? ?? ? $index++;
  31. ? ?? ?? ?? ?? ? $objPHPExcel->setActiveSheetIndex(0)
  32. ? ?? ?? ?? ?? ? ->setCellValue('A' .$index, $row['id'])
  33. ? ?? ?? ?? ?? ? ->setCellValue('B' .$index, $row['title'])
  34. ? ?? ?? ?? ?? ? ->setCellValue('C' .$index, date("Y-m-d",$row['senddate']))
  35. ? ?? ?? ?? ?? ? ->setCellValue('D' .$index, $row['mid'])
  36. ? ?? ?? ?? ?? ? ->setCellValue('E' .$index, $row['typeid']);
  37. ? ?? ???}

  38. ? ?? ???// Rename worksheet
  39. ? ?? ???$objPHPExcel->getActiveSheet()->setTitle('Simple');

  40. ? ?? ???// Set active sheet index to the first sheet, so Excel opens this as the first sheet
  41. ? ?? ???$objPHPExcel->setActiveSheetIndex(0);

  42. ? ?? ???// Redirect output to a client’s web browser (Excel5)
  43. ? ?? ???header('Content-Type: application/vnd.ms-excel');

  44. ? ?? ???header('Content-Disposition: attachment;filename="list.xls"');
  45. ? ?? ???header('Cache-Control: max-age=0');

  46. ? ?? ???$objWriter = PHPExcel_IOFactory :: createWriter($objPHPExcel, 'Excel5');
  47. ? ?? ???$objWriter->save('php://output');
  48. ? ?? ???exit;

  49. }

  50. ?>
复制代码
结果:



在后台中对应的文章:



==============完整版====================

上面只是让你测试,不用写做太多事,建议先把上面的测试成功了,再看下面的,??下面才是真正应用到网站里面的。

? ???上面已经实现导出功能,但是,总不能在浏览器里面输入文章id吧。

??最终还是通过后台选择文章,然后,导出。

? ? 这个功能也已经实现了。

如下图所示:


? ?在后台添加一个导出文章按扭“导出文档”。

? ?在content_list.htm里面添加按扭代码:
复制代码

批量获取id方法:
? ?
? ? 1.??实现代码是通过在/dede/js/list.js添加一个批量获取id函数。

? ?代码如下所示:

? ?function eportArc(aid){
? ? var qstr=getCheckboxItem();
? ? if(aid==0) aid = getOneItem();
? ?? ???if(qstr=='')
? ? {
? ?? ???alert('必须选择一个或多个文档!');
? ?? ???return;
? ? }
? ? location="download_excel.php?aid="+aid+"&action=allexport&qstr="+qstr;
? ?
}

??2. 注册这个函数到上下文菜单
即在 函数??function ShowMenu(evt,obj,aid,atitle)里面注册,代码是:

new ContextItem("导出的文档",function(){ eportArc(aid); }),
??
测试:

? ? 我要导出选中的这几个id,如下图所示:


? ?查看结果:



??搞定!

======================

? ???你第二楼的问题根这个类似,会这个你那个就会了,第二楼的问题也要开发一下,这里不给你做了,你自己研究一下第二楼的吧。

? ?其实,只要你把这个理解了,第二楼的问题也就会了。

======================================

? ?? ?如果还不懂,请qq远程解决,一般晚上有时间。

广告一下:
? ? 欢迎大家来加入vip吧,享受致尊服务,有问必答,在ag游戏客服|官方官方论坛,不可能有人这样给回答问题吧。











1

主题

3

帖子

126

积分

vip用户

Rank: 5Rank: 5

金币
0
贡献
123
地板
?楼主| 发表于 2017-3-18 08:07:01 | 只看该作者
感谢老大的回复。一大早就来看了。哈哈。
这个VIP服务确实很值得的哦。再次感谢。
自己学习下。有不懂的再请教您。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|ag游戏客服|官方二次开发

GMT+8, 2019-11-13 19:56 , Processed in 0.474520 second(s), 25 queries .

Powered by Discuz! X3.2

? 2001-2013 Comsenz Inc.

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