Toggle main menu visibility
新聞
下載
教材
影音
討論
其他選單
好站連結
行事曆
電子相簿
常見問題
萬用表單
即時留言簿
友站消息
社大學員
:::
登入
登入
帳號
密碼
登入
重整畫面
:::
所有書籍
「[1071]XOOPS模組開發」目錄
MarkDown
7-8 pdf_all.php
1. XOOPS模組基礎架構
1-1 xoops_version.php
1-2 sql/mysql.sql
1-3 admin/menu.php
1-4 language/tchinese_utf8
1-5 admin/main.php
1-6 templates/snews_adm_main.tpl
1-7 admin/topic.php
1-8 templates/snews_adm_topic.tpl
2. 表單、資料庫、使用者物件
2-1 admin/main.php
2-2 templates/snews_adm_main.tpl
2-3 templates/op_snews_list.tpl
2-4 templates/op_snews_form.tpl
2-5 sql/mysql.php
2-6 xoops_version.php
2-7 function.php
3. 前台顯示、編輯、刪除
3-1 index.php
3-2 xoops_version.php
3-3 menu.php
3-4 header.php
3-5 templates/snews_index.tpl
3-6 templates/op_snews_show.tpl
3-7 templates/op_snews_list.tpl
3-8 admin/main.php
4. 首頁精選文章輪播
4-1 admin/main.php
4-2 index.php
4-3 templates/op_snews_show.tpl
4-4 templates/op_snews_list.tpl
5. 自動生成群組並做權限判斷
5-1 xoops_version.php
5-2 interface_menu.php
5-3 header.php
5-4 index.php
5-5 admin/main.php
5-6 include/onUpdate.php
5-7 include/onInstall.php
5-8 include/onUninstall.php
5-9 templates/op_snews_list.tpl
5-10 templates/op_snews_show.tpl
5-11 include/search.php
6. json應用與XOOPS區塊
6-1 xoops_version.php
6-2 language/tchinese_utf8/modinfo.php
6-3 index.php
6-4 html.php
6-5 templates/op_snews_show.tpl
6-6 function.php
6-7 blocks/snews_block_focus.php
6-8 blocks/snews_block_focus.tpl
6-9 css/module.css
6-10 interface_menu.php
6-11 language/tchinese_utf8/blocks.php
6-12 templates/op_snews_list.tpl
6-13 function_block.php
7. 產生PDF及拉動排序
7-1 templates/snews_index.tpl
7-2 templates/op_snews_list.tpl
7-3 index.php
7-4 css/module.css
7-5 templates/op_snews_show.tpl
7-6 pdf.php
7-7 interface_menu.php
7-8 pdf_all.php
8. Excel匯出匯入及點擊編輯
8-1 interface_menu.php
8-2 focus.php
8-3 function.php
8-4 templates/op_snews_focus.tpl
8-5 save_sort.php
8-6 excel.php
8-7 excel2.php
8-8 import.php
8-9 templates/op_import_form.tpl
9. 產生word檔、壓縮及解壓
9-1 index.php
9-2 templates/op_snews_show.tpl
9-3 save.php
9-4 interface_menu.php
9-5 word.php
9-6 zip.php
9-7 templates/op_zip_import.tpl
8-1 interface_menu.php
\[1071\]XOOPS模組開發 ================= ### 一、 匯出Excel 1. PHPExcel官網(舊):
2. PHPExcel API手冊:
3. PhpSpreadsheet官網(新):
4. 舊專案將停止維護,但新專案PHP需5.6以上,為取得較好相容性,目前仍以舊專案為主 5. 可讀取、產生Excel 97~2007的檔案,甚至可輸出PDF、CSV、HTML檔。 6. 安裝需求:PHP 5.2.0 以上、需開啟`php_zip`、`php_xml`、`php_gd2`函式庫。 ``` setPreCalculateFormulas(false); $objWriter->save('php://output'); exit; ``` ### 二、 常用方法: 1. 建立工作表並指定名稱 ``` $objPHPExcel->setActiveSheetIndex(0); //設定預設顯示的工作表 $objActSheet = $objPHPExcel->getActiveSheet(); //指定預設工作表為 $objActSheet $objActSheet->setTitle("文章列表"); //設定標題 $objPHPExcel->createSheet(); //建立新的工作表,上面那三行再來一次,編號要改 ``` 2. 指定儲存格內容,有以下類型可設定:`TYPE_BOOL`、`TYPE_ERROR`、`TYPE_FORMULA`、`TYPE_INLINE`、`TYPE_NULL`、`TYPE_NUMERIC`、`TYPE_STRING` ``` $objActSheet ->setCellValue("A1", '編號') ->setCellValue("B1", '精選'); $objActSheet->setCellValueExplicit("C2", '0987654321',PHPExcel_Cell_DataType:: TYPE_STRING); $objActSheet->setCellValueByColumnAndRow(3, 1, '測試'); //直欄從0開始,橫列從1開始 ``` 3. 調整儲存格欄寬 ``` $objActSheet->getColumnDimension('A')->setWidth(8); //固定寬度8 $objActSheet->getColumnDimension('B')->setAutoSize(true); //自動寬度 $objActSheet->getColumnDimensionByColumn(2)->setWidth(8); ``` 4. 設定橫列高度 ``` $objActSheet->getRowDimension($i)->setRowHeight(60); ``` 5. 設定文字字型、粗細、顏色、儲存格背景顏色 ``` $objPHPExcel->getDefaultStyle()->getFont()->setName('微軟正黑體')->setSize(14); $objActSheet->getStyle('A1:J1')->getFont()->setBold(true)->getColor()->setARGB('00FFFFFF'); $objActSheet->getStyle('A1:J1')->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID)->getStartColor()->setARGB('00474747'); ``` 6. 合併儲存格 ``` $objActSheet->mergeCells("A1:J1")->setCellValue("A1", '巷談集所有文章備份'); ``` 7. 插入公式 ``` $objActSheet->setCellValue("A{$i}", '文章數'); $n = $i - 1; $objActSheet->setCellValue("B{$i}", "=COUNT(A3:A{$n})"); ``` 8. 保護儲存格 ``` $objActSheet->getProtection()->setSheet(true); $objActSheet->getProtection()->setSort(true); $objActSheet->getProtection()->setInsertRows(true); $objActSheet->getProtection()->setFormatCells(true); $objActSheet->getProtection()->setPassword('1234'); ``` 9. 對齊方向及自動換行,對齊的值有以下這些: `HORIZONTAL_CENTER`、 `HORIZONTAL_CENTER_CONTINUOUS`、 `HORIZONTAL_GENERAL`、 `HORIZONTAL_JUSTIFY`、 `HORIZONTAL_LEFT`、 `HORIZONTAL_RIGHT`、 `VERTICAL_BOTTOM`、 `VERTICAL_CENTER`、 `VERTICAL_JUSTIFY`、 `VERTICAL_TOP` ``` $objActSheet->getStyle('A')->getAlignment() ->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER) //垂直置中 ->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); //水平置中 $objActSheet->getStyle('F')->getAlignment()->setWrapText(true); //自動換行 ``` 10. 邊框設定,`getAllborders()`、`getTop()`、`getLeft()`、`getRight()`、`getBottom()` 等位置,邊框的種類有:`BORDER_DASHDOT`、 `BORDER_DASHDOTDOT`、 `BORDER_DASHED`、 `BORDER_DOTTED`、 `BORDER_DOUBLE`、 `BORDER_HAIR`、 `BORDER_MEDIUM`、 `BORDER_MEDIUMDASHDOT`、 `BORDER_MEDIUMDASHDOTDOT`、 `BORDER_MEDIUMDASHED`、 `BORDER_NONE`、 `BORDER_SLANTDASHDOT`、 `BORDER_THICK`、 `BORDER_THIN` ``` $objActSheet->getStyle("A1:J{$i}")->getBorders()->getAllborders()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN)->getColor()->setRGB('000000'); ``` 11. 把數字轉換為A、B、C欄位的方法: ``` function num2alpha($n){ for($r = ""; $n >= 0; $n = intval($n / 26) - 1) $r = chr($n%26 + 0x41) . $r; return $r; } ``` ### 三、 匯入Excel 1. 先準備好匯入界面 ```
匯入Excel
請選擇 xls 檔
匯入
``` 2. 先根據上傳的檔名`$_FILES['userfile']['name']`來判斷匯入的檔案格式,以便選用正確的閱讀器 ``` include_once TADTOOLS_PATH . '/PHPExcel/IOFactory.php'; if (preg_match('/\.(xlsx)$/i', $_FILES['userfile']['name'])) { $reader = PHPExcel_IOFactory::createReader('Excel2007'); } else { $reader = PHPExcel_IOFactory::createReader('Excel5'); } ``` 3. 載入上傳檔案(`$_FILES['userfile']['tmp_name']`)並讀取內容,$highestRow讓我們知道檔案裡面有幾列 ``` $PHPExcel = $reader->load($_FILES['userfile']['tmp_name']); // 檔案名稱 $sheet = $PHPExcel->getSheet(0); // 讀取第一個工作表(編號從 0 開始) $highestRow = $sheet->getHighestRow(); // 取得總列數 ``` 4. 利用兩個for迴圈,讀出每一格資料:從第3列開始讀(前兩列都是標題),讀到最後一列,接著再讀取欄,通常都會知道有幾欄要讀 ``` for ($row = 3; $row <= $highestRow; $row++) { $v = array(); //讀取一列中的每一格 for ($col = 0; $col <= 10; $col++) { //讀取資料 } //寫入資料庫 $sql = "insert into $tbl (`sn`, `focus`, `topic_sn`, `sort`, `title`, `content`, `username`, `create_time`, `update_time`, `uid`) values('{$v[0]}' , '{$v[1]}', '{$v[2]}', '{$v[3]}', '{$v[4]}', '{$v[5]}', '{$v[6]}', '{$v[7]}', '{$v[8]}', '{$v[9]}')"; $xoopsDB->queryF($sql) or web_error($sql); } ``` 5. 自動判斷格式函數 ``` //針對excel各種數據類型 function get_value_of_cell($cell = "") { if (is_null($cell)) { $value = $cell->setIterateOnlyExistingCells(TRUE); } else { if (strstr($cell->getValue(), '=')) { $value = $cell->getCalculatedValue(); } else if ($cell->getValue() instanceof PHPExcel_RichText) { $value = $cell->getValue()->getPlainText(); } else if (PHPExcel_Shared_Date::isDateTime($cell)) { //$value = $cell->getFormattedValue(); $value = PHPExcel_Shared_Date::ExcelToPHPObject($cell->getValue())->format('Y-m-d'); } else { $value = $cell->getValue(); } } return $value; } ``` 6. 讀取資料的方法:先判斷有無日期格式,若有,格式化儲存格為日期。若無,則讀出儲存格資料。由於最後要寫入資料庫,故寫入前還是得做資料的整理。 ``` if (PHPExcel_Shared_Date::isDateTime($sheet->getCellByColumnAndRow($col, $row))) { $val = PHPExcel_Shared_Date::ExcelToPHPObject($sheet->getCellByColumnAndRow($col, $row)->getValue())->format('Y-m-d H:i:s'); } else { $val = $sheet->getCellByColumnAndRow($col, $row)->getCalculatedValue(); } $v[$col] = $myts->addSlashes($val); ``` ### 四、 直覺點擊編輯 1. 先在欲編輯的頁面(顯示函數中)套用以下語法 ``` include_once XOOPS_ROOT_PATH."/modules/tadtools/jeditable.php"; $file="save.php"; $jeditable = new jeditable(); //此處加入欲直接點擊編輯的欄位設定 $jeditable->render(); ``` 2. 「加入欲直接點擊編輯的欄位設定」共有三種欄位可以加入: ``` //一般文字框 $jeditable->setTextCol("#id名稱", $file, '140px', '12px', "{'sn':$sn,'op' : 'save'}", "點擊編輯"); //大量文字框 $jeditable->setTextAreaCol("#id名稱", $file, '500px', '150px', "{'sn':$sn,'op' : 'save'}", "點擊編輯"); //下拉選單 $jeditable->setSelectCol("#id名稱", $file, "{'值1':'選項文字1' , '值2':'選項文字2' , 'selected':'預設值'}", "{'sn' : $sn , 'op' : 'save'}", "點擊編輯"); ``` 3. 第一個參數是欲編輯的元件id,此id同時會送出給php當作變數名稱(類似name),所以,在樣板記得也要加上id設定: ```
<{$snews.username}>
``` 4. 第二個參數$file用來指定檔案,如save.php以用來儲存使用者輸入後的值,而save.php會接收到什麼呢?以上例來說,會接收到四個變數如下: - (1) $\_POST\['id'\] => 'username'; //指定的id值 - (2) $\_POST\['value'\] => 'XXX'; //使用者輸入的值 - (3) $\_POST\['sn'\] => '2'; //額外傳送的變數 - (4) $\_POST\['op'\] => 'save'; //額外傳送的變數 5. 利用接收到的變數,可以撰寫`save.php`內容如下: ``` prefix("snews") . " set `{$_POST['id']}`='{$_POST['value']}' where sn='{$_POST['sn']}'"; $xoopsDB->queryF($sql); echo $_POST['value']; } ``` - (1) `save.php`執行後所echo的值會出現在該元件中。 - (2) 一樣記得要檢查權限才能改,否則會變成大漏洞。 6. 第三個參數則是欲帶到`save.php`的額外變數值,以`{}`包起來,每組變數的格式為「變數名稱:變數值」,每組變數用 , 隔開。 7. 下拉選單若是從資料庫撈出陣列,可利用`json_encode($陣列,256)` 函數將之變成所需選項格式。
:::
搜尋
search
進階搜尋
QR Code 區塊
快速登入
所有討論區
「PHP全端開發」線上課程討論區
XOOPS使用討論區
一般研習學員
社大學員專用
路過哈啦區
XOOPS佈景設計
XOOPS模組開發
Tad書籍區
即時留言簿
書籍目錄
展開
|
闔起
線上使用者
60
人線上 (
6
人在瀏覽
線上書籍
)
會員: 0
訪客: 60
更多…