Vosegus Sakura

PHPでつくるごく単純なCMSの設計

作成日:2008年12月03日

Vosegus Labs

優れたPHPプログラマになるための15 章

初めてのPHP5

プログラミングPHPウェブアプリケーション開発の定番言語であるPHP言語を、言語仕様から実用的なプログラミングテクニックまで詳細に解説。PHP言語を扱うすべてのユーザのための本格的解説書。

基本設計

機能

処理の流れ

ディレクトリ構造

/mng/all.php全HTMLファイルの更新ページ
/mng/create.php新規HTMLファイル作成ページ
/mng/edit.php既存HTML編集ページ
/mng/import.php 既存CSS編集ページ - 既存JavaScript編集ページ
/mng/edit_tmp.phpテンプレートファイルの編集ページ
/mng/upload.phpファイルアップロードページ
/mng/list.php管理ファイル一覧ページ
/mng/complete.php処理終了メッセージページ
/output/ファイル出力ディレクトリ
/output/mng.xmlファイル・コンテンツ情報XML
/output/skin.cssスタイルシート(デフォルト)
/output/add_event.jsJavaScript(デフォルト)

このページの上部へ

POSTで送信するヘッダデータの対応表

新規HTMLファイル作成ページ

$_POST['title']ページタイトル
$_POST['contents']コンテンツ
$_POST['file-path']書出すファイルのパス
$_POST['put-type']リクエストの処理を分岐

既存HTML編集ページ

$_POST['title']ページタイトル
$_POST['contents']コンテンツ
$_POST['file-path']書出すファイルのパス
$_POST['node-num']既存ノードの番号
$_POST['put-type']リクエストの処理を分岐

既存CSS編集ページ - 既存JavaScript編集ページ

$_POST['code']コード
$_POST['put-type']リクエストの処理を分岐

ファイルアップロードページ

$_POST['up-file']コード

管理ファイル一覧ページ

$_POST['mng-file[n]']コード
$_POST['put-type']リクエストの処理を分岐

このページの上部へ

テンプレートとなるHTMLの構造

<?xml version="1.0" encoding="utf-8" ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <title>{title}</title> <link type="text/css" href="output/skin.css" rel="stylesheet" /> <script type="text/javascript" src="output/add_event.js"></script> </head> <body> <div id="header"></div> <div id="contents"> <h1>{title}</h1> <div id="contents-inner">{description}</div> </div> <div id="footer"></div> </body> </html>

このページの上部へ

ファイル操作・管理用 HTML PHP

共通で使用

<?php /************************** XMLファイルの読み込み **************************/ //XMLノード情報を格納する多次元配列を宣言 $html_resource = array(); $files = array(); //DOMオブジェクト生成 $document = new DomDocument('1.0'); //XML読み込み $xml_path = '../output/mng.xml'; $document -> Load($xml_path); //XMLノードを配列に格納 //ルート $root_node = $document -> getElementsByTagName('resource'); //テンプレートノード $tmp_node = $document -> getElementsByTagName('tmp-text'); //ヘッダーノード $header_node = $document -> getElementsByTagName('header'); //フッターノード $footer_node = $document -> getElementsByTagName('footer'); //HTMLリソース $resource_node = $document -> getElementsByTagName('html-resource'); //アイテム $item_node = $document -> getElementsByTagName('item'); //ページタイトル $title_node = $document -> getElementsByTagName('title'); //コンテンツ $description_node = $document -> getElementsByTagName('description'); //ファイルパス $link_node = $document -> getElementsByTagName('link'); //アップロードファイル情報 $file_node = $document -> getElementsByTagName('upload-file'); //アップロードファイル情報 $files_node = $document -> getElementsByTagName('file'); //XMLから読み込んだHTMLの情報を多次元配列に格納 for ($i = 0; $i < $item_node -> length; $i++) { $array_item = $item_node -> item($i) -> nodeValue; $array_title = $title_node -> item($i) -> nodeValue; $array_description = $description_node -> item($i) -> nodeValue; $array_link = $link_node -> item($i) -> nodeValue; //(アイテム,ページタイトル,コンテンツ,ファイルパス,識別番号) $html_resource[$i] = array($array_item,$array_title,$array_description,$array_link,$i); } //XMLから読み込んだアップロードファイルの情報を多次元配列に格納 for ($i = 0; $i < $file_node -> length; $i++) { $array_file = $file_node -> item($i) -> nodeValue; //(ファイルパス,識別番号) $files = array($array_file,$i); } /************************** HTMLファイルとXMLノードの書き出し **************************/ //HTMLファイルの書き出し(ページタイトル,コンテンツ,ファイルパス) function put_html($put_title,$put_description,$put_path){ // テンプレートファイルを読み込み、文字列を引数で置換 $html = file_get_contents("template.html"); $html = str_replace('{title}',$put_title,$html); $html = str_replace('{contents}',$put_description,$html); //置換した文字列でファイルを書き出す $create_file = fopen($put_path ,"wb+"); fwrite($create_file ,$html); fclose($create_file); } //XMLファイルの書き出し(ファイルの有無(y or n),num,title,description,link) function append_xml($or,$xml_num,$xml_title,$xml_description,$xml_link){ global $xml_path; global $document; global $resource_node; global $item_node; //create node $create_item_node = $document -> createElement("item"); $create_title_node = $document -> createElement("title",$xml_title); $create_descriptin_node = $document -> createElement("description",$xml_description); $create_link_node = $document -> createElement("link",$xml_link); //appenChild $create_item_node -> appendChild($create_title_node); $create_item_node -> appendChild($create_descriptin_node); $create_item_node -> appendChild($create_link_node); //remove append //ノードが既に有る if($or == 'y'){ $resource_node -> item(0) -> appendChild($create_item_node); $resource_node -> item(0) -> removeChild($item_node -> item($xml_num)); }else if($or == 'n'){//ノードが無い $resource_node -> item(0) -> appendChild($create_item_node); } //ファイルを保存 $document -> save($xml_path); } //XMLファイルの書き出し(アップロードファイル) function append_xml_upload($upfile_name){ global $xml_path; global $document; global $file_node; //create node $create_file_node = $document -> createElement("file",$upfile_name); $file_node -> item(0) -> appendChild($create_file_node); $document -> save($xml_path); } /************************** HTMLファイルとXMLノードの削除 **************************/ //HTMLファイルの削除(ファイルパス) function delete_html($delete_file){ unlink($delete_file); } //XMLノードの削除(ノード番号) function delete_item_node($del_num){ global $xml_path; global $document; global $resource_node; global $item_node; global $link_node; unlink($link_node -> item($del_num) -> nodeValue); $resource_node -> item(0) -> removeChild($item_node -> item($del_num)); //ファイルを保存 $document->save($xml_path); } function delete_file_node($delete_num){ global $xml_path; global $document; global $file_node; global $files_node; unlink($files_node -> item($del_num) -> nodeValue); $file_node -> item(0) -> removeChild($files_node -> item($delete_num)); //ファイルを保存 $document->save($xml_path); } function delete_tmp($node_type,$value){ global $xml_path; global $document; global $tmp_node; global $header_node; global $footer_node; //ヘッダー更新 if($node_type == "h"){ $create_header_node = $document -> createElement("header",$value); $tmp_node -> item(0) -> removeChild($header_node -> item(0)); $tmp_node -> item(0) -> appendChild($create_header_node); } //フッター更新 if($node_type == "f"){ $create_footer_node = $document -> createElement("footer",$value); $tmp_node -> item(0) -> removeChild($footer_node -> item(0)); $tmp_node -> item(0) -> appendChild($create_footer_node); } //ファイルを保存 $document -> save($xml_path); } ?>

このページの上部へ

HTMLファイルの新規作成

<?php require_once('global.php'); //XML宣言 print '<?xml version="1.0" encoding="UTF-8" ?>'; ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title>Simple CMS</title> <link href="mng.css" type="text/css" rel="stylesheet" /> <script type="text/javascript" src="event.js"></script> </head> <body id="create"> <h1>Simple CMS<span> - HTMLファイルの新規作成</span></h1> <?php include("nav.inc");?> <div id="form-area"> <p id="erroe"></p> <form action=" complete.php" method="post" onsubmit="return create_submit_check(this)" > <input type="hidden" name="put-type" value="newfile" /> <ul> <li><label for="page-title">ページタイトル</label> <span><input type="text" name="page-title" id="page-title" /></span></li> <li><label for="file-path">ファイルの名</label> <span><input type="text" name="file-path" id="file-path" /></span></li> <li><label for="contents">コンテンツ</label> <span><textarea rows="10" cols="80" name="contents" id="contents" ></textarea></span></li> </ul> <input type="submit" value="書き出し" /> </form> </div> </body> </html>

このページの上部へ

HTMLファイルの更新

<?php print '<?xml version="1.0" encoding="UTF-8" ?>'; ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title>Simple CMS</title> <link href="mng.css" type="text/css" rel="stylesheet" /> <script type="text/javascript" src="event.js"></script> </head> <body id="edit"> <h1>Simple CMS<span> - HTMLファイルの更新</span></h1> <?php include("nav.inc");?> <div id="form-area"> <p><select><option>ファイルを選択してください</option></select></p> <form action="complete.php" method="post"> <input type="hidden" name="put-type" value="edit" /> <input type="hidden" name="file-path" id="file-path" /> <input type="hidden" name="node-num" id="node-num" value="" /> <ul> <li><label for="page-title">ページタイトル</label> <span><input type="text" name="page-title" id="page-title" /></span></li> <li><label for="contents">コンテンツ</label> <span><textarea rows="10" cols="80" name="contents" id="contents" ></textarea></span></li> </ul> <input type="submit" value="更新" /> </form> </div> </body> </html>

このページの上部へ

CSS、JavaScriptファイルの更新

<?php print '<?xml version="1.0" encoding="UTF-8" ?>'; ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title>Simple CMS</title> <link href="mng.css" type="text/css" rel="stylesheet" /> <script type="text/javascript" src="event.js"></script> </head> <body> <h1>Simple CMS<span> - CSS、JavaScriptファイルの更新</span></h1> <?php include("nav.inc");?> <div id="form-area"> <form action="import.php" method="post"> <p> <select name="file" onchange="submit()"> <option value="../output/skin.css" />ファイルを選択してください</option> <option value="../output/skin.css" />CSS</option> <option value="../output/add_event.js" />JavaScript</option> </select></p> </form> <form action="complete.php" method="post"> <input type="hidden" name="put-type" value="import" /> <input type="hidden" name="file-path" value="<?php print $_POST['file']; ?>" /> <ul> <li><label for="code">コード</label> <span><textarea rows="10" cols="80" name="code" id="code" ><?php if(! is_null($_POST['file'])){ $file = $_POST['file']; $get_contents = file_get_contents($file); print $get_contents; } ?></textarea></span></li> </ul> <input type="submit" value="更新" /> </form> </div> </body> </html>

このページの上部へ

ファイルアップロード

<?php print '<?xml version="1.0" encoding="UTF-8" ?>'; ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title>Simple CMS</title> <link href="mng.css" type="text/css" rel="stylesheet" /> <script type="text/javascript" src="event.js"></script> </head> <body> <h1>Simple CMS<span> - ファイルアップロード</span></h1> <?php include("nav.inc");?> <div id="form-area"> <form action="complete.php" method="post" enctype="multipart/form-data"> <input type="hidden" name="put-type" value="upload" /> <ul> <li><label for="up-file">アップロードファイルの選択</label> <span><input type="file" name="up-file" id="up-file" /></span></li> </ul> <input type="submit" value="アップロード" /> </form> </div> </body> </html>

このページの上部へ

テンプレートファイルの編集

<?php print '<?xml version="1.0" encoding="UTF-8" ?>'; ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title>Simple CMS</title> <link href="mng.css" type="text/css" rel="stylesheet" /> <script type="text/javascript" src="event.js"></script> </head> <body> <h1>Simple CMS<span> - テンプレートファイルの編集</span></h1> <?php include("nav.inc");?> <div id="form-area"> <form action="edit_tmp.php" method="post"> <p><select name="tmp" id="tmp"><option>ファイルを選択してください</option> <option value="h">ヘッダー</option> <option value="f">フッター</option></select></p> </form> <form action="complete.php" method="post"> <input type="hidden" name="different" id="different" value="" /> <input type="hidden" name="type" id="type" value="" /> <input type="hidden" name="put-type" id="put-type" value="tmp" /> <ul> <li><label for="code">コード</label> <span><textarea rows="10" cols="80" name="code" id="code" ></textarea></span></li> </ul> <input type="submit" value="更新" /> </form> </div> </body> </html>

このページの上部へ

全HTMLファイルの更新

<?php print '<?xml version="1.0" encoding="UTF-8" ?>'; ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title>Simple CMS</title> <link href="mng.css" type="text/css" rel="stylesheet" /> <script type="text/javascript" src="ajax.js"></script> </head> <body> <h1>Simple CMS<span> - 全HTMLファイルの更新</span></h1> <?php include("nav.inc");?> <div id="form-area"> <form action="complete.php" method="post"> <input type="hidden" name="put-type" value="all" /> <input type="submit" value="全HTMLファイルの更新" /> </form> </div> </body> </html>

このページの上部へ

処理完了

<?php require_once('global.php'); //リクエストが送られたファイルを確認 $put_type = $_POST['put-type']; //新規作成 if($put_type == 'newfile'){ $page_title = $_POST['page-title']; $contents = $_POST['contents']; $file_path = $_POST['file-path']; $put_file_puth = '../output/'.$file_path.'.html'; put_html($page_title,$contents,$put_file_puth); append_xml('n',0,$page_title,$contents,$put_file_puth); } //HTML 編集 if($put_type == 'edit'){ $page_title = $_POST['page-title']; $contents = $_POST['contents']; $file_path = $_POST['file-path']; $node_num = $_POST['node-num']; put_html($page_title,$contents,$file_path); append_xml('y',$node_num,$page_title,$contents,$file_path); } //JS CSS 編集 if($put_type == 'import'){ $file_path = $_POST['file-path']; $code = $_POST['code']; // ファイルを読み込み、文字列で置換 $import_file = file_get_contents($file_path); //置換した文字列でファイルを書き出す $put_file = fopen($file_path ,"wb+"); fwrite($put_file ,$code); fclose($put_file); } //ファイルアップロード if($put_type == 'upload'){ if(is_uploaded_file($_FILES['up-file'][tmp_name])){ $file_dir = "../output/img/"; $file_path = $file_dir.$_FILES['up-file'][name]; copy($_FILES['up-file'][tmp_name],$file_path); append_xml_upload($file_path); } } //テンプレートの更新 if($put_type == 'tmp'){ $type = $_POST['type']; $different = $_POST['different']; $code = $_POST['code']; $base_path = 'base.html'; $tmpfile_path = 'template.html'; $base = file_get_contents($base_path); //ヘッダー更新 if($type == 'h'){ $base = str_replace('{header}',$code,$base); $base = str_replace('{footer}',$different,$base); delete_tmp('h',$code); } //フッター更新 if($type == 'f'){ $base = str_replace('{footer}',$code,$base); $base = str_replace('{header}',$different,$base); delete_tmp('f',$code); } $create_file = fopen($tmpfile_path ,"wb+"); fwrite($create_file ,$base); fclose($create_file); } //全HTMLファイルの更新 if($put_type == 'all'){ global $xml_path; global $document; global $item_node; $array_title = array(); $array_description = array(); $array_link = array(); for ($i = 0; $i < $item_node -> length; $i++) { $array_title[] = $item_node -> item($i) -> getElementsByTagName('title') -> item(0) -> nodeValue; $array_description[] = $item_node -> item($i) -> getElementsByTagName('description') -> item(0) -> nodeValue; $array_link[] = $item_node -> item($i) -> getElementsByTagName('link') -> item(0) -> nodeValue; $html = file_get_contents("template.html"); $html = str_replace('{title}',$array_title[$i],$html); $html = str_replace('{contents}',$array_description[$i],$html); //置換した文字列でファイルを書き出す $create_file = fopen($array_link[$i] ,"wb+"); fwrite($create_file ,$html); fclose($create_file); } } print '<?xml version="1.0" encoding="UTF-8" ?>'; ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title>Simple CMS</title> <link href="mng.css" type="text/css" rel="stylesheet" /> <script type="text/javascript" src="event.js"></script> </head> <body> <h1>Simple CMS</h1> <?php include("nav.inc");?> <div id="complete"> <?php global $output_dr; //リクエストが送られたファイルによってメッセージを表示 if($put_type == 'newfile'){ print '<p>HTMLファイルを作成しました。<a href="'.'../output/'.$_POST['file-path'].'" target="_blank">確認する。</a></p>'; } if($file_path == '../output/skin.css'){ print '<p>CSSファイルを更新しました。<a href="'.$_POST['file-path'].'" target="_blank">確認する。</a></p>'; } if($file_path == '../output/add_event.js'){ print '<p>JavaScriptファイルを更新しました。<a href="'.$_POST['file-path'].'" target="_blank">確認する。</a></p>'; } if($put_type == 'edit'){ print '<p>HTMLファイルを更新しました。<a href="'.'../output/'.$_POST['file-path'].'" target="_blank">確認する。</a></p>'; } if($put_type == 'upload'){ print '<p>ファイルアップロードしました。<a href="../output/img/'.$_FILES['up-file'][name].'" target="_blank">確認する。</a></p>'; } if($put_type == 'tmp'){ print '<p>テンプレートファイルを更新しました。<a href="template.html" target="_blank">確認する。</a></p>'; } if($put_type == 'all'){ print '<p>全てのHTMLファイルを更新しました。</p>'; } ?> </div> </body> </html>

このページの上部へ

ファイル情報を管理するXMLの設計

<!ELEMENT resource ( tmp-text, html-resource, upload-file )> <!ELEMENT tmp-text ( (header|footer), (footer|header) )> <!ELEMENT header (#PCDATA)> <!ELEMENT footer (#PCDATA)> <!ELEMENT html-resource ( item* )> <!ELEMENT item ( title, description, link )> <!ELEMENT title (#PCDATA)> <!ELEMENT description (#PCDATA)> <!ELEMENT link (#PCDATA)> <!ELEMENT upload-file ( file* )> <!ELEMENT file (#PCDATA)>

このページの上部へ

JavaScript

var dom = new Object; dom.event = new Object; dom.event.addEventListener = function(elm,type,func,useCapture){if(! elm){return false;}if(! useCapture){useCapture = false;}if(elm.addEventListener){elm.addEventListener(type,func,false);}else if(elm.attachEvent){elm.attachEvent("on"+type,func); }else{return false; }return true;}; dom.event.removeEventListener = function(elm,type,func,useCapture){if(! elm){return false;}if(! useCapture){useCapture = false();}if(elm.removeEventListener){ elm.removeEventListener(type,func,false);}else if(elm.datachEvent){elm.datachEvent("on"+type,func);}else{return false;}return true;}; dom.event.stopPropagation = function(evt){ if(evt && evt.stopPropagation){ evt.stopPropagation();}else if(window.event){window.event.cancelBubble = true;}} function sendRequest( url, callback, method, data ){var req = createXMLHTTP();if( !req ){ return; } req.onreadystatechange = function(){getResponse( req, callback );} if(method.toUpperCase() == 'GET' && data.length > 0){url += '?'+ data;data = '';}req.open( method, url, true );req.setRequestHeader("Content-Type", "text/html; charset=UTF-8");req.send( data );} function createXMLHTTP(){ if( window.XMLHttpRequest ){return new XMLHttpRequest();}else if( window.ActiveXObject ){try {return new ActiveXObject("MSXML2.XMLHTTP");}catch (e) {try {return new ActiveXObject("Microsoft.XMLHTTP");}catch(e2) {return null;}}}return null}function getResponse( req, callback ) {if( req.readyState == 4 ){if( req.responseText ){callback(req);}}} //window load var or = "n";//テンプレート読み込み切り替えグローバル変数 var num = 0;//読み込むXMLのitemノードの番号用グローバル変数 dom.event.addEventListener(window,"load",function(){ if(document.getElementById("put-table")){ SETXMLTABLE(); } if(document.getElementById("edit")){ GETXML(); } if(document.getElementById("edit")){ var trg = document.getElementsByTagName("select")[0]; dom.event.addEventListener(trg,"change",function(){ var selectNum = document.getElementsByTagName("select")[0].value; num = selectNum; SETXML(); }); } var tmp = document.getElementById("tmp"); var typev = document.getElementById("type"); dom.event.addEventListener(tmp,"change",function(){ or = tmp.value; typev.value = tmp.value; GETTMPXML(); }); }); //XMLを読み込み、読み込んだXMLをHTMLに表示する関数を実行 function GETXML(){ sendRequest("../output/mng.xml",disp,"GET","");//読み込んだXMLをoptionに表示 } function SETXML(){ sendRequest("../output/mng.xml",get,"GET","");//フォームエレメントにXMLデータを表示 } function SETXMLTABLE(){ sendRequest("../output/mng.xml",listTable,"GET","");//読み込んだXMLをtableに表示 } function GETTMPXML(){ sendRequest("../output/mng.xml",dispTmp,"GET","");//テンプレートヘッダ、フッタを読み込み } //読み込んだXMLをtableに表示 function listTable(req){ var putTable = document.getElementById("put-table"); var tableElement = new Array(); var tbodyElement = new Array(); for(var i=0;i<2;i++){ tableElement[i] = document.createElement("table"); tbodyElement[i] = document.createElement("tbody"); } var itemNode = req.responseXML.getElementsByTagName("item"); for(var i=0;i<itemNode.length;i++){ var titleNode = itemNode[i].getElementsByTagName("title")[0].firstChild.nodeValue; var titleNodeTxt = document.createTextNode(titleNode); var linkNode = itemNode[i].getElementsByTagName("link")[0].firstChild.nodeValue; var linkNodeTxt = document.createTextNode(linkNode); var trowElement = document.createElement("tr"); var anchorElement = document.createElement("a"); anchorElement.href = linkNode; anchorElement.target = "_blank"; anchorElement.appendChild(linkNodeTxt); var checktdElement = document.createElement("td"); var checkElement = document.createElement("input"); checkElement.type = "checkbox"; checkElement.name = "file[]"; checkElement.value = i; checktdElement.appendChild(checkElement); var theadElement = document.createElement("th"); theadElement.appendChild(titleNodeTxt); var tdataElement = document.createElement("td"); tdataElement.appendChild(anchorElement); trowElement.appendChild(checktdElement); trowElement.appendChild(theadElement); trowElement.appendChild(tdataElement); tbodyElement[0].appendChild(trowElement); } tableElement[0].appendChild(tbodyElement[0]); putTable.appendChild(tableElement[0]); var fileNodes = req.responseXML.getElementsByTagName("file"); for(var i=0;i<fileNodes.length;i++){ var fileNode = fileNodes[i].firstChild.nodeValue; var trowElement = document.createElement("tr"); var anchorElement = document.createElement("a"); anchorElement.href = fileNode; anchorElement.target = "_blank"; var linkNodeTxt = document.createTextNode(fileNode); anchorElement.appendChild(linkNodeTxt); var tdataElement = document.createElement("td"); tdataElement.appendChild(anchorElement); var checktdElement = document.createElement("td"); var checkElement = document.createElement("input"); checkElement.type = "checkbox"; checkElement.name = "up-file[]"; checkElement.value = i; checktdElement.appendChild(checkElement); trowElement.appendChild(checktdElement); trowElement.appendChild(tdataElement); tbodyElement[1].appendChild(trowElement); } tableElement[1].appendChild(tbodyElement[1]); putTable.appendChild(tableElement[1]); } //読み込んだXMLをoptionに表示 function disp(req){ if(document.getElementsByTagName("select")[0]){ var selectElement = document.getElementsByTagName("select")[0]; //XMLノード取得し、生成したオプションエレメントへセット var itemNode = req.responseXML.getElementsByTagName("item"); for(var i=0;i<itemNode.length;i++){ var optionElement = document.createElement("option"); var titleNode = itemNode[i].getElementsByTagName("title")[0].firstChild.nodeValue; var titleText = document.createTextNode(titleNode); optionElement.appendChild(titleText); optionElement.value = i; selectElement.appendChild(optionElement); } } } //フォームエレメントにXMLデータを表示 function get(req){ var itemNode = req.responseXML.getElementsByTagName("item"); var titleNode = itemNode[num].getElementsByTagName("title")[0].firstChild.nodeValue; var descriptionNode = itemNode[num].getElementsByTagName("description")[0].firstChild.nodeValue; var linkNode = itemNode[num].getElementsByTagName("link")[0].firstChild.nodeValue; if(document.getElementById("page-title")){ var pageTitle = document.getElementById("page-title"); pageTitle.value = titleNode; } if(document.getElementById("file-path")){ var filePath = document.getElementById("file-path"); filePath.value = linkNode; } if(document.getElementById("contents")){ var contents = document.getElementById("contents"); contents.value = descriptionNode; } if(document.getElementById("node-num")){ var nodeNum = document.getElementById("node-num"); nodeNum.value = num; } } //テンプレートヘッダ、フッタを読み込み function dispTmp(req){ var different = document.getElementById("different"); var code = document.getElementById("code"); var tmpText = req.responseXML.getElementsByTagName("tmp-text")[0]; var headerNode = tmpText.getElementsByTagName("header")[0].firstChild.nodeValue; var footerNode = tmpText.getElementsByTagName("footer")[0].firstChild.nodeValue; if(or=="h"){ different.value = footerNode; code.value = headerNode; }else if(or="f"){ different.value = headerNode; code.value = footerNode; } } //フォーム入力確認 function create_submit_check(){ var erroeMsg = new Array("ページタイトルが入力されていません ","ファイルのパスが入力されていません ","コンテンツが入力されていません "); var eroeText = new Array(); var flg = 0; for(var i=0;i<erroeMsg.length;i++){ eroeText.push(document.createTextNode(erroeMsg[i])); } var erroe = document.getElementById("erroe"); var pageTitle = document.getElementById("page-title"); var filePath = document.getElementById("file-path"); var contents = document.getElementById("contents"); if(pageTitle.value == ""){erroe.appendChild(eroeText[0]);} if(filePath.value == ""){erroe.appendChild(eroeText[1]);} if(contents.value == ""){erroe.appendChild(eroeText[2]);} if(pageTitle.value == "" || filePath.value == "" || contents.value == ""){return false;} }

このページの上部へ