2014年,新的一年新的开始
在2013年底,我们发布了DBShop电子商务网店系统 Beta版本,没过几天,2014年来到了。希望在新的一年,DBShop系统可以更加完善,更加人性化,也更加的受人欢迎。
在2013年底,我们发布了DBShop电子商务网店系统 Beta版本,没过几天,2014年来到了。希望在新的一年,DBShop系统可以更加完善,更加人性化,也更加的受人欢迎。
RC版本相对于Beta版本,将是最接近于正式版的版本,不会再有大的功能改动,只是除错,然后进行正式版的发布。所以说程序到了RC版本了,离正式版发布很近了。
DBShop V0.9 Beta版本到V0.9 RC版本会有什么改动,我们在这里一一说明下:
1、广告对应前台默认显示,在后台显示不同的广告信息。
2、商品特殊标签对应模板进行调整。
3、后台加入模板管理功能,目前只有一套前台模板,不过还是加入这个功能吧。
4、已知bug修正及部分功能优化。
对于已经使用Beta版本的用户无需担心,这些改动都将会可以平滑的在Beta版本上升级更新。
互联网世界中,对于闭源与开源的争论一直没有停止过,所以我不想在这上面争论,存在就是有道理的,不用非要争个对错。
我生在中国,长在中国,所以更加了解开源在中国的意思,就是免费、拿来主义、不花钱、随便改、随便卖……。但在使用的过程中,是否有人注意到版权莫,开源也是有版权,也有要求,在中国这些基本被无视,看看有多少人靠着Ecshop二次开发销售赚钱活着,而跟商派一毛钱关系都没有,尽管里面也有版权说明,毛用都没有。知识产权在最近几年被关注的更多了,人们对版权信息的认知也有了提高,只是认知提高而已。
在保证自己可以活很好的情况下,开源是为了分享;在自己都活不好的情况下,开源就是一种装逼,玩票[……]
DBShop系统的Beta版本已经发布了,因为是闭源的关系(环境不匹配安装不上),到目前为止没有得到太多的反馈。在测试使用的过程中,对于广告功能和特殊标签(如果首页热门商品、特价商品……)有了一些新的想法。
DBShop的广告功能属于半依赖数据库,而另一大半依赖于模板当中的配置文件信息。哪个页面有广告,广告的位置是哪里,广告的宽高是多少,及广告的展示外围html是什么样子的。这些都对应于当前前台使用的模板,模板中调用配置文件中设置的广告标记。后台添加广告时,广告的位置、类型、大小,这些都是读取的配置文件,数据库只是作为记录广告内容的载体,而前台显示也不会调用数据库信息,添加的广告会生成一[……]
DBShop电子商务网店系统正式发布,提供下载使用。本次发布的是 V0.9 Beta 版本。一个多月以后,发布 V0.9 正式版,到时也会提供Beta版本的更新包。
之所以从 0.9版本开始,因为系统本身的功能,还是觉得有较多需要改进和完善的地方(目前的功能也不差,用用就知道^-^)。一个程序一个系统,永远都没有优化完和开发完的一天。我们也不想闭门造车,造的再好,没上过路,也白搭。DBShop系统是一个新系统,基于最新的 ZendFramework 2 框架开发完成,继承了ZF2框架的先进编程理念,我们不能自夸有多好,但能保证程序从功能到代码绝对不差。
还是前面的一句话,DBSho[……]
1. 隐藏“阅读”、“查看源代码”、“历史”,修改vector.php的:
<div id=”p-views” class=”vectorTabs<?php if count( $this->data[’view_urls’] ) == 0 ) echo ‘ emptyPortlet’; ?>”>
改为:
<div id=”p-views” class=”vectorTabs<?php if ( !($this->data[’loggedin’]) || count( $this->data[’view_urls’] )[……]
断断续续忙活了10多天,今天终于把DBShop系统的帮助教程写完了。虽然还有不少需要详细写明的地方,起码是教程的第一阶段完成了。任何系统和程序,都是教程先行,否则你程序写的再厉害,别人都不知道怎么用,那不是白搭嘛。虽然DBShop系统还没有提供下载,但是在提供下载的时候,教程和帮助说明文档是一定要有的。
在写教程的过程中,也修改了几个程序的bug,接下来可能会看看教程那些地方调整调整,然后重点转入官网建设及程序发布前的调试和bug处理。这次发布的应该是beta版本,版本号想定为 0.9。为什么不是 1.0呢,因为觉得系统的功能还有需要完善和添加的地方,等将一些想添加没来得及添加的功能添加[……]
操作excel
1.header
1 2 3 4 |
header("Content-Type:application/vnd.ms-excel"); header("Content-Disposition:attachment;filename=product.xls"); header("Pragma:no-cache"); header("Expires:0"); |
2.PHPExcel
http://www.codeplex.com/PHPExcel
http://www.phpexcel.net
开发包Tests目录有详细使用实例
支持中文,注意文件编码,文件保存为utf-8
写excel
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 |
//Include class require_once('Classes/PHPExcel.php'); require_once('Classes/PHPExcel/Writer/Excel2007.php'); $objPHPExcel = new PHPExcel(); //Set properties 设置文件属性 $objPHPExcel->getProperties()->setCreator("Maarten Balliauw"); $objPHPExcel->getProperties()->setLastModifiedBy("Maarten Balliauw"); $objPHPExcel->getProperties()->setTitle("Office 2007 XLSX Test Document"); $objPHPExcel->getProperties()->setSubject("Office 2007 XLSX Test Document"); $objPHPExcel->getProperties()->setDescription("Test document for Office 2007 XLSX, generated using PHP classes."); $objPHPExcel->getProperties()->setKeywords("office 2007 openxml php"); $objPHPExcel->getProperties()->setCategory("Test result file"); //Add some data 添加数据 $objPHPExcel->setActiveSheetIndex(0); $objPHPExcel->getActiveSheet()->setCellValue('A1', 'Hello');//可以指定位置 $objPHPExcel->getActiveSheet()->setCellValue('A2', true); $objPHPExcel->getActiveSheet()->setCellValue('A3', false); $objPHPExcel->getActiveSheet()->setCellValue('B2', 'world!'); $objPHPExcel->getActiveSheet()->setCellValue('B3', 2); $objPHPExcel->getActiveSheet()->setCellValue('C1', 'Hello'); $objPHPExcel->getActiveSheet()->setCellValue('D2', 'world!'); //循环 for($i = 1;$i<200;$i++) { $objPHPExcel->getActiveSheet()->setCellValue('A' . $i, $i); $objPHPExcel->getActiveSheet()->setCellValue('B' . $i, 'Test value'); } //日期格式化 $objPHPExcel->getActiveSheet()->setCellValue('D1', time()); $objPHPExcel->getActiveSheet()->getStyle('D1')->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_YYYYMMDDSLASH); //Add comment 添加注释 $objPHPExcel->getActiveSheet()->getComment('E11')->setAuthor('PHPExcel'); $objCommentRichText = $objPHPExcel->getActiveSheet()->getComment('E11')->getText()->createTextRun('PHPExcel:'); $objCommentRichText->getFont()->setBold(true); $objPHPExcel->getActiveSheet()->getComment('E11')->getText()->createTextRun("\r\n"); $objPHPExcel->getActiveSheet()->getComment('E11')->getText()->createTextRun('Total amount on the current invoice, excluding VAT.'); //Add rich-text string 添加文字 可设置样式 $objRichText = new PHPExcel_RichText( $objPHPExcel->getActiveSheet()->getCell('A18') ); $objRichText->createText('This invoice is '); $objPayable = $objRichText->createTextRun('payable within thirty days after the end of the month'); $objPayable->getFont()->setBold(true); $objPayable->getFont()->setItalic(true); $objPayable->getFont()->setColor( new PHPExcel_Style_Color( PHPExcel_Style_Color::COLOR_DARKGREEN ) ); $objRichText->createText(', unless specified otherwise on the invoice.'); //Merge cells 合并分离单元格 $objPHPExcel->getActiveSheet()->mergeCells('A18:E22'); $objPHPExcel->getActiveSheet()->unmergeCells('A18:E22'); //Protect cells 保护单元格 $objPHPExcel->getActiveSheet()->getProtection()->setSheet(true);//Needs to be set to true in order to enable any worksheet protection! $objPHPExcel->getActiveSheet()->protectCells('A3:E13', 'PHPExcel'); //Set cell number formats 数字格式化 $objPHPExcel->getActiveSheet()->getStyle('E4')->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_CURRENCY_EUR_SIMPLE); $objPHPExcel->getActiveSheet()->duplicateStyle( $objPHPExcel->getActiveSheet()->getStyle('E4'), 'E5:E13' ); //Set column widths 设置列宽度 $objPHPExcel->getActiveSheet()->getColumnDimension('B')->setAutoSize(true); $objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(12); //Set fonts 设置字体 $objPHPExcel->getActiveSheet()->getStyle('B1')->getFont()->setName('Candara'); $objPHPExcel->getActiveSheet()->getStyle('B1')->getFont()->setSize(20); $objPHPExcel->getActiveSheet()->getStyle('B1')->getFont()->setBold(true); $objPHPExcel->getActiveSheet()->getStyle('B1')->getFont()->setUnderline(PHPExcel_Style_Font::UNDERLINE_SINGLE); $objPHPExcel->getActiveSheet()->getStyle('B1')->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_WHITE); //Set alignments 设置对齐 $objPHPExcel->getActiveSheet()->getStyle('D11')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT); $objPHPExcel->getActiveSheet()->getStyle('A18')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_JUSTIFY); $objPHPExcel->getActiveSheet()->getStyle('A18')->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER); $objPHPExcel->getActiveSheet()->getStyle('A3')->getAlignment()->setWrapText(true); //Set column borders 设置列边框 $objPHPExcel->getActiveSheet()->getStyle('A4')->getBorders()->getTop()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN); $objPHPExcel->getActiveSheet()->getStyle('A10')->getBorders()->getLeft()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN); $objPHPExcel->getActiveSheet()->getStyle('E10')->getBorders()->getRight()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN); $objPHPExcel->getActiveSheet()->getStyle('D13')->getBorders()->getLeft()->setBorderStyle(PHPExcel_Style_Border::BORDER_THICK); $objPHPExcel->getActiveSheet()->getStyle('E13')->getBorders()->getBottom()->setBorderStyle(PHPExcel_Style_Border::BORDER_THICK); //Set border colors 设置边框颜色 $objPHPExcel->getActiveSheet()->getStyle('D13')->getBorders()->getLeft()->getColor()->setARGB('FF993300'); $objPHPExcel->getActiveSheet()->getStyle('D13')->getBorders()->getTop()->getColor()->setARGB('FF993300'); $objPHPExcel->getActiveSheet()->getStyle('D13')->getBorders()->getBottom()->getColor()->setARGB('FF993300'); $objPHPExcel->getActiveSheet()->getStyle('E13')->getBorders()->getRight()->getColor()->setARGB('FF993300'); //Set fills 设置填充 $objPHPExcel->getActiveSheet()->getStyle('A1')->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID); $objPHPExcel->getActiveSheet()->getStyle('A1')->getFill()->getStartColor()->setARGB('FF808080'); //Add a hyperlink to the sheet 添加链接 $objPHPExcel->getActiveSheet()->setCellValue('E26', 'www.phpexcel.net'); $objPHPExcel->getActiveSheet()->getCell('E26')->getHyperlink()->setUrl('http://www.phpexcel.net'); $objPHPExcel->getActiveSheet()->getCell('E26')->getHyperlink()->setTooltip('Navigate to website'); $objPHPExcel->getActiveSheet()->getStyle('E26')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT); //Add a drawing to the worksheet 添加图片 $objDrawing = new PHPExcel_Worksheet_Drawing(); $objDrawing->setName('Logo'); $objDrawing->setDescription('Logo'); $objDrawing->setPath('./images/officelogo.jpg'); $objDrawing->setHeight(36); $objDrawing->setCoordinates('B15'); $objDrawing->setOffsetX(110); $objDrawing->setRotation(25); $objDrawing->getShadow()->setVisible(true); $objDrawing->getShadow()->setDirection(45); $objDrawing->setWorksheet($objPHPExcel->getActiveSheet()); //Play around with inserting and removing rows and columns $objPHPExcel->getActiveSheet()->insertNewRowBefore(6, 10); $objPHPExcel->getActiveSheet()->removeRow(6, 10); $objPHPExcel->getActiveSheet()->insertNewColumnBefore('E', 5); $objPHPExcel->getActiveSheet()->removeColumn('E', 5); //Add conditional formatting $objConditional1 = new PHPExcel_Style_Conditional(); $objConditional1->setConditionType(PHPExcel_Style_Conditional::CONDITION_CELLIS); $objConditional1->setOperatorType(PHPExcel_Style_Conditional::OPERATOR_LESSTHAN); $objConditional1->setCondition('0'); $objConditional1->getStyle()->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_RED); $objConditional1->getStyle()->getFont()->setBold(true); //Set autofilter 自动过滤 $objPHPExcel->getActiveSheet()->setAutoFilter('A1:C9'); //Hide "Phone" and "fax" column 隐藏列 $objPHPExcel->getActiveSheet()->getColumnDimension('C')->setVisible(false); $objPHPExcel->getActiveSheet()->getColumnDimension('D')->setVisible(false); //Set document security 设置文档安全 $objPHPExcel->getSecurity()->setLockWindows(true); $objPHPExcel->getSecurity()->setLockStructure(true); $objPHPExcel->getSecurity()->setWorkbookPassword("PHPExcel"); //Set sheet security 设置工作表安全 $objPHPExcel->getActiveSheet()->getProtection()->setPassword('PHPExcel'); $objPHPExcel->getActiveSheet()->getProtection()->setSheet(true);// This should be enabled in order to enable any of the following! $objPHPExcel->getActiveSheet()->getProtection()->setSort(true); $objPHPExcel->getActiveSheet()->getProtection()->setInsertRows(true); $objPHPExcel->getActiveSheet()->getProtection()->setFormatCells(true); //Calculated data 计算 echo 'Value of B14 [=COUNT(B2:B12)]: ' . $objPHPExcel->getActiveSheet()->getCell('B14')->getCalculatedValue() . "\r\n"; //Set outline levels $objPHPExcel->getActiveSheet()->getColumnDimension('E')->setOutlineLevel(1); $objPHPExcel->getActiveSheet()->getColumnDimension('E')->setVisible(false); $objPHPExcel->getActiveSheet()->getColumnDimension('E')->setCollapsed(true); //Freeze panes $objPHPExcel->getActiveSheet()->freezePane('A2'); //Rows to repeat at top $objPHPExcel->getActiveSheet()->getPageSetup()->setRowsToRepeatAtTopByStartAndEnd(1, 1); //Set data validation 验证输入值 $objValidation = $objPHPExcel->getActiveSheet()->getCell('B3')->getDataValidation(); $objValidation->setType( PHPExcel_Cell_DataValidation::TYPE_WHOLE ); $objValidation->setErrorStyle( PHPExcel_Cell_DataValidation::STYLE_STOP ); $objValidation->setAllowBlank(true); $objValidation->setShowInputMessage(true); $objValidation->setShowErrorMessage(true); $objValidation->setErrorTitle('Input error'); $objValidation->setError('Number is not allowed!'); $objValidation->setPromptTitle('Allowed input'); $objValidation->setPrompt('Only numbers between 10 and 20 are allowed.'); $objValidation->setFormula1(10); $objValidation->setFormula2(20); $objPHPExcel->getActiveSheet()->getCell('B3')->setDataValidation($objValidation); //Create a new worksheet, after the default sheet 创建新的工作标签 $objPHPExcel->createSheet(); $objPHPExcel->setActiveSheetIndex(1); //Set header and footer. When no different headers for odd/even are used, odd header is assumed. 页眉页脚 $objPHPExcel->getActiveSheet()->getHeaderFooter()->setOddHeader('&C&HPlease treat this document as confidential!'); $objPHPExcel->getActiveSheet()->getHeaderFooter()->setOddFooter('&L&B' . $objPHPExcel->getProperties()->getTitle() . '&RPage &P of &N'); //Set page orientation and size 方向大小 $objPHPExcel->getActiveSheet()->getPageSetup()->setOrientation(PHPExcel_Worksheet_PageSetup::ORIENTATION_LANDSCAPE); $objPHPExcel->getActiveSheet()->getPageSetup()->setPaperSize(PHPExcel_Worksheet_PageSetup::PAPERSIZE_A4); //Rename sheet 重命名工作表标签 $objPHPExcel->getActiveSheet()->setTitle('Simple'); //Set active sheet index to the first sheet, so Excel opens this as the first sheet $objPHPExcel->setActiveSheetIndex(0); //Save Excel 2007 file 保存 $objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel); $objWriter->save(str_replace('.php', '.xlsx', __FILE__)); //Save Excel 5 file 保存 require_once('Classes/PHPExcel/Writer/Excel5.php'); $objWriter = new PHPExcel_Writer_Excel5($objPHPExcel); $objWriter->save(str_replace('.php', '.xls', __FILE__)); //1.6.2新版保存 require_once('Classes/PHPExcel/IOFactory.php'); $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); $objWriter->save(str_replace('.php', '.xls', __FILE__)); |
读excel
1 2 3 4 5 |
//Include class require_once('Classes/PHPExcel/Reader/Excel2007.php'); $objReader = new PHPExcel_Reader_Excel2007; $objPHPExcel = $objReader->load("05featuredemo.xlsx"); |
读写csv
[crayon-675ac6d26a4d6938[……]
程序员是一种技术工作,在IT的发展中有相当重要的地位,从底层硬件通讯协议的建立,到数据传输层的处理,到操作系统的建设,到数据库平台的建设,一直到应用层上各种数据营销平台的搭建,程序员在里面都扮演着举足轻重的角色并为IT事业的发展做出了巨大的贡献。
中国有很多精于编码的人,但是中国软件行业,尤其是网络应用开发方面误区很大,很难形成有规模的软件开发力量和产品能力,不但比美国差距甚远,和印度相比也是颇有不如。这些问题不是在于中国程序员的智商和工作努力状况,也不是在于国家和民间对开发的投入程度,而是很大程度上,有一些对技术,对程序开发,对项目设计方面的思想误区,这些误区,导致了软件行业的产品化能[……]
关于memcache扩展
不管是在windows下还是linux下,安装完后都需要php调用一下,有时可能会出现 没有找到 memcached 扩展的提示(本人就遇到了,在ZF2下),这个确实是没有扩展导致的,原因是老的memcache的php扩展是memcache.dll(windows下),新memcache的php扩展是memcached.dll(windows下),所以才会有提示没有找到扩展。一般这样的情况会在使用某个框架时出现,框架使用的是新扩展,就出这问题了。自己编写代码出错的可能性不大。我在网上找了半天memcached.dll也没找到,需要下载源码编译,算了不编译了,就用[……]
1、下载Zend Guard
32位 http://downloads.zend.com/guard/5.5.0/ZendGuardLoader-php-5.3-linux-glibc23-i386.tar.gz
64位 http://downloads.zend.com/guard/5.5.0/ZendGuardLoader-php-5.3-linux-glibc23-x86_64.tar.gz
1 2 3 |
sudo mkdir /usr/zend tar -zxvf ZendGuardLoader-php-5.3-linux-glibc23-i386.tar.gz sudo cp ZendGuardLoader-php-5.3-linux-glibc23-i386/php5.3.x/ZendGuardLoader.so /usr/zend/ |
2、配置
1 |
sudo vi /etc/php5/cgi/php.ini |
最后加上:
请参考下面链接内容里的设置方式进行设置,不用设置MS SQL ,看设置 URL Rewrite 即可
http://akrabat.com/winphp-challenge/zend-framework-url-rewriting-in-iis7/
DBShop 系统是基于ZF2写的,所以上面的也适用于DBShop在IIS下的重写。
之前购买的空间,莫名其妙的提前4个月到期,问代理商也没有一个特别明确的答复,考虑到系统就快发布了,不能出问题,然后寻找其他空间,想把原来空间转到其他代理商下。找代理,好家伙,N天找不到,旺旺在线也不回复,我想应该不至于为了赔偿问题躲我吧?可能有其他事情,我也只能这样善良的想了。
也不是什么太大的事情,我也没有说一定要赔偿,如果问题不是出在你那里,我去找你所代理的空间商沟通。音讯全无,手机不接,电话占线(拨打后响几声后才提示忙,这好像也是明显不接),为了不影响DBShop程序的发布出现网站访问中断,同时别到最后关头出问题。本人毅然决然的选择换空间,尽管之前空间要到2014年2月9日才到期。[……]
DBShop的开发已经接近尾声,开始准备后续工作。
1、DBShop讨论论坛,DBShop系统不打算建立官方的QQ讨论群,论坛开始时都不打算建立,总要有一个可以让使用者交流的地方,所以还是建立了论坛。
DBShop讨论论坛地址:bbs.dbshop.net
2、DBShop帮助中心,和讨论论坛相比,这里并不提供讨论功能,是对于DBShop使用教程、问题解决方案、及其它有帮助性的展现位置。
DBShop帮助中心地址:help.dbshop.net
3、DBShop官方网站,总要有个官方网站吧,不然显得太寒酸了,漂亮不漂亮放一边[……]