Home

2011年12月21日 星期三

PL/SQL Procedure 程序建立說明

From: Polin Wei

建立 PL/SQL Procedure

建立子程序的語法有以下幾個重點:

  • 語法是CREATE PROCEDURE,可加入OR REPLACE來自動取代現有的子程序。
  • IS為保留字。
  • 跟合法的區塊語法一樣,BEGIN和END也是必須的,但不用DECLARE來宣告,只要在CREATE PROCEDURE...IS 之後宣告即可。

當您提交一個CREATE PROCEDURE指令到SQL*Plus後,會發生以下事情:

  • 程式碼會儲存在Data Dictionary,無論程式碼是否解析成功,可以從VIEW:USER_OBJECTS 查詢。
  • 程式碼的語法會被解析,然後決定它是「合法」(VALID)還是「不合法」(INVALID)。
  • 如果是VALID,就會得到Procedure created的訊息,而子程序也可以被執行。
  • 如果是INVALID,就會得到錯誤訊息,這時子程序不可以被執行。

PL/SQL Procedure 建立的語法如下:
CREATE [OR REPLACE] PROCEDURE procedure_name
[ (parameter [,parameter]) ]
IS
[declaration_section]
BEGIN
executable_section
[EXCEPTION
exception_section]
END [procedure_name];


傳入的參數有三種型態:

  1. IN - The parameter can be referenced by the procedure or function. The value of the parameter can not be overwritten by the procedure or function.
  2. OUT - The parameter can not be referenced by the procedure or function, but the value of the parameter can be overwritten by the procedure or function.
  3. IN OUT - The parameter can be referenced by the procedure or function and the value of the parameter can be overwritten by the procedure or function.
參考: MIS Workplace By Polin Wei

2011年12月11日 星期日

透過杜邦等式(ROE)來分析財務績效

From: Polin Wei

透過ROE分解來分析財務績效良窳的原因,包括改善經營實力、減少閒置產能、 改變資本結構等。
杜邦等式提供了如何改進權益報酬率的方向,包括:
  1. 改善經營實力:擴大銷售額或加強成本控制→提高銷貨利潤邊際。
  2. 減少閒置產能:使各種資產盡可能發揮最大效率→提高總資產周轉率。
  3. 改變資本結構:「適度」地使用債權資金取代股本→提高權益乘數。
ROE-杜邦公式簡單推導



以成霖與橋椿來作分析,可以知道在 2008年(民97)美國的次級房貸所造成的金融風暴,對於衛浴設備生產的廠商來說有絶對的傷害.





ROE所需要的資料可以由網站取得所需財報資料,並將其分別複製到IS/BS及ISQ/BSQ四個工作表。
[IS] 市場情報 → 個股分析 → 財務分析 → 損益年表
[BS] 市場情報 → 個股分析 → 財務分析 → 資產負債年表
[ISQ] 市場情報 → 個股分析 → 財務分析 → 損益季表
[BSQ] 市場情報 → 個股分析 → 財務分析 → 資產負債季表

以上資料可以從下列網址下載:
國泰證券投資寶典 http://www.cathaysec.com.tw/marketinfo.htm
合作金庫金融網 http://tcb.moneydj.com/


參考網址:
http://www.wretch.cc/blog/tivo168/11729303

2011年7月26日 星期二

國際會計準則(IFRS) 相關訊息整理

From: Polin Wei

◆自2008年起,財務會計準則7號及25號公報要求企業一年兩次揭露合併報表

上市(櫃)公司則是按季揭露

◆在國際會計準則(IFRS)接軌之世界潮流壓力下,會計師不得再幫企業代編合併報表

報表相關會計科目定義說明:

【長期已實現跌價損失】:係指出售公司所持有之長期投資,或將公司之長期投資改列短期投資時,或該長期投資價格發生永久性跌價時於帳上所認列之損失。當股票從「長期投資」轉為「短期投資」,或從「短期投資」轉為「長期投資」時若市價低於成本,則應視為已實現之跌價損失,將成本降低至市價,並以市價做為新成本,至於帳上原有之長期投資未實現跌價損失」及「備抵長期投資跌價損失」之餘額亦於期末評價時再加以調整 。

【存貨持有損失】:購進存貨時,原則上均按成本入帳。在持有期間如市價(重置成本或淨變現價值)比成本低,在會計上應根據成本與市價孰低法,將帳面成本降低至市價,認列跌價損失,作為存貨持有損失,當市價回升時,應在備抵存貨跌價損失的限度內貸記(即沖銷)存貨跌價損失。

【權益法認列之投資損失】:係指被投資公司股東權益發生增減變化,投資公司應依投資比例增減投資之帳面面價值,並依其性質作為投資損益或損失。
在會計處理上,長期股權投資視投資之性質及影響力之大小,採用不同方法評價若股權在20%﹏50%之間,採權益法認列。

【未實現兌換損失】:係在財務報表中,轉換外幣項目的一種表達方法。依據我國財務會計準則公報第十四號規定,外幣財務報表換算為本國貨幣時,應以現時匯率換算之。所謂現時匯率,對資產負債科目而言,係指資產負債表日之匯率,對損益科目而言,係指損益認列日之匯率。惟實務上為簡便起見,損益科目可按加權平均匯率換算,無須逐筆按認列時之匯率換算。上述換算產生之兌換差額,因與國外營運機構由營業產生之現金流量無關,而僅與本國企業現金流量有間接關係,故通常不列為當其損益,而作為股東權益之調整項目。

2011年7月19日 星期二

Hyperion 9.3.1 Shared Services 無法啟動

From: Polin Wei

Recover OpenLDAP by using the following steps:

1. Stop all the services.
2. Take a backup of this folder:
Hyperion\SharedServices\9.3\openLDAP\var\openldap-data.
3. Remove/delete all files which do not have extension .bdb from:
Hyperion\SharedServices\9.3\openLDAP\var\openldap-data.
4. Copy the 'db_recover.exe' file from the following location:
Hyperion\Sharedservices\9.3.1\openLDAP\bdb
to
Hyperion\SharedServices\9.3\openLDAP\var\openldap-data

run the db_recover.bat 如下:

set OPENLDAP_DIR=D:\Hyperion\SharedServices\9.3.1\openLDAP
%OPENLDAP_DIR%\bdb\bin\db_recover -v -h %OPENLDAP_DIR%\var\openldap-data -t 04101200


5. Start the services


啟動順序為

net start "Hyperion S9 Apache 2.0"
net start "Hyperion S9 OpenLDAP"
net start "Hyperion S9 Shared Services"

ping 127.0.0.1 -n 30 -w 2000 > NUL

net start "Hyperion S9 BI+ 9.3 Core Services 1"

ping 127.0.0.1 -n 30 -w 2000 > NUL

net start "Hyperion S9 BI+ 9.3 Financial Reporting Java RMI Registry"
net start "Hyperion S9 BI+ 9.3 Financial Reporting Print Server"
net start "Hyperion S9 BI+ 9.3 Financial Reporting Report Server"
net start "Hyperion S9 BI+ 9.3 Financial Reporting Scheduler Server"
net start "Hyperion S9 BI+ 9.3 Financial Reporting Web application"
net start "Hyperion S9 BI+ 9.3 Workspace"

ping 127.0.0.1 -n 30 -w 2000 > NUL

net start "Hyperion S9 BI+ 9.3 Web Analysis"



停機的順序

net stop "Hyperion S9 BI+ 9.3 Web Analysis"

net stop "Hyperion S9 BI+ 9.3 Workspace"

net stop "Hyperion S9 BI+ 9.3 Financial Reporting Web application"
net stop "Hyperion S9 BI+ 9.3 Financial Reporting Scheduler Server"
net stop "Hyperion S9 BI+ 9.3 Financial Reporting Print Server"
net stop "Hyperion S9 BI+ 9.3 Financial Reporting Report Server"
net stop "Hyperion S9 BI+ 9.3 Financial Reporting Java RMI Registry"

net stop "Hyperion S9 BI+ 9.3 Core Services 1"

net stop "Hyperion S9 Shared Services"
net stop "Hyperion S9 OpenLDAP"
net stop "Hyperion S9 Apache 2.0"

2011年5月22日 星期日

解決XOOPS 安裝時出現"圖片資訊(exif)延伸套件無啟用的問題

From: Polin Wei

在 Windows XP 中安裝 AppServ v2.5.10 再安裝 XOOPS 出現 圖片資訊(exif)延伸套件無 啟用, 解決方法:修改 C:\WINDOWS\php.ini 檔案, 將 extension=php_exif.dll 移至 extension=php_mbstring.dll 下方即可...

2011年5月12日 星期四

開啟 Sharepoint Server 2010 多國語言網站介面

From: Polin Wei

SharePoint Server 2010中已經可以做到讓使用者及時的在目前所在的網站頁面中來切換顯示語系,也就是說大家不再需要因語系不同而分散在不同語系的網站中。作法很簡單,首先只要先連線到以下網址去下載所需要的語言套件,並且完成在伺服端的安裝。緊接著請在所要設定的網站頁面中,點選位在[網站動作]下拉選單的[網站設定]繼續。

1. Microsoft SharePoint Server 2010、Project Server 2010、Search Server 2010、Office Web Apps 2010多國語言套件下載網址:

http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=046f16a9-4bce-4149-8679-223755560d54
2. 接下來請在網站管理區域中點選[語言設定]連結繼續。請注意!在您還沒有安裝任何語言套件程式之前,在此的[語言設定]連結是不會出現的。
3. 在這個[語言設定]頁面中,可以看見已經額外安裝了英文與中文簡體的語言套件,在此將它們皆勾選之後點選[確定]繼續。
4. 完成以上設定之後,使用者在連線登入此網站時便可以像一樣在自己登入名稱的下拉選單中從[選取顯示語言]的子選單裡點選適合自己的語言了。

2011年4月29日 星期五

XOOPS Form 的表單設計

From: Polin Wei


XOOPS源碼分析之--表單組件淺析(一)

表單是幾乎所有WEB開發中都會用到的,生成表單的方法有很多,我先後用過的方法就很雜,有直接echo表單的html代碼 XOOPS居然有一套非常完善的form類,相比較而言XOOPS的表單類更容易使用,完全是面向對象的模式,而且代碼更為簡潔,控制更為靈活。這些表單類都保存在XOOPS_ROOT/class/xoopsform目錄下,有時間大家可以好好研習一下。從我目前理解的狀況來說,其中有2個是基類,一個是XoopsForm,一個是XoopsElement,其他都是對這2個基類的繼承和擴展。下面我們開始簡單的剖析其中幾個比較常用的類:


[一]表單的form類--form.php


文件定義了XoopsForm基類,XoopsSimpleForm、XoopsTableForm、XoopsThemeForm都是對這個對象的擴展。


1、XoopsForm對象的私有變量


* $_action :對應form中的action,即處理表單提交的操作;

* $_method :對應form中的method,即POST或是GET;

* $_name :對應form中name,即表單名;

* $_title :表單的標題;

* $_elements :表單成員數組,即form所包含的checkbox,text等元素;

* $_extra :這個變量會保存一些額外的信息,如class=「formclass」;

* $_required :這是個數組變量,保存著form中有哪些成員是必添項,結合Xoops自帶的腳本可以方便地在提交前實現必添字段的檢查


2、XoopsForm對象的成員函數


* function XoopsForm($title, $name, $action, $method="post", $addtoken=false)

XoopsForm對象的構造函數,前4個參數對照私有變量的命名很容易理解,其中默認的提交方法是"post",$addtoken這個布爾參數,控制是否要添加一個加密的令牌到form中,我理解是類似於給form增加一個sessionID,防止來自網站之外的惡意提交,默認情況是不添加這個令牌的。

* function getTitle() | function setTitle()

* function getName() | function setName()

* function getAction()| function setAction()

* function getMethod()| function setMethod()

這四組函數很容易理解,分別完成對title,Name,Action,Method的讀取(get)和設置(set).


* function addElement(&$formElement, $required=false)

這個函數是比較重要的,它完成form中元素的添加,$formElement是元素對象,$required設置是否這個元素為必添字段,即是否加入校驗隊列。

* function &getElements($recurse = false)

這個函數返回form中元素數組,$recurse根據源碼註釋是控制是否採取遞歸循環方式生成元素數組,因為這個函數一般比較少用,我沒仔細去理解它的源碼,不知道解釋得對不對。

* function getElementNames()

函數返回所有元素的名稱,返回值為數組

* function &getElementByName($name)

根據名稱返回相應的元素對象,找不到則返回false;我個人認為這個函數是非常有意義的,可以在已經添加元素後,對它進行修改,當然修改還要用到Element對象的函數。

* function setElementValue($name, $value)

此函數可以設置form名為$name元素的值,沒有返回值

* function setElementValues($values)

此函數實際上是上一函數的批處理,一次對form多個元素進行賦值,$values是$name/$value對的數組

* function &getElementValue($name)

獲得名為$name的form元素值,如果沒有設置則返回NULL。

* function &getElementValues()

是上一函數的批處理,返回$name/$value對數組。

* function setExtra($extra, $replace = false)

這個函數也是比較有用的,用於設置form中除name,method,action之外其他的標記,$replace控制是否覆蓋原有$_extra,默認為將$extra添加到原有$_extra後面,返回新的$_extra內容

* function &getExtra()

此函數讀取form的$_Extra內容。

* function setRequired(&$formElement)

此函數將&$formElement指向的元素添加到form對象的必添數組$_required中.

* function &getRequired()

此函數返回form對象的必添元素數組$_required

* function insertBreak($extra = null)

這是個抽像函數,需要在子類定義中覆蓋

* function display()

此函數用於表單最後的渲染輸出。

* function renderValidationJS( $withtags = true )

此函數用於Xoops表單內置校驗腳本的輸出,基本上不會用到。

* function assign(&$tpl)

此函數讓表單使用$tpl指向的smarty模板對象,來替代直接顯示輸出,或者說把現有的form對像傳遞到smarty模板中,由smarty完成最好的顯示輸出。

下面我們舉個簡單的例子來看看XoopsForm的基本使用流程


//第一步:包含XoopsForm的調用文件

include_once XOOPS_ROOT_PATH."/class/xoopsformloader.php";

//第二步:添加一個表單實例,這裡用的是比較常用的XoopsThemeForm,它採用一個table來安排表單佈局,如果我沒記錯,這個table的class=outer,也就是說你可以在css中更改outer的定義,美好表單的顯示。

$form = new XoopsThemeForm('標題', '名稱', 'action.php');

//第三步:加入文本元素,注意最後的true表示提交時檢查是否填寫了內容

$form->addElement(new XoopsFormText("姓名", 'name', 30, 70, $xoopsUser->name()), true);

//第四步:加入表單的提交按鈕

$form->addElement(new XoopsFormButton("", 'submit', "提交", 'submit'),0);

//第五步:加入驗證表單用的JavaScript腳本

$form->renderValidationJS();

//第六步:輸出表單

$form->display();


XOOPS源碼分析之--表單組件淺析(二)

也就是XoopsFormElement進行簡單分析,form中的checkbox,radio,等等組件都是對這個類的延展,所以弄清XoopsFormElement是如何定義的,將是又一個良好的開端。

表單元素的基類:XoopsFormElement (XOOPS_ROOT/class/xoopsform目錄下formelement.php)

1、XoopsElement對象的私有變量

* $_name:元素名稱;
* $_id :ID號;
* $_caption:顯示標題;
* $_accesskey:訪問此元素的快捷鍵;
* $_class :元素的樣式 classl;
* $_hidden:布爾值,定義是否為隱藏字段,默認為false;
* $_extra :元素額外的定義;
* $_required :布爾值,定義是否為必添字段,默認為false ;
* $_description :元素描述。

2、XoopsFormElement對象的成員函數

* function XoopsFormElement()

XoopsFormElemen對象的構造函數,其實什麼都沒定義,每種元素都有各自的定義。

* function getCaption() | function setCaption()
* function getName() | function setName()
* function getID()| function setID()
* function getAccessKey()| function setAccessKey()
* function getDescription() | function setDescription()
* function isHidden | function setHidden()
* function getExtra() | function setExtra()
* function getClass() | function setClass()

這八組函數很容易理解,分別完成對caption,Name,id,AccessKey,Description等屬性的讀取(get)和設置(set).

* function isContainer()

這個函數非常簡單,就是返回false,告訴你這個元素不是一個容器。

* function getAccessString( $str )

這個函數是會在$str字符串中尋找你定義的AccessKey,如果找到,就會將第一個找到的AccessKey字符底下畫線,說起來比較亂,大家打開軟件的文件菜單,你可以看到'新建(N)',對,就是這個意思。假定你設『N』是你的AccessKey,$str為'新建(N)',這個函數就負責返回給你'新建(N)',不知道我講明白了沒,呵呵。

* function render()

這個函數這裡講沒什麼意義,因為一行代碼都沒寫,

到這兒,XoopsFormElement對像講解就結束了,你肯定覺得這什麼都沒說啊,沒錯,我前面講了,這是個基類,也就搭個架子,具體的元素有各自的定義,基本上也就是在construct函數以及render函數上做文章,但也都是大同小異。

用法:(假定$form = new XoopsThemeForm('標題', '名稱', 'action.php');)

1. 直接引用form對像添加: $form->addElement(new 元素的構造函數, true/false); 2. 先定義元素,後添加到form對像中 $element=new 元素的構造函數; . -添加其他定義 . $form->addElement($element, true/false);


下面我們來看幾個常用的form元素的構造函數:

* 單行文本字段: function XoopsFormText($caption, $name, $size, $maxlength, $value="", $id = "")

參數含義依次為:標題,form中名稱,顯示寬度(單位為字符數),最大字符數,文本值,ID號。

* 多行文本字段: function XoopsFormTextArea($caption, $name, $value="", $rows=5, $cols=50, $id = "")

參數含義依次為:標題,form中名稱,文本值,顯示行數,顯示列數,ID號。

* 文本標籤:function XoopsFormLabel($caption="", $value="")

參數含義依次為:標題,值。

* 選擇列表:function XoopsFormSelect($caption, $name, $value=null, $size=1, $multiple=false, $id="")

參數含義依次為:標題,名稱,默認被選擇的值,顯示大小(如果為1,則顯示為下拉框,其他為N行的列表框),是否為多選,ID; XoopsFormSelect對像還有幾個非常重要的私有屬性,$_options和$_disabled(xoops2.2開始變為數組),其中$ _options是選項value->name對值數組,而$_disabled則定義有哪些不可以選,就是value數組, XoopsFormSelect對象可以參照用法2,使用函數addOptionArray($options, $disabled = array())來添加選項數組和非可選數組的2個定義。

* 多選框:function XoopsFormCheckBox($caption, $name, $value = null, $id = "")

參數含義依次為:標題,名稱,默認被選中的值數組,ID;同樣XoopsFormCheckBox也有$_options 屬性,為value->name 數組,也需要用addOptionArray($options)函數添加選項數組或是addOption($value, $name="")來添加一個選項。

* 單選框:function XoopsFormRadio($caption, $name, $value = null, $id = "")

XoopsFormRadio與XoopsFormCheckBox極為相似,所不同的是XoopsFormCheckBox的$value是數組,而XoopsFormRadio的則是一個值,添加選項的函數是完全一樣的。

* 隱藏字段:function XoopsFormHidden($name, $value, $id="")

參數含義依次為:名稱,默認值,ID,比較簡單

* 密碼字段:function XoopsFormPassword($caption, $name, $size, $maxlength, $value="")

參數含義依次為:標題,form中名稱,顯示寬度(單位為字符數),最大字符數,文本值;與單行文本字段在操作上沒有任何區別;

* 安全令牌: function XoopsFormHiddenToken($name = 'XOOPS_TOKEN_REQUEST', $timeout = 0)

這個字段應該不需要用到,如果你在創建form對像時,定義$addtoken=true,form對像會自己調用這個函數添加一個$name = 'XOOPS_TOKEN_REQUEST'的隱含字段。

* 按鈕:function XoopsFormButton($caption, $name, $value="", $type="button", $id="")

構造按鈕的5個參數含義依次是:顯示文字,form中的名字,按鈕的值,按鈕類型(buttion/submit/reset 3個值,默認為button),ID號;默認情況下按鈕的css 設定為「formButton」。


OK,到這兒,XoopsForm對象的常用元素就描述完了。
XoopsForm的這些元素如何使用

//第一步:包含XoopsForm的調用文件 include_once XOOPS_ROOT_PATH."/class/xoopsformloader.php";

//第二步:添加一個表單實例,這裡用的是比較常用的XoopsThemeForm,它採用一個table來安排表單佈局,如果我沒記錯,這個table的class=outer,也就是說你可以在css中更改outer的定義,美好表單的顯示。 $form = new XoopsThemeForm('更改用戶資料', 'changeUserInfo', 'action.php');

//3.1 加入標籤元素 $form->addElement(new XoopsFormLable("ID", "1033"), false);

//3.2 加入文本元素,注意最後的true表示提交時檢查是否填寫了內容 $form->addElement(new XoopsFormText("用戶名", 'username', 30, 70, $xoopsUser->name()), true);

//3.3 加入密碼元素,注意最後的true表示提交時檢查是否填寫了內容 $form->addElement(new XoopsFormPassword("更改密碼", 'newpassword', 30, 70, ""), true);

//3.4 加入多行文本元素,注意最後的true表示提交時檢查是否填寫了內容 $form->addElement(new XoopsFormTextArea("簽名", 'name', 30, 70, ""), true);

//3.5 加入多選字段元素,注意最後的true表示提交時檢查是否填寫了內容 $checkbox=new XoopsFormCheckBox("興趣", "intresting", null, $id = ""); $checkbox->addOption('0','讀書'); $checkbox->addOptions(array('1'->'繪畫','2'->'書法','3'->'音樂'); $checkbox->setValue(array('1','2')); //set 默認選中選項 $form->addElement($checkbox, true);

//3.6 加入單選字段元素,注意最後的true表示提交時檢查是否填寫了內容 $radio=new XoopsFormRadio("是否願意接收網站郵件", "receiveMail", 'y', $id = ""); $radio->addOptions(array('y'->'是','n'->'否'); $form->addElement($checkbox, true);

//3.7 加入select元素,注意最後的true表示提交時檢查是否填寫了內容 $countryOptions=array('0'->'請選擇您的國家','1'->'china','2'->'USA','3'->'France',4->'Other'); $disabled=array(1->'0'); $defaultCounty=; $countrySelect= new XoopsFormSelect('國家', 'CountryID',$defaultCounty, $size=1, $multiple=false); $countrySelect->addOptionArray($countryOptions,$disabled); $form->addElement($countrySelect, true);

//3.8 加入隱含字段 $form->addElement(new XoopsFormHidden("action", "modify"),false);

//第四步:加入表單的提交按鈕 $form->addElement(new XoopsFormButton(, 'submit', "提交", 'submit'),false);

//第五步:加入驗證表單用的JavaScript腳本 $form->renderValidationJS();

//第六步:輸出表單 $form->display();
表單物件列表

* 引入表單物件會用到的檔案

include_once XOOPS_ROOT_PATH."/class/xoopsformloader.php";

* 新增一個表單物件實例,第一個參數是標題名稱,第二個參數是表單名稱,第三個參數是表單送出後執行的程式,第四個參數表單傳送方式。

$form = new XoopsThemeForm("表單標題", 'form', "action.php", 'post', true);
//XoopsThemeForm( string $title, string $name, string $action, string $method = "post" );

* 加入一個欄位

$form->addElement(新增的實體欄位new XoopsFormXXX , 是否必填true or false );

* 加入標籤

$form->addElement(new XoopsFormLabel("標籤標題", "標籤值"));
//XoopsFormLabel($caption="", $value="");

* 加入文字欄位

$form->addElement(new XoopsFormText("文字欄位標題", "text_name", 35, 255, "預設值"));
//XoopsFormText( string $caption, string $name, int $size, int $maxlength, string $value = "" )

* 加入隱藏欄位

$form->addElement(new XoopsFormHidden('op', 'save'));
//XoopsFormHidden($name, $value);

* 加入TOKEN REQUEST

$form->addElement(new XoopsFormHiddenToken('XOOPS_TOKEN_REQUEST',360));
//XoopsFormHiddenToken($name = 'XOOPS_TOKEN_REQUEST', $timeout = 360);

* 加入上傳欄位

$form->setExtra("enctype='multipart/form-data'");
$form->addElement(new XoopsFormFile('上傳欄位標題', 'File_name', "2048"));

* 加入密碼欄位

$form->addElement(new XoopsFormPassword('密碼欄位標題', 'Password_name', 20, 255, "1234"));
//XoopsFormPassword($caption, $name, $size, $maxlength, $value="");

* 加入文字方塊

$form->addElement(new XoopsFormTextArea("文字方塊標題", 'field_description', "預設值",5,50,));
//XoopsFormTextArea($caption, $name, $value="", $rows=5, $cols=50, $id = "");

* 加入Dhtml編輯框

$form->addElement(new XoopsFormDhtmlTextArea("編輯框標題", 'DhtmlTextArea_name', , 5, 50, "xoopsHiddenText"));
//XoopsFormDhtmlTextArea($caption, $name, $value, $rows=5, $cols=50, $hiddentext="xoopsHiddenText");

若想改成 TinyMCE

//$textarea = new XoopsFormDhtmlTextArea(_AM_CONTENT, 'bcontent', $block['content'], 15, 70);
if ( is_readable(XOOPS_ROOT_PATH . "/class/xoopseditor/tinymce/formtinymce.php")) {
include_once(XOOPS_ROOT_PATH . "/class/xoopseditor/tinymce/formtinymce.php");
$textarea = new XoopsFormTinymce(array('caption'=>_AM_CONTENT, 'name'=>'bcontent', 'value'=>$block['content'], 'width'=>'100%', 'height'=>'400px', 'xEditor'=>'1'));
}else{
$textarea = new XoopsFormDhtmlTextArea(_AM_CONTENT, 'bcontent', $block['content'], 15, 70);
}

若想改成 FCKeditor

//$textarea = new XoopsFormDhtmlTextArea(_AM_CONTENT, 'bcontent', $block['content'], 15, 70);
if ( is_readable(XOOPS_ROOT_PATH . "/class/xoopseditor/fckeditor/formfckeditor.php")) {
include_once(XOOPS_ROOT_PATH . "/class/xoopseditor/fckeditor/formfckeditor.php");
$textarea = new XoopsFormFckeditor(array('caption'=>_AM_CONTENT, 'name'=>'bcontent', 'value'=>$block['content'], 'width'=>'100%', 'height'=>'400px', 'xEditor'=>'1'));
}else{
$textarea = new XoopsFormDhtmlTextArea(_AM_CONTENT, 'bcontent', $block['content'], 15, 70);
}

若想改成 Koivi

//$textarea = new XoopsFormDhtmlTextArea(_AM_CONTENT, 'bcontent', $block['content'], 15, 70);

if ( is_readable(XOOPS_ROOT_PATH . "/class/xoopseditor/koivi/formwysiwygtextarea.php")) {
include_once(XOOPS_ROOT_PATH . "/class/xoopseditor/koivi/formwysiwygtextarea.php");
$textarea = new XoopsFormWysiwygTextArea(array('caption'=>_AM_CONTENT, 'name'=>'bcontent', 'value'=>$block['content'], 'width'=>'100%', 'height'=>'400px', 'xEditor'=>'1'));
}else{
$textarea = new XoopsFormDhtmlTextArea(_AM_CONTENT, 'bcontent', $block['content'], 15, 70);
}

* 加入送出與清除按鈕與同一欄

$Tray1=new XoopsFormElementTray("按鈕標題", " ", "name", true);
$Tray1->addElement(new XoopsFormButton(, 'submit_name', "送出", 'submit'));
$Tray1->addElement(new XoopsFormButton(, 'reset_name', "清除", 'reset'));
$form->addElement($Tray1);
//XoopsFormButton(str $caption, str $name, bool $value="", button|submit|reset $type="button")

* 加入核取方塊

//第一個參數為標題,第二個參數為表單欄位名稱,第三個參數可設定選取單一選項
$checkbox = new XoopsFormCheckBox('複選方塊標題', 'box_name', "k1","");
//XoopsFormCheckBox($caption, $name, $value = null, $id = "")
$checkbox->addOption("a1", "顯示值1");
//多重預設值設定
$def_arr=array("k1","k4");
$checkbox->setValue($def_arr);
$options["k2"]="顯示值2";
$options["k3"]="顯示值3";
$options["k4"]="顯示值4";
$checkbox->addOptionArray($options);
$form->addElement($checkbox);


* 加入單選鈕

//第一個參數為標題,第二個參數為表單欄位名稱,第三個參數可設定預設選取選項
$Radio = new XoopsFormRadio('單選鈕標題', 'radio_name', "w1","");
$Radio->addOption("w1", "顯示值1");
$Roptions["w2"]="顯示值2";
$Roptions["w3"]="顯示值3";
$Roptions["w4"]="顯示值4";
$Radio->addOptionArray($Roptions);
$form->addElement($Radio);

* 加入是否單選鈕

第三個參數為預選值, "0" (No) 或 "1" (Yes)
$form->addElement(new XoopsFormRadioYN('是否單選鈕標題', 'radioYN_name', 1));

* 加入下拉選單

//參數一:標題、參數二:選單欄位名稱、參三:單一預設值,參四:選單長度,參五:是否多重
$select=new XoopsFormSelect("下拉選單標題", "select_name", "s2", 2, true);
//XoopsFormSelect($caption, $name, $value=null, $size=1, $multiple=false);
$select->addOption("s1", "顯示值1", true);
//addOption($value, $name="", $disabled = false) ;
$Soptions["s2"]="顯示值2";
$Soptions["s3"]="顯示值3";
$Soptions["s4"]="顯示值4";
$Soptions["s5"]="顯示值5";
$Soptions["s6"]="顯示值6";
$Soptions["s7"]="顯示值7";
$select->addOptionArray($Soptions);
//addOptionArray($options, $disabled=array());
//多重預選陣列
$sdef_arr=array("s6","s4");
$select->setValue($sdef_arr);
$form->addElement($select);

* 加入文字日期欄位

$form->addElement(new XoopsFormTextDateSelect('文字日期欄位標題', 'textDateSelect_name', 15, 0));
//XoopsFormTextDateSelect($caption, $name, $size = 15, $value= 0);

* 加入日期時間

$form->addElement(new XoopsFormDateTime("日期時間框標題", 'DateTime_name', 15, 0));
//XoopsFormDateTime( mixed $caption, mixed $name, mixed $size = 15, mixed $value = 0 );

範例

if ($_POST['op']=='save') {
echo 'Will SAVE:
';
echo "姓名:".$_POST['name'].'
';
echo "電子郵件:".$_POST['email'].'
';
$html=1;
$smiley=1;
$xcodes = 1;
$myts =&MyTextSanitizer::getInstance();
$message = $myts->displayTarea($_POST['message'],$html,$smiley,$xcodes);
echo "訊息:".$message.'
';
} else {
$contact_form=creat_form();
echo $contact_form;
}
function creat_form() {
//引入表單物件會用到的檔案
include_once XOOPS_ROOT_PATH."/class/xoopsformloader.php";
//新增一個表單物件實例,第一個參數是標題名稱,第二個參數是表單名稱,第三個參數是表單送出後執行的程式
$form = new XoopsThemeForm('留下消息', 'contactform', $_SERVER['PHP_SELF']);
//加入一個文字列
$form->addElement(new XoopsFormText("姓名", 'name', 30, 70, 'test'), true);
//加入一個文字列
$form->addElement(new XoopsFormText("電子郵件", 'email', 40, 90, 'test@edu.tw'), false);
//加入一個文字方塊,第一個參數是標題名稱,第二個參數是表單名稱
$form->addElement(new XoopsFormDhtmlTextArea("訊息", 'message', , 12, 35), true);
//TOKEN
$form->addElement(new XoopsFormHiddenToken('XOOPS_TOKEN_REQUEST',2));
//Hidden
$form->addElement(new XoopsFormHidden('op', 'save'));
//加入送出表單的按鈕
$form->addElement(new XoopsFormButton('操作', 'submit', "送出", 'submit'),0);
//加入驗證表單用的JavaScript程式
$form->renderValidationJS();
return $form->render();
}

參考:http://163.30.191.22/wiki/index.php/XOOPS的表單設計

2011年4月23日 星期六

Android 在 Eclipse 開發環境的設定

From: Polin Wei

Android 開發環境下載:

JDK:
http://www.oracle.com/technetwork/java/javase/downloads下載 Java SE 6 Update xx 的 JDK jdk-6uxx-windows-i586.exe,其中 xx 代表 JDK 在版本 6 的第 xx 的小版本

Eclipse:
http://www.eclipse.org/downloads/下載 Eclipse IDE for Java Developers 的 Java 整合開發平台,並解開壓縮檔在 D:\Progs\eclipse

Android SDK:
http://developer.android.com/sdk 下載 android-sdk_rxx-windows.zip ,檔案名的 xx 代表 SDK 的版本,並解開壓縮檔在 D:\Progs\android-sdk

Android 開發環境設定

Android:
1. 使用 D:\Progs\android-sdk\SDK Manager.exe 在 Available packages 裡有 Android Resposity 及 Third party Add-one 兩個目錄可供下載開發 Android 所需的 Package

Eclipse:
1. Downloading the ADT Plugin:

a. Help/Install New Software.../
b. Click Add, in the top-right corner.
c. In the Add Repository dialog that appears, enter "ADT Plugin"
Name:Android ADT Plugin
Location:https://dl-ssl.google.com/android/eclipse/
按 OK.
Note: 如果有安全顧忌,可以用 https 的 URL 來替代 http URL ( http://dl-ssl.google.com/android/eclipse/).

d. In the Available Software dialog, select the checkbox next to Developer Tools and click Next.
e. In the next window, you'll see a list of the tools to be downloaded. Click Next.
f. Read and accept the license agreements, then click Finish.
When the installation completes, restart Eclipse.


2. 選擇 Windows/Preferences/Android/SDK Location 設為 D:\Progs\android-sdk
3. 選擇 Windows/Android SDK and AVD Manager 建一個開發用的手機模擬器( Emulator)
Name:WVGA400
Target:Android 2.1-update1 - API level 7
SD Card: 256 MiB
Skin: Built-in : WQVGA400

這樣即完成開發 Android 手機程式的設定

Troubleshooting 疑難解答:

執行時發生錯誤訊息:emulator-5554 disconnected! Cancelling 'com.micro.AlertDemo activity launch'!
解決方法:
+ solution : before message like "emulator-5554 disconnected! Cancelling " go to Eclipse IDE/window/Show Views /device/view menu/reset adb

2011年2月6日 星期日

Travian(部落戰爭)外掛

From: Polin Wei

★說明:以下所介紹的插件必須使用FireFox瀏覽器才可執行

於Firefox瀏覽器中打開Addons(附加元件)的安裝頁面

GreaseMonkey安裝網址:https://addons.mozilla.org/zh-TW/firefox/addon/748

Note:點選『新增至 Firefox』,等待讀秒結束,按下立即安裝即可

以下為 Travian 各項外掛介紹:

【插件名稱】:Travian AutoTask NonPause Edited 1.2.5.0 (點我安裝) 可在 Travian 3.5 執行
【插件官網】: http://userscripts.org/scripts/show/70967
【推薦星級】:★★★★
【功能介紹】:排程工具, 自然就是針對各項升級項目預做設定

【插件名稱】:Travian3 Beyond - ML&CN FX (For V3.6)
【作者名稱】:ms99
【推薦星級】:★★★★
【功能介紹】:此插件的功能強大到不行,裝了簡直如有神助呀,可說是玩Travian必裝的插件~

【插件名稱】:Travobotto
【作者名稱】:Travobotto Developer
【推薦星級】:★★★
【圖文功能介紹】:同為顯示資源的小插件,但是多了Hide的功能,不用時可以收起來,感覺挺方便的

【插件名稱】:Travian Map Analyser 
【作者名稱】:Booboo
【推薦星級】:★★★★
【圖文功能介紹】:主要在於『神田』的搜尋(可以不同需求條件尋找),拓荒者行進的時間計算,還提供紀錄功能,蠻方便的一個插件~


【插件名稱】:Travian: Troop Saver - CFK 
【作者名稱】:HikariWS
【推薦星級】:★★★★★
【圖文功能介紹】:這次更新的超重點插件!自動FS插件~~~先預設好座標,當敵軍來襲時,在剩餘幾秒的時間內自動出兵,敵軍抵達返回後,自動撤兵回城,只能說真是太黯然太銷魂了~~

【插件名稱】:Farming Machine for Travian 3.6
【作者名稱】:Denveroid / museau27 / ScratchZ
【插件官網 - 較新版 - 1】:http://userscripts.org/scripts/show/74149
【插件官網 - 較新版 - 2】:http://userscripts.org/scripts/show/72785
【推薦星級】:★★★★☆
【圖文功能介紹】:這款也是有相當歷史的單純牧羊工具(中間維護&繼續開發的也經歷了不少人),基本就是先從地圖上加入預定的牧羊點,然後在城內集結點開啟/關閉程式;建議使用時把Travian3 Beyond - ML&CN關閉,否則可能無法使用

【插件名稱】:Travian User Activity from travian-utils.com + Multi Language
【作者名稱】:Dream1
【推薦星級】:★★★★
【圖文功能介紹】:還在手動查詢附近羊咩咩的生態嗎?點到誰,就可以查到誰,完全不費吹灰之力,資料在選擇的玩家他的『玩家資料』下方可以看到~

【插件名稱】:Travian resource bar in right menu (S) 
【作者名稱】:Serj_LV
【推薦星級】:★★
【圖文功能介紹】:簡易的資源長條圖插件。

【插件名稱】:Travian-AI (TW/HK for TravianV3.6)
【作者名稱】:Euglena
【推薦星級】:★★★★
【圖文 功能介紹】:一樣推薦他的資源&建築升級排程,也是有自動造兵功能,唯一缺點是必須停在「玩家資料」頁面,才可以正常使用

【掛外名稱】:Traviant Actics
【插件官網】:http://www.traviantactics.com/Download.php
【推薦星級】:★★★

【掛外名稱】:travian-bot
【插件官網】:http://www.travian-bot.com/index.php/travian-bot-download
【推薦星級】:★★★
【圖文 功能介紹】:試用於 Travian 4 ,要先安裝 .NET Framework v.4 ;可離線自動升級資源及建築物

攻手類型概分為:

攻手:
先鋒(拆牆手):強大的英雄+騎士步兵比1:3+300以上衝車,負責第一波拆牆。
清兵手 :英雄+全步兵,負責與防守方等價交換兵力,消耗或清除防守方剩餘戰力。
車手 :少量的騎兵+大量的車子,會使用多波同秒技術,中後期逐漸提升競技場。
游擊手 :負責打擊敵人分村、綠洲、分帳或是弱小的敵盟友。
嘴砲手 :負責最後一波,CON村動作,通常為農夫玩家擔任。
快攻手 :強大的英雄+大量的騎兵,負責搬資源用。
核彈手 :經驗豐富且低調的玩家。

防手:
防禦手
防禦手完全不需要攻擊兵,當專精的就夠了
要有保護"主力盟友"優先的那種心態
自身不建議太突出,降低被打的機會
若再戰期無法拿出防兵,那有就跟沒有一樣了

灰區的蓋法 推薦的建築務和等級
1. 村大3級 << 若是到5級的話可以蓋到麵粉廠 和行宮
2.集結點 1
3.倉庫 5
4.米倉 3
5.市場 2
6.行宮 1
7.英雄館 1
8.兵營 3 < 研究院
9.研究院 1
10 兵工廠 1
11 大使館 1
12山洞 10
13 +9個 一級山洞

以上總共21個建築物