Etable/開發:修訂版本之間的差異
出自六年制學程
(→batch) |
(→banE) |
||
第 32 行: | 第 32 行: | ||
*#添函式: | *#添函式: | ||
<pre>function 函式名($row){ | <pre>function 函式名($row){ | ||
− | if( | + | if(!in_array($_SESSION['login_user'],explode(';',$row[幾]))){ |
$row['banEdit']=1; | $row['banEdit']=1; | ||
$row['banErase']=1; | $row['banErase']=1; |
2015年4月2日 (四) 17:02的修訂版本
PHP是否允許已在的類別或物件再增添新方法,待查。
可參考混成
目錄
使用由工作函式定義之函數
batch
- batch屬性為陣列,每一元素之索引為按鈕提示,每一元素之名函式名。
- 諸函式在前置處理時執行。
- 範例:
- $物件->sql[0]="select 數欄,concat('<input type=text name=ba[',id欄,'][表單欄1] value=',表單欄1,' >') 欄代名,concat('<input type=text name=ba[',id欄,'][表單欄2] value=',表單欄2,' >') 欄代名 from 諸表 where 條件";
- $物件->batch=array('按鈕提示'=>'函式名');
- 添函式:
function 函式名(){ if(isset($_REQUEST['ba'])){ foreach($_REQUEST['ba'] as $k=>$v){ $up_sql="update 表 set"; $up_col=array(); foreach($v as $kk=>$vv){ if($vv!=''){$up_col[]="`".$kk."`='".etable::quoteSmart($vv,'-addslashes')."'";}// MySQL處理欄值會去反斜,所以先加反斜 else{$up_col[]="`".$kk."`=''";} } $up_sql.=implode(",",$up_col)." where id欄='".$k."'"; mysql_query($up_sql); } echo '寫好了'; } }
banE
- 範例:
- 設 $物件->banE='函式名';
- 添函式:
function 函式名($row){ if(!in_array($_SESSION['login_user'],explode(';',$row[幾]))){ $row['banEdit']=1; $row['banErase']=1; } return $row; }
以函式決定欄值的表現
- 在工作程式中對 formType 增加一元素 '長欄名'=>array('function',函式名)
- 定義函式,傳回值用來取代該欄的欄值並顯示於輸出。
- 範例:
- 設 $物件->formType=array('長欄名'=>array('function',函式名));
- 添函式:
function 函式名($arr){ if($arr['row'][3]==$_SESSION['login_user']){return $arr['value'];} else{return '無權看';} }
對編刪連結產生限制 banE
- 在工作程式中定義一個判別函式 xxx($row) ,引數為 $row 並使用 $_SESSION ,return 回來含兩個變數 $row['banEdit'],$row['banErase'] 的新 $row 。
- 增添 $物件->banE='函式名' ,函式名指的是上項的那個函式,如 'xxx' 。
- 在 etable.php 的 mk_rows 方法中,加入「if(isset($this->banE) && $this->banE){$temp=$this->banE;$row=$temp($row);}」,然後將 $row 放入 $this->tbl 。
- 各種顯示方法共用「編、刪連結生成函式 up_links($row)」,其中會由 $row['banEdit'],$row['banErase'] 的值判斷要不要抑制編、刪連結連結。
求欄值
etable.php 中的 colValue(欄序,$value,$row) 以欄序逐一處理。
- text欄或bolb欄
- 欄值為二進位內容,並不秀出內容,而是秀出提示
- 若formType指示為 'auto' 欄,並包含使用 wiki 語法,顯示$wiki->wiki2html($value)
- flag未帶binary或演算式者為text欄,進一步判讀是否為HTML格式
- 若formType指示為 'unix_time' 欄,則依格式指示顯示
- 若formType指示為 'oneWaySwitch' 欄,則秀按鈕
- 若為連動選單的第二選單:秀提示或'------'
- 若formType指示為 'function' 欄,取出函式名,執行函式(引數為$j,$value,$row),秀函式傳回值。
- 交代要轉成提示者:
- 排除'unix_time' 欄
- 若formType指示為 'select' 或 'select2' 或 'radio' 欄,依欄值秀出相應提示。
- 若formType指示為 'radioyn' 欄,依欄值真假秀出相應提示。
- 若formType指示為 'checkbox' 欄,依欄值秀出相應提示。
- 若formType指示為 'wrap' 欄,$value中的「;」代換為換行<br/>
- 轉換數學公式 mimetex($value)
欄位種類
派值範例:$formType=array('長欄名'=>array('select',array('值'=>'提示文字','值'=>'提示文字','值'=>'提示文字',…)), '長欄名'=>array('select2',第一選單陣列,第二選單長欄名,第二選單二維陣列,第二選單以提示代表欄值), '長欄名'=>array('select22',array(0=>'===請選擇===')), '長欄名'=>array('radio' ,array('值'=>'提示文字','值'=>'提示文字','值'=>'提示文字',…)), '長欄名'=>array('radioyn',array('0之提示','1之提示')), '長欄名'=>array('checkbox',array('勾選後送值'=>'提示')), '長欄名'=>array('date',array('ifFormat'=>'daFormat')),改畢,因欄值'%Y-%m-%d'是小日曆認得的格式,所以預選日期為欄值日期 '長欄名'=>array('auto',array('plain','html','wiki','tex')),改畢,$this->formType中未定義,則$this->fields[$i]['formType']會自動將該欄定為auto型,如欄型為TEXT則form出textarea,其他出文字欄。第二元素為語法組合陣列,預設為plain(純文本)。 '長欄名'=>array('hidden',函式名,表單元素出現時機), '長欄名'=>array('unix_time','Y-m-d<bR>H:i:s',表單元素出現時機),待改,因欄值'%s'是小日曆不認得的格式,所以預選日期為跑到當天日期,要認得欄值格式須為「年-月-日 [10] 時:分」,用Calendar.setDateFormat('%s');無效。此事無解,參看http://192.168.3.175/et/class/calendar/jstest.htm,不是每一種格式jscalendar都可以認得出日期,如Date #0:的%s會解不出日期,Date #2:的…會解錯日期,Date #4:解不出日期。 '長欄名'=>array('oneWaySwitch',array(0=>'按鈕字',值=>'按完字')), '長欄名'=>array('searchSelect',array(''=>'===輸入提示===')), '長欄名'=>array('function',函式名), '長欄名'=>array('wrap'), );
函式欄
表示法如派值範例。
函式寫在工作程式中,以欄值為唯一引數。
若未設定翻譯,秀原欄值;若設定翻譯,秀函式返回值。
searchSelect 欄
配合的表單元件
- formcatchtext.php:產生文字輸入區,沒name沒id,但可決定回應要從那一個id當中冒出來。
- formselect-et.php:產生span包select或單純的select
- XoopsFormSelect方法增加最後一個引數:$asSpan,預設為0
- render方法依$asSpan的值決定select外面要不要加span,以及id要派給外層span還是內層的select
- 如果沒有設 id ,以name為id。