织梦二次开发

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2352|回复: 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,这个是由织梦的里面封装的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. <?php
  2. require_once(dirname(__FILE__)."/config.php");

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

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

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

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

  17.         $objActSheet = $objPHPExcel->getActiveSheet();

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

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

  29.         $index = 1;

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

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

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

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

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

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

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

  50. }

  51. ?>
复制代码
结果:

导出86,87

导出86,87


在后台中对应的文章:

文章

文章


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

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

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

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

    这个功能也已经实现了。

如下图所示:
QQ截图20170317225516.png

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

   在content_list.htm里面添加按扭代码:
  1. <a href="javascript:eportArc(0)" class="coolbg"> 导出文档 </a>
复制代码

批量获取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,如下图所示:

选中的id

选中的id


   查看结果:

5.png

  搞定!

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

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

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

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

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

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











回复 支持 反对

使用道具 举报

1

主题

3

帖子

126

积分

vip用户

Rank: 5Rank: 5

金币
0
贡献
123
 楼主| 发表于 2017-3-18 08:07:01 | 显示全部楼层
感谢老大的回复。一大早就来看了。哈哈。
这个VIP服务确实很值得的哦。再次感谢。
自己学习下。有不懂的再请教您。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|织梦二次开发

GMT+8, 2019-6-17 23:21 , Processed in 0.214389 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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