Yahooブログの書庫設定の表示順序みたいなものを作る
ポイント
* SELECTタグは、「<select ・・・・ name="selectOptions[]" multiple>」のようにし、保存する際には、JavaScriptなどを利用し、全選択し、全てのデータ受け渡すようにする(selectAllOptions()に着目)
http://oshiete.goo.ne.jp/qa/3520778.html
* 順番・順序を保存するテーブルを用意しておく
サンプル
<html>
<head>
<script type="text/javascript">
function selectAllOptions() {
var select = document.getElementById('slct');
for (var i = 0; i < select.options.length; i++) {
select.options[i].selected = true;
}
}
function buttonStyle(select) {
var UpButton = document.getElementById('UPBUTTON');
var DownButton = document.getElementById('DOWNBUTTON');
for (var i = 0; i < select.options.length; i++) {
if (select.options[i].selected) {
if(i != 0) {
UpButton.disabled = false;
} else {
UpButton.disabled = true;
}
if(i != (select.options.length - 1)) {
DownButton.disabled = false;
} else {
DownButton.disabled = true;
}
}
}
}
function optionMove(mode) {
var select = document.getElementById('slct');
for (var i = 0; i < select.options.length; i++) {
if (select.options[i].selected) {
break;
}
}
var tmpOption = select.removeChild(select.options[i]);
select.insertBefore(tmpOption, select.options[i + mode]);
buttonStyle(select);
}
</script>
</head>
<body>
<h1>【順番】</h1>
<form name="frm" method="post" action="./editOrder.php">
<input type="button" value="上" id="UPBUTTON" disabled onclick="optionMove(-1)">
<input type="button" value="下" id="DOWNBUTTON" disabled onclick="optionMove(1)">
<input type="submit" value="保存" onclick="selectAllOptions()">
<select size="100" onchange="buttonStyle(this)" id="slct" name="selectOptions[]" multiple>
<?php
try {
require_once 'Zend/Db.php';
require_once 'Zend/Config/Ini.php';
$config = new Zend_Config_Ini('./config/db_info.ini', 'order_db');
$db = Zend_Db::factory($config->db);
$select = $db->select();
$select->from("blogCategory");
$select->join("order", "blog.id = order.blogId", "*");
$select->order('order.order');
$rows = $db->fetchAll($select);
// 文字化け対策
mb_language("Japanese");
mb_internal_encoding("UTF8");
mb_detect_order("ASCII, UTF-8, JIS, EUC-JP, SJIS");
foreach ($rows as $row) {
// 値取得
$blogId = $row["id"];
$titleCategory = $row["titleCategory"];
echo "<option value='" . $blogId . "'>" . $titleCategory . "</option>\n";
}
} catch (Zend_Exception $e) {
echo nl2br($e);
exit();
}
?>
</select>
</form>
</div>
</body>
</html>
editOrder.php
<?php
require_once 'Zend/Db.php';
require_once 'Zend/Config/Ini.php';
$config = new Zend_Config_Ini('./config/db_info.ini', 'order_db');
$db = Zend_Db::factory($config->db);
try {
// テーブルを一旦クリア
$db->beginTransaction();
$result = $db->delete("blogCategory");
// 文字化け対策
mb_language("Japanese");
mb_internal_encoding("UTF8");
mb_detect_order("ASCII, UTF-8, JIS, EUC-JP, SJIS");
$options = $_POST["options"];
$order = 1;
foreach ($selectOptions as $selectOption) {
// 追加するデータ
$params = array (
'blogId' => $options,
'order' => $order,
);
$result = $db->insert("blogCategory", $params);
$order++;
}
$db->commit();
header("LOCATION:order.php");
} catch (Zend_Exception $e) {
$db->rollBack();
echo nl2br($e);
exit();
}
?>