程式CODE
2013年9月30日 星期一
SFS3自製模組時,若需要輸出SXW檔的語法
SXW其實是個zip檔
所以,原理就是把一些需要的檔案zip出來,
檔名設定為SWX即可。
以下為範例
<?
//輸出個別sxw檔
function make_ooo($title_name,$action,$ClassName,$SubjectName,$TeacherName){
global $CONN,$UPLOAD_PATH;
//Openofiice的路徑
$oo_path=$UPLOAD_PATH."time_table/sample";
$filename=$title_name."_time_table.sxw";
//新增一個 zipfile 實例
$ttt = new EasyZip;
$ttt->setPath($oo_path);
//加入 xml 檔案到 zip 中,共有五個檔案
//讀入應該要包進去的檔,含圖檔
if (is_dir($oo_path)) {
if ($dh = opendir($oo_path)) {
while (($file = readdir($dh)) !== false) {
if($file=="." or $file==".." or $file=="content.xml" or $file=="Configurations2" or $file=="Thumbnails" or strtoupper(substr($file,-4))=='.SXW') {
continue;
}elseif(is_dir($oo_path."/".$file)){
if ($dh2 = opendir($oo_path."/".$file)) {
while (($file2 = readdir($dh2)) !== false) {
if($file2=="." or $file2==".."){
continue;
}else{
$data = $ttt->read_file($oo_path."/".$file."/".$file2);
$ttt->add_file($data,$file."/".$file2);
}
}
closedir($dh2);
}
}else{
$data = $ttt->read_file($oo_path."/".$file);
$ttt->add_file($data,$file);
}
}
closedir($dh);
}
}
//再讀出 content.xml
$data = $ttt->read_file($oo_path."/content.xml");
// 加入換頁 tag
$data = str_replace("<office:automatic-styles>",'<office:automatic-styles><style:style style:name="sfs_break_page" style:family="paragraph" style:parent-style-name="Standard"><style:properties fo:break-before="page"/></style:style>',$data);
//拆解 content.xml
$arr1 = explode("<office:body>",$data);
//檔頭
$con_head = $arr1[0]."<office:body>";
$arr2 = explode("</office:body>",$arr1[1]);
//資料內容
$con_body = $arr2[0];
//檔尾
$con_foot = "</office:body>".$arr2[1];
if($action=="teacher"){
$class_name="◎◎教室";
$tea_array=explode("_",$title_name);
$teacher_name=get_teacher_name($tea_array[2]);
}
if($action=="class"){
//查出某班的導師姓名
$class_array=explode("_",$title_name);
$classnum=substr($class_array[2].$class_array[3],1,3);
$str = "select teacher_sn from teacher_post where class_num='".$classnum."'";
$result = $CONN->Execute($str) or die ($str);
list($teacher_sn)=$result->FetchRow();
$teacher_name=get_teacher_name($teacher_sn);
$class_base_p=class_base();
$class_name=$class_base_p[$classnum];
//導師時間
for($i=1;$i<=5;$i++){
$SubjectName[$i][0]="導師時間";
$TeacherName[$i][0]=$teacher_name;
}
}
//置換今年度
$tyear=substr($title_name,0,3);
$con_body = str_replace("year",$tyear,$con_body);
//置換班級名及教師名
$class_name=iconv("big5","UTF-8",$class_name);
$con_body = str_replace("class",$class_name,$con_body);
$teacher_name=iconv("big5","UTF-8",$teacher_name);
$con_body = str_replace("teacher",$teacher_name,$con_body);
//sxw檔的中文是UTF-8,SFS3裡的字串先由big5轉為utf8
for($i=1;$i<=5;$i++){
for($j=0;$j<=7;$j++){
$SubjectName[$i][$j]=iconv("big5","UTF-8",$SubjectName[$i][$j]);
//如果科目名稱大於四個字,只好取前兩個字
if(strlen($SubjectName[$i][$j])>12){
$SubjectName[$i][$j] = mb_substr($SubjectName[$i][$j],0,2,"UTF-8");
}
//如果科目名稱大於兩個字,換行
if(strlen($SubjectName[$i][$j])>6){
$SubjectName[$i][$j] = mb_substr($SubjectName[$i][$j],0,2,"UTF-8")."</text:p><text:p text:style-name='P7'>".mb_substr($SubjectName[$i][$j],2,2,"UTF-8");
}
$con_body = str_replace("s".$i.$j,$SubjectName[$i][$j],$con_body);
$ClassName[$i][$j]=iconv("big5","UTF-8",$ClassName[$i][$j]);
$con_body = str_replace("c".$i.$j,$ClassName[$i][$j],$con_body);
$TeacherName[$i][$j]=iconv("big5","UTF-8",$TeacherName[$i][$j]);
$con_body = str_replace("t".$i.$j,$TeacherName[$i][$j],$con_body);
}
}
$replace_data=$con_head.$con_body.$con_foot;
//把一些多餘的標籤以空白取代
$pattern[]="/\{([^\}]*)\}/";
$replacement[]="";
$replace_data=preg_replace($pattern, $replacement, $replace_data);
$ttt->add_file($replace_data,"content.xml");
//產生 zip 檔
$sss = $ttt->file();
//以串流方式送出 ooo.sxw
header("Content-disposition: attachment; filename=$filename");
header("Content-type: application/vnd.sun.xml.writer");
header("Pragma: no-cache");
header("Expires: 0");
echo $sss;
exit;
}
?>
另外,若要使用者上傳SWX檔,就要先unzip這個檔,
放置好位置,需要輸出時,再zip出來,改附檔名,下載。
不過,我還沒有研究出來。
SFS3自製模組時,若需要以PHP輸出WORD DOC檔的語法
這其實是有點強迫用WORD來開網頁的方法啦
下載後,再用word另存成doc檔。
有需要的話,也可自行在<style></style>中,自行增加CSS語法(也不一定WORD能表現出來啦)
參考自:CSS解說
<?
header("Content-type: application/msword");
header("Content-Disposition: attachment; filename=文件檔名.doc");
header("Pragma: no-cache");
header("Expires: 0");
echo "
<html xmlns:o='urn:schemas-microsoft-com:office:office'
xmlns:w='urn:schemas-microsoft-com:office:word'
xmlns='http://www.w3.org/TR/REC-html40'>
<meta http-equiv=Content-Type content='text/html; charset=big5'>
<head><title>可打標題</title>
<xml>
<w:WordDocument>
<w:View>Print</w:View>
<w:Zoom>100</w:Zoom>
</w:WordDocument>
</xml>
<style>
@page Section1
{size:".$size.";
mso-page-orientation:".$paper.";
margin:42.55pt 2.0cm 42.55pt 2.0cm;
mso-header-margin:42.55pt;
mso-footer-margin:49.6pt;
mso-paper-source:0;
layout-grid:19.05pt;}
div.Section1
{page:Section1;}
</style></head><body lang=ZH-TW><div class="Section1">
";
echo "WORD的內容文字、表格";
?>
SFS3自製模組時,若需要輸出PDF的語法
在config.php裡,需引入sfs_case_chinese.php
PDF_Chinese()物件:產生PDF檔
以下語法為參考
FPDF參考語法
//產生pdf檔,左右空格10...左到右共297,上下共210
$pdf=new PDF_Chinese();
$pdf->Open();
$pdf->AddBig5Font();
$pdf->AddPage(L,A4);
$pdf->Line(149,0,148,210);
$pdf->SetFont('Big5','B',16);
//標題
$pdf->Cell(139,20,$schoolname,0,0,C);
$pdf->Cell(138,20,$schoolname,0,0,C);
$pdf->Ln();
//首行
$pdf->SetFont('Big5','',9);
$pdf->Cell(15,8,"請假日期",1,0,C);
$pdf->SetFont('Big5','',12);
$pdf->Cell(71,8,$abs_date,1,0,C);
$pdf->Cell(20,8,"請假教師",1,0,C);
$pdf->Cell(22,8,$teacher_name,1,0,C);
$pdf->Cell(20,8,"",0);
$pdf->SetFont('Big5','',9);
$pdf->Cell(15,8,"請假日期",1,0,C);
$pdf->SetFont('Big5','',12);
$pdf->Cell(71,8,$abs_date,1,0,C);
$pdf->Cell(20,8,"請假教師",1,0,C);
$pdf->Cell(22,8,$teacher_name,1,0,C);
$pdf->Ln();
//第2行
$pdf->SetFont('Big5','',9);
$pdf->Cell(7,8,"假別",1,0,C);
$pdf->SetFont('Big5','',12);
$pdf->Cell(27,8,$abs_kind,1,0,C);
$pdf->Cell(15,8,"事由",1,0,C);
$pdf->SetFont('Big5','',9);
$pdf->Cell(79,8,$reason,1);
$pdf->SetFont('Big5','',12);
$pdf->Cell(20,8,"",0);
$pdf->SetFont('Big5','',9);
$pdf->Cell(7,8,"假別",1,0,C);
$pdf->SetFont('Big5','',12);
$pdf->Cell(27,8,$abs_kind,1,0,C);
$pdf->Cell(15,8,"事由",1,0,C);
$pdf->SetFont('Big5','',9);
$pdf->Cell(79,8,$reason,1);
$pdf->SetFont('Big5','',12);
$pdf->Ln();
$pdf->Output();
}
SFS3自製模組加參數
module-cfg.php檔的最後
$midnoon_arr=array('5'=>'4~5節間','6'=>'5~6節間','7'=>'6~7節間');
$SFS_MODULE_SETUP[1] =
array('var'=>"class_chk_list", 'msg'=>"教務處查堂記錄表項目", 'value'=>'使用教具情形,教室管理,按課表操作,遲到早退?,使用參考書');
$SFS_MODULE_SETUP[2] =
array('var'=>"midnoon", 'msg'=>"午休節次", 'value'=>$midnoon_arr);
然後在config.php最加加上
//取得模組設定
$m_arr = &get_sfs_module_set();
extract($m_arr, EXTR_OVERWRITE);
然後就可以在模組內使用變數 $class_chk_list....等等
SFS3網管者功能不見了
若「陳老師」這個預設的網管者刪了....
可使用phpMyAdmin修改pro_check_new這個資料表
找到 p_id為1的這筆資料
更改pro_kind_id 的值為1
id_kind 的值為「教師」
id_sn 的值改為目前設為網管者的sn(可在teacher_base裡查到)
is_admin 的值為1
這樣可以讓一些有「管理權限」的模組可以正常讓網管者管理
SFS3模組學習-公用變數
include_once "../../include/config.php";
curr_year() 本學年
corr_seme() 本學期
$_SESSION['session_tea_sn'] 登入的老師sn
SFS3模組自學-常用公共函式1
引入include_once "../../include/config.php";
head()
sfs檔頭
sfs_ckeck()
sfs權限檢查
foot()
sfs檔尾
select_teacher_arr()
列出本學期老師的選單1
select_teacher()
列出本學期老師的選單2-沒有預設值
get_teacher_name(教師sn)
列出教師sn的名子
get_teacher_post_data(教師sn)
列出教師sn的資料陣列:0:姓名;1:職稱;2:處室代號;3:班級;
teacher_base()
教師的名子陣列:
make_menu($school_menu_p)
模組的功能選單...可在模組內的config.php設定$school_munu_p
例:$school_menu_p = array(
"index.php"=>"代課銜接申請",
"years.php"=>"個人歷次查詢",
"view.php"=>"全體代課一覽",
"admin.php"=>"代課銜接管理",
);
class_base()
列出班級,例class_base(101),傳回一年一班
//判別是不是有管理權的教師
$SCRIPT_FILENAME = $_SERVER['SCRIPT_FILENAME'];
$module_manager=checkid($SCRIPT_FILENAME,1);
if($module_manager) {
你有管理權
}else{
你沒有管理權
}
然後在module-cfg.php增加
//本模組須區分管理權
$MODULE_MAN = 1 ;
//管理權說明
$MODULE_MAN_DESCRIPTION = "具有管理權人員,可排定代課老師及增加、刪除或觀看任一教師代課銜接單,一般使用者僅可新增自己的代課銜接表";
引入sfs_case_menu.php
year_seme_menu(預設學年度,預設學期)
學年度學期下拉選單
引入sfs_case_dataarray.php
tea_abs_kind()
傳回教師的請假類別陣列
引入sfs_case_subjectscore.php
get_ss_name($scope_id="",$subject_id="",$mode="",$ss_id="")
傳回科目名稱
$scope_id
$subjesct_id
$mode長或短名
$ss_id課目代號
引入sfs_case_chinese.php
PDF_Chinese()物件:產生PDF檔
使用fpdf方法可參考這裡
引入sfs_API.php
get_teach_class():傳回任教班級的num
//取登入老師的sn
$teacher_sn = $_SESSION['session_tea_sn'];
SFS3模組自學-首頁功能表的做法
index首頁的功能表
$tool_bar=&make_menu($school_menu_p);
在模組內的config.php可設定
//目錄內程式
$school_menu_p = array(
"index.php"=>"第1選單",
"index2.php"=>"第2選單"
);
SFS3判別校內IP
由 系統管理/模組權限管理 進入
點選校務行政,找到 「校務佈告欄模組」 的「調整」選項,
設定 insite_ip 的值 (以學校實際IP設定)
例:
一個 C class 網段值為 163.17.40
半個 C class 網段值為 163.17.40.1-163.17.40.128
多個 網段時,以 , 隔開 163.17.40,163.17.39.1-163.17.39.128
點選校務行政,找到 「校務佈告欄模組」 的「調整」選項,
設定 insite_ip 的值 (以學校實際IP設定)
例:
一個 C class 網段值為 163.17.40
半個 C class 網段值為 163.17.40.1-163.17.40.128
多個 網段時,以 , 隔開 163.17.40,163.17.39.1-163.17.39.128
2013年8月1日 星期四
SFS3校務公佈欄的中文檔名附件的問題有解
來自:
http://plog.ymes.chc.edu.tw/post/1/546
一、安裝mod-encoding
二、增加設定檔
http://plog.ymes.chc.edu.tw/post/1/546
一、安裝mod-encoding
sudo apt-get install libapache2-mod-encoding
二、增加設定檔
sudo vim /etc/apache2/mods-available/encoding.conf
填入
<IfModule mod_encoding.c>
EncodingEngine on
NormalizeUsername on
SetServerEncoding Big5
DefaultClientEncoding Big5 UTF-8
AddClientEncoding "(Microsoft .* DAV $)" Big5 UTF-8
AddClientEncoding "Microsoft .* DAV" Big5 UTF-8
AddClientEncoding "Microsoft-WebDAV*" Big5 UTF-8
</IfModule>
三、設定encoding.load及encoding.conf連結
到mods-enabled目錄
cd /etc/apache2/mods-enabled
連結
sudo ln -s ../mods-available/encoding.loadsudo ln -s ../mods-available/encoding.conf
四、重啟apache
sudo /etc/init.d/apache2 restart2013年4月7日 星期日
SFS3函式庫
取得年度學期選單
年級與班級選單
$date_select=class_ok_setup_year($sel_year,$sel_seme,"year_seme","jumpMenu_seme");
<script language='JavaScript'>
function jumpMenu(){
location=\"$PHP_SELF?act=$act&&year_seme=\" + document.myform.year_seme.options[document.myform.year_seme.selectedIndex].value + \"&class_id=\" + document.myform.class_id.options[document.myform.class_id.selectedIndex].value;
}
</script>
年級與班級選單
class_select=get_class_select($sel_year,$sel_seme,"","class_id","jumpMenu",$class_id);
<script language='JavaScript'>
function jumpMenu_seme(){
if(document.myform.year_seme.options[document.myform.year_seme.selectedIndex].value!=''){
location=\"$PHP_SELF?act=$act&year_seme=\" + document.myform.year_seme.options[document.myform.year_seme.selectedIndex].value;
}
}
</script>
訂閱:
文章 (Atom)