2008.03.15 Saturday
PHPのXML-XSLベースの基本画面
ソースコードはSJISを想定しています
<? //******* XMLベースのフォーム作成雛形 *********** //機能はノードの追加と削除と編集 //保存ファイルは[スクリプト名]+.xml(無い不正であれば作成) // //又フォームを作成するにはXSLTを利用すれば一度でできる //多くのリクエストがある場合は重くなる //<root><row index="aaa"/></row index="bbb"/> //▼▼****** 定数定義等・前処理 *******▼▼ $dataFile = $_SERVER['SCRIPT_FILENAME'].'.xml'; //▲▲****** 定数定義等・前処理 *******▲▲ //▼▼********* メイン処理 ************▼▼ //▽▽***** データの読み込み ********▽▽ //$domData $domData = new DOMDocument('1.0','Shift_JIS'); $domData->async = false; //データファイルがある場合は読み込み }; //デフォルトのデータ作成 $domData = new DOMDocument('1.0','Shift_JIS'); $node = $domData->createElement('root'); $domData->appendChild( $node ); } //△△***** データの読み込み ********△△ //▽▽********* CGI操作部 **********▽▽ //$domXSL.... 出力フォームの選択 //(1)項目の追加ボタン if ($_REQUEST['btn_add']){ //登録が無いかを調べる $str = $_REQUEST['txt_item']; $xpath = new DOMXPath( $domData ); if ($nodes->length == 0){ $node0 = $domData->createElement('row'); $domData->firstChild->appendChild($node0); // $domData->save( $dataFile );//保存 // addNode(&$domData,'mess',$str.$_REQUEST['txt_item']." を追加しました"); } else { addNode(&$domData,'mess',$str.$_REQUEST['txt_item']." は存在します"); } }; //(2)項目の削除ボタン if ($_REQUEST['btn_del']){ $xpath = new DOMXPath( $domData ); $str = $_REQUEST['txt_id']; if ($nodes->length > 0) { foreach($nodes as $node){ $node->parentNode->removeChild( $node ); }; $domData->save( $dataFile );//保存 // addNode(&$domData,'mess',$str."を削除しました"); } else { addNode(&$domData,'mess',$str."存在しません"); } }; //(3)項目の編集ボタン if ($_REQUEST['btn_edit']){ $xpath = new DOMXPath( $domData ); $str = $_REQUEST['txt_id']; foreach($nodes as $node){ }; $domData->save( $dataFile );//保存 // addNode(&$domData,'mess',$str.'を編集しました'); }; //(4)画面表示用のパラメタとか addNode(&$domData,'url',$_SERVER['SCRIPT_NAME']); //フォームが選択されていなければデフォルト //△△********* CGI操作部 **********△△ //▽▽********** HTML出力 ***********▽▽ $xslt = new XSLTProcessor(); $xslt->importStyleSheet( $domXSL ); //△△********** HTML出力 ***********△△ //▲▲********* メイン処理 ************▲▲ //▼▼*********** 関数定義 ************▼▼ //******** ルートノードへの追加 ********* function addNode($dom,$tag,$mess) { $node = $dom->createElement( $tag ); $dom->firstChild->appendChild($node); } //********** 1.フォームの定義 *********** function domForm0(){ $dom = new DOMDocument('1.0','Shift_JIS'); $dom->async = false; $xsl = <<<__EOF__ <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" encoding="Shift_JIS" omit-xml-declamention="no" indent="no"/> <xsl:template match="/"> <html> <meta http-equiv="Content-Type" Content="text/html; Charset=Shift_JIS"/> <body> <a href="{/root/url/@text}">データ登録</a><br/> <table border="1"> <tr><th>NO</th><th>名前</th><th>操作</th></tr> <xsl:for-each select="/root/row"> <tr> <form method="POST"><input type="hidden" name="txt_id" value="{@index}"/> <td><xsl:value-of select="position()"/></td> <td> <input type="text" name="txt_item" size="30" value="{@index}"/> </td> <td> <input type="submit" name="btn_del" value="削除"/> <input type="submit" name="btn_edit" value="変更"/> </td> </form> </tr> </xsl:for-each> <tr> <form method="POST"> <td>新</td> <td><input type="text" size="30" name="txt_item"/></td> <td><input type="submit" value="追加" name="btn_add"/></td> </form> </tr> </table> <xsl:if test="/root/mess"> <hr/> </xsl:if> </body> </html> </xsl:template> </xsl:stylesheet> __EOF__; $dom->loadXML( XMLDEF_SJIS.$xsl); return $dom; }; //▲▲*********** 関数定義 ************▲▲ ?>
整形はhttp://qbnz.com/highlighter/