檢視 Etable/form/addElements 的原始碼
←
Etable/form/addElements
跳轉到:
導覽
、
搜尋
根據以下的原因,您並無權限去做編輯這個頁面:
您剛才的請求只有這個使用者組的使用者才能使用:
使用者
你可以檢視並複製本頁面的原始碼。
[[分類:Etable/form]] <pre>addElements($i,$value) $i 代表 select 的第幾欄 $value 代表傳入欄值</pre> $lc_name=$this->fields[$i]['lc_name']; 會將該欄的長欄名,如「住宿」,放入 $lc_name 。 ===$xoopsUser=== #是一個物件 #專門給欄名為「uname」者使用 #其方法 getVar('uname') 會取回註冊名 ===XoopsForm (在 form.php 中定義)=== 表單的抽象結構 ====諸屬性==== #$_action:後送目的地 #$_method:後送方法 #$_name:表單名 #$_title:表單的抬頭 #$_elements:集合各表單元素構成的陣列 #$_extra:form 標籤內的額外訊息 #$_extra1:待定義 #$_extra2:表單後方的額外訊息 #$_required:必填各表單元素構成的陣列 ====諸方法==== #初始方法 XoopsForm($title, $name, $action, $method="post", $addtoken=false) #*取傳入的 $title 為物件抬頭 #*若傳入的 $name 非為空字串即為物件名,不然物件名預設為 "xoops_form" #*取傳入的 $action 為物件後送目的地 #*取傳入的 $method 為物件後送通導;此項未設,預設止 POST 通道 #*丁丁要忽略 XoopsFormHiddenToken #*$this->addElement(new XoopsFormHidden('skipValidationJS', 0)); #*$this->setExtra('onsubmit="return xoopsFormValidate_'.$this->getName().'();"'); #getTitle():送物件抬頭 #getName():送物件名 #getAction():送物件目的地 #getMethod():送物件通道 #addElement(&$formElement, $required=false):$_elements 與 $_required 要不要加一元素 #&getElements(遞迴 預設不遞迴):由於表單中的諸子元素中可能某一子元素本身是托盤,所以可對本表單物件的 $_elements 施以遞迴處理,直到萃取出所有非托盤的子元素再傳回。 #getElementNames():取所有表單元素名構成陣列 #&getElementByName($name):依表單元素名送回表單元素物件 #setElementValue($name, $value):對表單元素以該元素的 setValue 方法派入 $value #setElementValues($values):$values 為陣列,對眾表單元素扎批次派值 #&getElementValue($name):對表單元素以該元素的 getValue 方法取值 #&getElementValues():對表單所有元素以該元素的 getValue 方法取值,並構成值的陣列 #setExtra(額外字串,取代=false,$i=''):設定額外資訊,預設為添附;也可以設為取代。 #getExtra($i=''):送回額外資訊 #setRequired(&$formElement):設定某表單元素為必填欄位 #&getRequired():傳回所有表單的必填欄位 #insertBreak($extra = null):無內容 #render():無內容 #display():依 form 物件設定的 render() 表現內容 #renderValidationJS($withtags=true):造 javascript 驗證函式 #assign(&$tpl):樣版化各表單元素 ===表單實體化:以下說明 themeform.php,另外還有 SimpleForm 和 TableForm ,都更簡單=== ====諸方法==== #insertBreak(…):未使用 #render():實體化 #*用 getName() 取表單名與表單 id #*用 getAction() 取目的地 #*用 getMethod() 取後送通道 #*用 getExtra() 補上 form 標籤內額外字串 #*將 表單元素->isHidden() 者實體化 #*出 <table> #*第一列跨兩欄,放 getTitle() #*其餘各列: #*#第一欄出 表單元素->getCaption(),如是是必填欄位再加「*」 #*#表單元素->getDescription() 非空字串,再加「換行換行加粗『表單元素->getDescription()』」 #*#第二欄出 表單元素->render() #*如果有必填欄位最後一列跨兩欄,放「* = 必填欄位,務請填寫。」 #*最後一行之後,</table>之前放 $_extra2 ,可以寫成跨兩欄,也可以寫成兩欄;可以寫 th 也可以寫 td #*出 </table> #*出 </form> #*出 renderValidationJS( true ) ===XoopsFormElement (在 formelement.php 中定義)=== ====諸屬性==== #$_name:表單元素名稱 #$_id:表單元素 id ,預設為空字串 #$_caption:表單元素抬頭 #$_accesskey 預設為空字串 #$_class:表單元素 CSS 類別,預設為空字串 #$_hidden:表單元素是否為 hidden ,預設為 false #$_extra #$_extra1 #$_extra2 #$_required:表單元素是否為必填欄位,預設為 false #$_description ====諸方法==== #XoopsFormElement():跳離 #isContainer():傳回假 #setName($name):trim 後放入 $_name #getName(true):取表單元素名 #*預設要轉碼,不轉碼須設 false #*用 htmlspecialchars(字串) 將 HTML 符號變成不可執行的符號,預設轉 < > " <br/>htmlspecialchars(字串,ENT_QUOTES),加轉 ' #*還要轉 &,至少要轉以上這五個 #setAccessKey($key):$key trim 後放入 $_accesskey #getAccessKey():取物件的 $_accesskey #getAccessString($str):如果 $str 含 $_accesskey ,對 $str 中的 $_accesskey 畫底線 #setClass($class):將 $class trim 後放入物件的 $_class #getClass():取物件的 $_class #setCaption($caption):將 $caption trim 後放入物件的 $_caption #getCaption():取物件的 $_caption #setId($id):將 $id trim 後放入物件的 $_id #getId():取物件的 $_id ,若為空字串,傳回 getName() 的值 #setDescription($description):將 $description trim 後放入物件的 $_description #getDescription():取物件的 $_description #setHidden():將物件的 $_hidden 改設為真 #isHidden():取物件的 $_hidden #setExtra(額外字串,取代=false,$i=''):設定額外資訊,預設為添附;也可以設為取代。 #getExtra($i=''):送回額外資訊 #render():無內容 ===表單元素實體化=== ====XoopsFormText==== '''屬性''' #$_size: #$_maxlength #$_value '''方法''' #XoopsFormText($caption, $name, $size, $maxlength, $value="", $id = "") #*setCaption($caption) #*setName($name) #*$_size = intval($size) #*$_maxlength = intval($maxlength) #*setValue($value) #*setId($id) #getSize():取物件的 $_size #getMaxlength():取物件的 $_maxlength #getValue():取物件的 $_value #setValue($value):將 $value 設為物件的 $_value #render():造 <input type='text' … /> #*getName() #*getId() #*getSize() #*getMaxlength() #*getValue() #*getExtra():在標籤內 #*getExtra('2'):在標籤後 ===XoopsFormElementTray (在 formelementtray.php 中定義)=== 承載多個 FormElement 的托盤 ====屬性==== #$_elements:放多個 element 的陣列 #$_required:必填欄位陣列 #$_delimeter:元素間隔,預設為 &nbsp; ====方法==== #XoopsFormElementTray( $caption, $delimeter = "&nbsp;", $name = "" ) #*setName($name) #*setCaption($caption) #*將 $delimeter 設為物件的 $_delimeter #isContainer():傳回真 #isRequired():物件的 $_required 陣列非空就傳回真,否則傳回假 #addElement( &$formElement, $required = false ):物件的 $_elements 先加一元素,再看物件的 $_required 是不是也要加一元素 #&getRequired():取物件的 $_required #&getElements(遞迴 預設不遞迴):由於本托盤的諸子元素中可能某一子元素本身也是托盤,所以可對本托盤物件的 $_elements 施以遞迴處理,直到萃取出所有非托盤的子元素再傳回。 #getDelimeter(編碼 預設不編碼):換掉 $_delimeter 中的 < > " 空白,將 HTML 符號變成不可執行的符號 #render():所有的托盤都使用相同的實體化方法:對 $_elements 中的每個元素 $ele #*若 $ele->isHidden() 單純 $ele->render() #*非 $ele->isHidden():回傳 $ele->getCaption()." ".$ele->render().getDelimeter()… ===托盤實體化=== #宣告 class XoopsForm某某 extends XoopsFormElementTray #免設新屬性,也只有一個方法 XoopsForm某某(抬頭,後傳變數名,值,…) #*$this->XoopsFormElementTray(托盤抬頭,分隔字串);:設定托盤的抬頭、元素間的分隔字串,可以不用設托盤的名稱,因為托盤並不是真正的表單元素,只是數個表單元素的容器 #*造一個表單元素,其後傳變數名往往是 後傳變數名[索引],然後 $this->addElement(這個表單元素); #*連續裝數個表單元素,就完成了 #伺服器端收到的後傳變數是一個陣列,托盤中的每個表單元素傳回這個陣列的一個元素,如: #*XoopsFormTime 為 $name[hour],$name[min] #*XoopsFormFile 為 $name[path],$name[fileName] #*XoopsFormDateTime 為 $name[date],$name[pm],$name[hour],$name[min] ===將 searchSelect 托盤化=== [http://jendo.org/jendo/6year/sharingBooksToBorrow.php 借共享圖書]之中 #<pre><tr valign="top" align="left"><td class="head"></td><td class="even"><input type="text" value="" oninput="catchText(event,'/jendo/6year/sharingBooksToBorrow.php','listf[b][bid]')" onpropertychange="catchText(event,'/jendo/6year/sharingBooksToBorrow.php','listf[b][bid]')"></td></tr></pre> #<pre><tr valign="top" align="left"><td class="head">書</td><td class="even"><span id="listf[b][bid]"><select size="1" name="f[b][bid]"><option value="">===請輸入書名===</option></select></span></td></tr></pre> #$ET->formType=array('b.bid'=>array('searchSelect', array(''=>'===請輸入書名===')),…); formcatchtext.php 之中 <pre>class XoopsFormCatchText extends XoopsFormElement { var $listId; function XoopsFormCatchText($listId){ $this->listId=$listId; } function render(){ return "<input type='text' value='' oninput=catchText(event,'".$_SERVER['PHP_SELF']."','".$this->listId."') onpropertychange=catchText(event,'".$_SERVER['PHP_SELF']."','".$this->listId."') />"; // by jj } }</pre> login.php input 後送變數名固定為 catchText ,應改為可指定後送變數名 <pre>function catchText(keyEvent,dataSource,divID){ // 抓取字從 ajax 通道後送 keyEvent=(keyEvent)?keyEvent:window.event; // FF叫event,IE叫window.event input=(keyEvent.target)?keyEvent.target:keyEvent.srcElement; // FF叫target,IE叫srcElement eventType=(navigator.appName=='Microsoft Internet Explorer')?'propertychange':'input';// IE用propertychange,其他用input if(keyEvent.type==eventType){postData(dataSource,'catchText='+input.value+'&divID='+divID,divID,[],0);}// 不能秀等待圖示 }</pre> etable.php 中 做了兩次 $this->form->addElement(…) <pre>elseif($this->formType["$lc_name"][0]=='searchSelect'){ $this->form->addElement(new XoopsFormCatchText($this->listId.'f['.$this->fields[$i]['as_name'].']['.$this->fields[$i]['colname'].']')); $j=new XoopsFormSelect($this->fields[$i]['colalias'],'f['.$this->fields[$i]['as_name'].']['.$this->fields[$i]['colname'].']',$value,1,false,$this->listId.'f['.$this->fields[$i]['as_name'].']['.$this->fields[$i]['colname'].']',1); if($value){$j->addOptionArray(array($value=>$value));} // 如果已有值,加該值的選項(編輯表單用) else{$j->addOptionArray($this->formType["$lc_name"][1]);} // 如果未有值,加提示列(插入表單用) $this->form->addElement($j,(($this->fields[$i]['formValidate']==0)?'0':'1')); }</pre> formselect-et.php 中將選單 span 化 <pre>function render(){ $ret =$this->asSpan?"<span id='".$this->getId()."'>":"";// 若$asSpan,id 給span $ret .= "<select size='".$this->getSize()."'".$this->getExtra()."";</pre>
返回到
Etable/form/addElements
。
導航
個人工具
登入
名字空間
頁面
討論
變換
檢視
閱讀
檢視原始碼
檢視歷史
動作
搜尋
導覽
首頁
近期變動
隨機頁面
使用說明
工具箱
連入頁面
相關頁面修訂記錄
特殊頁面
頁面資訊