Toggle main menu visibility
新聞
下載
教材
影音
討論
其他選單
好站連結
行事曆
電子相簿
常見問題
萬用表單
即時留言簿
友站消息
社大學員
:::
登入
登入
帳號
密碼
登入
重整畫面
:::
所有書籍
「[1071]XOOPS模組開發」目錄
MarkDown
8-9 templates/op_import_form.tpl
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
9-1 index.php
\[1071\]XOOPS模組開發 ================= ### 一、 產生docx檔 1. PHPWord同屬PHPOffice的系列,官網:
2. PHPWord 0.14手冊:
3. PHPWord 0.13手冊:
4. 需要的環境如下:PHP 5.3.3 以上、ZipArchive、xmllib等PHP函式庫 5. 若是您的MS Office是2007以下,那麼可能需要Microsoft Office Compatibility Pack(
)才能開啟之。PHPWord無法產生2003的doc檔(因為非公開格式)。 6. 建立一個word檔的基本結構如下: ``` require_once XOOPS_ROOT_PATH . '/modules/tadtools/vendor/autoload.php'; $phpWord = new \PhpOffice\PhpWord\PhpWord(); $filename = iconv("UTF-8", "Big5", $filename); $objWriter = \PhpOffice\PhpWord\IOFactory::createWriter($phpWord, 'Word2007'); header('Content-Type: application/vnd.ms-word'); header("Content-Disposition: attachment;filename={$filename}.docx"); header('Cache-Control: max-age=0'); $objWriter->save('php://output'); ``` 7. 亦可輸出成開放格式odt檔 ``` $objWriter = \PhpOffice\PhpWord\IOFactory::createWriter($phpWord, 'ODText'); header('Content-Type: application/vnd.oasis.opendocument.text'); header("Content-Disposition: attachment;filename={$filename}.odt"); ``` 8. 一些預設及建立頁面、設定頁面邊界功能 ``` $phpWord->setDefaultFontName('標楷體'); //設定預設字型 $phpWord->setDefaultFontSize(9); //設定預設字型大小 ``` 9. 設定頁面邊界功能並新增編輯區域 ``` $sectionStyle = array( 'orientation' => 'portrait', //landscape(橫);portrait(直) 'marginTop' => 1133.858268, //上邊界 2cm*566.929134 'colsNum' => 2, //幾欄 'pageNumberingStart' => 1, //第幾頁 'borderTopSize' => 2, //上邊框 'borderTopColor' => '0000FF', //上邊框顏色 'lineNumbering' => array('start' => 1, 'increment' => 1), //行號設定 ); $section = $phpWord->addSection($sectionStyle); //建立一個區域 ``` - (1) 樣式參數可參考:
- (2) 其中有方向性的分別還有Top、Bottom、Left、Right,自行新增或修改即可。 - (3) 若有用到長度,其單位為twip,1 cm = 566.929134 twip,1 twip = 0.001764 cm,亦可用底下方式將公分轉換為twip ``` \PhpOffice\PhpWord\Shared\Converter::cmToTwip(2.5) ``` ### 二、 phpword的各種元件 1. 可用元件可參考:
2. 新增文字及相關文字設定,可用設定詳細請看 ``` $fontStyle = array('color' => '000000', 'size' => 10, 'bold' => false); $paragraphStyle = array('align' => 'both', 'valign' => 'center'); $section->addText($title, $fontStyle, $paragraphStyle); $textrun = $section->addTextRun($paragraphStyle); ``` - (1) `addTextRun()`用來將同一段落中的文字,分別套用不同文字設定,為物件。 3. 新增標題(`$depth` 是指標題N) ``` $phpWord->addTitleStyle( $depth, $fontStyle, $paragraphStyle); //設定標題N樣式 $section->addTitle( '標題文字', $depth ); //新增標題 ``` 4. 換行及換頁 ``` $section->addTextBreak(2, $fontStyle, $paragraphStyle); //換行,可指定換幾行 $section->addPageBreak(); //換頁 ``` 5. 插入連結和圖片,`$style` 可用設定:`width`、`height`、`align`,單位為px ``` $section->addLink( $linkSrc, $linkName, $fontStyle, $paragraphStyle); //加入連結 $section->addImage( $src, $style ); //插入圖片 ``` 6. 若要將HTML轉為word檔,圖檔部份會用到的函數: ``` //從網頁語法中抓出圖片連結的函數 function linkExtractor($html){ $linkArray = array(); if (preg_match_all('/
]*)[\"\']?[^>]*>/i', $html, $matches, PREG_SET_ORDER)) { foreach ($matches as $match) { array_push($linkArray, $match[1]); } } return $linkArray; } //將網頁語法中的圖片語法取代為自訂文字, function replace_images($html){ $html = preg_replace('/
]*)[\"\']?[^>]*>/i', '圖片', $html); return $html; } ``` - (1) preg系列函數,支援的是Perl-Compatible Regular Expression(PCRE) 表達示 - (2) 關於正規表達式的用法可參考:
- (3) 想要練習或測試可利用此工具:
7. 插入有序或無序清單, 設定有序(`TYPE_NUMBER`)或無序(`TYPE_BULLET_FILLED`)清單,`$depth`為階層,從`0`開始。 ``` $listStyle = array('listType' => PHPWord_Style_ListItem::TYPE_NUMBER); $section->addListItem( $text, $depth, $fontStyle, $listStyle, $paragraphStyle ); ``` ### 三、 表格 1. 建立表格 ``` $tableStyle = array('borderColor' => '000000', 'borderSize' => 6, 'cellMargin' => 80); $table = $section->addTable($tableStyle); ``` 2. 建立一個橫列 ``` $rowStyle = array('cantSplit' => true, 'tblHeader' => true); $table->addRow(10, $rowStyle); ``` 3. 建立儲存格 ``` $cellStyle = array('bgColor' => 'CFCFCF'); $fontStyle = array('size' => 12, 'bold' => true); $paragraphStyle = array('alignment' => \PhpOffice\PhpWord\SimpleType\Jc::CENTER); $table->addCell(2000, $cellStyle)->addText('分類', $fontStyle, $paragraphStyle); ``` 4. 合併儲存格(套用不同儲存格樣式即可達成) ``` $cellRowSpan = array('vMerge' => 'restart'); //垂直合併 $cellContinue = array('vMerge' => 'continue'); //略過 $cellColSpan = array('gridSpan' => 2); //水平合併 ``` ### 四、 頁首頁尾 1. 加入頁首或頁尾 ``` //$header = $section->addHeader(); //頁首 $footer = $section->addFooter(); //頁尾 $footer->addPreserveText('{PAGE} / {NUMPAGES}', $fontStyle, $paragraphStyle); ``` ### 五、 用pclzip壓縮及解壓縮 1. 官網:
2. 請下載解壓後,將`pclzip.lib.php`複製到class目錄下 3. 將多個目錄壓縮(亦可單一目錄) ``` create($bak_dir, PCLZIP_OPT_REMOVE_PATH, $remove_path); if ($zip_list == 0) { die("Error : " . $zipfile->errorInfo(true)); } else { header("location: {$bak_file_url}"); exit; } ``` - (1) 需要修改的部份僅有`$bak_dir`(可用字串或陣列),亦即需要加入壓縮檔的目錄或檔案 - (2) `$remove_path`意思是去掉壓縮檔中的路徑,避免解壓縮後會有好幾層目錄 - (3) `$bak_file`是壓縮檔要存放的主機實體位置 - (4) `$bak_file_url`是壓縮檔的下載網址,壓縮完可以直接下載。 4. 將上傳的zip檔解壓縮(上傳表單的`name='zipfile'`) ``` $extract_path = XOOPS_ROOT_PATH . "/uploads/"; $decompress = new PclZip($_FILES['zipfile']['tmp_name']); $decompress->extract($extract_path); ``` - (1) 一樣要先引入`pclzip.lib.php` 物件檔 - (2) 直接從表單上傳的暫存檔案(`$_FILES['zipfile']['tmp_name']`)解壓縮 - (3) `$extract_path`是設定要解壓縮的實體路徑 ### [六、下載最後的模組完整包](https://www.tad0616.net/uploads/tad_book3/file/44/snews_9.zip)
:::
搜尋
search
進階搜尋
QR Code 區塊
快速登入
所有討論區
「PHP全端開發」線上課程討論區
XOOPS使用討論區
一般研習學員
社大學員專用
路過哈啦區
XOOPS佈景設計
XOOPS模組開發
Tad書籍區
即時留言簿
書籍目錄
展開
|
闔起
線上使用者
76
人線上 (
11
人在瀏覽
線上書籍
)
會員: 0
訪客: 76
更多…