Index: branches/version-2_5-dev/data/Smarty/templates/admin/products/product.tpl
===================================================================
--- branches/version-2_5-dev/data/Smarty/templates/admin/products/product.tpl	(revision 19688)
+++ branches/version-2_5-dev/data/Smarty/templates/admin/products/product.tpl	(revision 19695)
@@ -185,4 +185,11 @@
       </td>
     </tr>
+    <tr>
+      <th>支払方法<span class="attention"> *</span></th>
+       <td>
+         <span class="attention"><!--{$arrErr.payment_ids}--></span>
+         <!--{html_checkboxes name="payment_ids" options=$arrPayments selected=$arrForm.payment_ids}-->
+       </td>
+    </tr>
     <!--{/if}-->
 
@@ -195,10 +202,4 @@
         <!--{if $smarty.const.OPTION_PRODUCT_DELIV_FEE != 1}--><br /><span class="attention">※現在無効です</span> (パラメータ OPTION_PRODUCT_DELIV_FEE)<!--{/if}-->
       </td>
-    </tr>
-    <tr>
-      <th>支払方法</th>
-       <td>
-         <!--{html_checkboxes name="payment_ids" options=$arrPayments selected=$arrForm.payment_ids}-->
-       </td>
     </tr>
     <tr>
@@ -246,13 +247,4 @@
       </td>
     </tr>
-    <!--{*
-    <tr>
-      <th>成分</th>
-      <td>
-        <textarea name="comment2" cols="60" rows="8" class="area60" maxlength="<!--{$smarty.const.STEXT_LEN}-->"><!--{$arrForm.comment2|escape}--></textarea>
-        <span class="attention"> (上限<!--{$smarty.const.LTEXT_LEN}-->文字)</span>
-      </td>
-    </tr>
-    *}-->
     <tr>
       <th>検索ワード<br />※複数の場合は、カンマ( , )区切りで入力して下さい</th>
Index: branches/version-2_5-dev/data/Smarty/templates/admin/products/product_class_confirm.tpl
===================================================================
--- branches/version-2_5-dev/data/Smarty/templates/admin/products/product_class_confirm.tpl	(revision 19670)
+++ branches/version-2_5-dev/data/Smarty/templates/admin/products/product_class_confirm.tpl	(revision 19695)
@@ -25,6 +25,13 @@
 <form name="form1" id="form1" method="post" action="?" enctype="multipart/form-data">
 <!--{foreach key=key item=item from=$arrForm}-->
-<input type="hidden" name="<!--{$key}-->" value="<!--{$item|escape}-->" />
+  <!--{if '/payment_ids:/'|preg_match:$key}-->
+    <!--{foreach item=paymentsVal from=$item}-->
+      <input type="hidden" name="<!--{$key}-->[]" value="<!--{$paymentsVal|escape}-->" />
+    <!--{/foreach}-->
+  <!--{else}-->
+    <input type="hidden" name="<!--{$key}-->" value="<!--{$item|escape}-->" />
+  <!--{/if}-->
 <!--{/foreach}-->
+
 <!--{foreach key=key item=item from=$arrHidden}-->
 <input type="hidden" name="<!--{$key}-->" value="<!--{$item|escape}-->" />
@@ -44,4 +51,5 @@
       <th><!--{$smarty.const.SALE_PRICE_TITLE}-->(円)</th>
       <th>商品種別</th>
+      <th>支払方法</th>
       <th>ダウンロードファイル名</th>
       <th>ダウンロード商品用ファイルアップロード</th>
@@ -73,4 +81,10 @@
       <!--{assign var=inkey value="`$arrForm[$key]`"}-->
       <td class="right"><!--{$arrDown[$inkey]}--></td>
+      <!--{assign var=key value="payment_ids:`$smarty.section.cnt.iteration`"}-->
+      <td>
+      <!--{foreach from=$arrForm[$key] item=payment_id}-->
+        <!--{$arrPayments[$payment_id]|escape}-->&nbsp;
+      <!--{/foreach}-->
+      </td>
       <!--{assign var=key value="down_filename:`$smarty.section.cnt.iteration`"}-->
       <td class="right"><!--{$arrForm[$key]}--></td>
Index: branches/version-2_5-dev/data/Smarty/templates/admin/products/confirm.tpl
===================================================================
--- branches/version-2_5-dev/data/Smarty/templates/admin/products/confirm.tpl	(revision 19670)
+++ branches/version-2_5-dev/data/Smarty/templates/admin/products/confirm.tpl	(revision 19695)
@@ -25,5 +25,5 @@
 <form name="form1" id="form1" method="post" action="?" enctype="multipart/form-data">
   <!--{foreach key=key item=item from=$arrForm}-->
-    <!--{if $key == 'product_status'}-->
+    <!--{if $key == 'product_status' || $key == 'payment_ids'}-->
       <!--{foreach item=statusVal from=$item}-->
       <input type="hidden" name="<!--{$key}-->[]" value="<!--{$statusVal|escape}-->" />
@@ -113,4 +113,12 @@
         <!--{$arrForm.stock|escape}-->
       <!--{/if}-->
+      </td>
+    </tr>
+    <tr>
+      <th>支払方法</th>
+      <td>
+      <!--{foreach from=$arrForm.payment_ids item=payment_id}-->
+        <!--{$arrPayments[$payment_id]|escape}-->&nbsp;
+      <!--{/foreach}-->
       </td>
     </tr>
Index: branches/version-2_5-dev/data/Smarty/templates/admin/products/product_class.tpl
===================================================================
--- branches/version-2_5-dev/data/Smarty/templates/admin/products/product_class.tpl	(revision 19670)
+++ branches/version-2_5-dev/data/Smarty/templates/admin/products/product_class.tpl	(revision 19695)
@@ -102,4 +102,5 @@
       <th><!--{$smarty.const.SALE_PRICE_TITLE}-->(円)<span class="attention">*</span></th>
       <th>商品種別<span class="attention"> *</span></th>
+      <th>支払方法<span class="attention"> *</span></th>
       <th>ダウンロードファイル名<BR><span class="red"> (上限<!--{$smarty.const.STEXT_LEN}-->文字)</span></th>
       <th>ダウンロード商品用ファイルアップロード<BR>登録可能拡張子：<!--{$smarty.const.DOWNLOAD_EXTENSION}-->　(パラメータ DOWNLOAD_EXTENSION)</th>
@@ -141,10 +142,15 @@
         <!--{assign var=key value="product_type_id:`$smarty.section.cnt.iteration`"}-->
         <input type="radio" name="<!--{$key}-->" value="<!--{$smarty.const.PRODUCT_TYPE_NORMAL}-->" <!--{if $arrForm[$key] == "1"}-->checked<!--{/if}-->/>通常商品　
-        <input type="radio" name="<!--{$key}-->" value="<!--{$smarty.const.PRODUCT_TYPE_NORMAL}-->" <!--{if $arrForm[$key] == "2"}-->checked<!--{/if}--> />ダウンロード商品
+        <input type="radio" name="<!--{$key}-->" value="<!--{$smarty.const.PRODUCT_TYPE_DOWNLOAD}-->" <!--{if $arrForm[$key] == "2"}-->checked<!--{/if}--> />ダウンロード商品
+      </td>
+      <td>
+        <!--{assign var=key value="payment_ids:`$smarty.section.cnt.iteration`"}-->
+        <span class="attention"><!--{$arrErr[$key]}--></span>
+        <!--{html_checkboxes name=$key options=$arrPayments selected=$arrForm[$key]}-->
       </td>
       <td>
         <!--{assign var=key value="down_filename:`$smarty.section.cnt.iteration`"}-->
         <span class="attention"><!--{$arrErr[$key]}--></span>
-        <input type="text" name="<!--{$key}-->" value="<!--{$arrForm[$key]|escape}-->" maxlength="<!--{$smarty.const.STEXT_LEN}-->" style="<!--{if $arrErr[$key] != ""}-->background-color: <!--{$smarty.const.ERR_COLOR}--><!--{/if}-->" size="60" class="box60" />
+        <input type="text" name="<!--{$key}-->" value="<!--{$arrForm[$key]|escape}-->" maxlength="<!--{$smarty.const.STEXT_LEN}-->" style="<!--{if $arrErr[$key] != ""}-->background-color: <!--{$smarty.const.ERR_COLOR}--><!--{/if}-->" size="30" class="box30" />
       </td>
       <!--{assign var=key value="down_realfilename:`$smarty.section.cnt.iteration`"}-->
Index: branches/version-2_5-dev/data/class/pages/admin/products/LC_Page_Admin_Products_Product.php
===================================================================
--- branches/version-2_5-dev/data/class/pages/admin/products/LC_Page_Admin_Products_Product.php	(revision 19688)
+++ branches/version-2_5-dev/data/class/pages/admin/products/LC_Page_Admin_Products_Product.php	(revision 19695)
@@ -145,4 +145,5 @@
                 $productStatus= $objProduct->getProductStatus(array($_POST['product_id']));
                 $this->arrForm['product_status'] = $productStatus[$_POST['product_id']];
+                $this->arrForm['payment_ids'] = $objProduct->getEnablePaymentIds(array($this->arrForm['product_class_id']));
 
                 // DBデータから画像ファイル名の読込
@@ -638,4 +639,9 @@
             }
 
+            // 支払方法チェック
+            if (empty($array['payment_ids'])) {
+                $objErr->arrErr['payment_ids'] = "※ 支払方法は、いずれかを選択してください。<br />";
+            }
+
             //ダウンロード商品チェック
             if($array['product_type_id'] == PRODUCT_TYPE_DOWNLOAD) {
@@ -882,4 +888,7 @@
 
         }
+
+        $objProduct = new SC_Product();
+        $objProduct->setPaymentOptions($sqlval['product_class_id'], $arrList['payment_ids']);
     }
 
Index: branches/version-2_5-dev/data/class/pages/admin/products/LC_Page_Admin_Products_ProductClass.php
===================================================================
--- branches/version-2_5-dev/data/class/pages/admin/products/LC_Page_Admin_Products_ProductClass.php	(revision 19670)
+++ branches/version-2_5-dev/data/class/pages/admin/products/LC_Page_Admin_Products_ProductClass.php	(revision 19695)
@@ -54,4 +54,5 @@
         $this->tpl_subno = 'product';
         $this->tpl_subtitle = '商品登録(商品規格)';
+        $this->arrPayments = SC_Helper_DB_Ex::sfGetIDValueList("dtb_payment", "payment_id", "payment_method");
     }
 
@@ -290,4 +291,8 @@
                 $objQuery->insert("dtb_products_class", $pVal);
             }
+
+            // 支払方法登録
+            $objProduct = new SC_Product();
+            $objProduct->setPaymentOptions($pVal['product_class_id'], $arrList['payment_ids:'.$i]);
             $i++;
         }
@@ -355,4 +360,9 @@
                 if($array["stock_unlimited:".$no] != '1') {
                     $objErr->doFunc(array("在庫数", "stock:".$no, AMOUNT_LEN), array("EXIST_CHECK", "NUM_CHECK", "MAX_LENGTH_CHECK"));
+                }
+
+                // 支払方法チェック
+                if (empty($array['payment_ids:' . $no])) {
+                    $objErr->arrErr['payment_ids:' . $no] = "※ 支払方法は、いずれかを選択してください。<br />";
                 }
 
@@ -442,19 +452,29 @@
         $this->arrForm['select_class_id2'] = $this->arrForm["class_id2"];
         $this->arrClassCat = $this->getAllClassCategory($this->arrForm["class_id1"], $this->arrForm["class_id2"]);
+        $objProduct = new SC_Product();
         $total = count($this->arrClassCat);
+        // XXX $i = 1 にすれば ($i+1) は $i で良い？
         for ($i = 0; $i < $total; $i++) {
             if ($existsValue) {
                 foreach ($productsClass as $key => $val) {
-                	if(!$usepostValue){
-                    	$this->arrForm[$key . ":" . ($i+1)] = $val;
-                	}
+                    if(!$usepostValue){
+                        $this->arrForm[$key . ":" . ($i+1)] = $val;
+                    }
                 }
             }
             foreach ($existsProductsClass[$i] as $key => $val) {
-            	if(!$usepostValue){
-                	$this->arrForm[$key . ":" . ($i+1)] = $val;
-            	}
-                if($key=="down"){
+                if(!$usepostValue){
+                    $this->arrForm[$key . ":" . ($i+1)] = $val;
+                }
+
+                switch ($key) {
+                case 'down':
                     $this->objDownFile->addFile("ダウンロード販売用ファイル". ":" . ($i+1), 'down_realfilename'. ":" . ($i+1), explode(",", DOWNLOAD_EXTENSION),DOWN_SIZE, true, 0, 0);
+                    break;
+
+                    case 'product_class_id':
+                        $this->arrForm["payment_ids:" . ($i+1)] = $objProduct->getEnablePaymentIds(array($val));
+                        break;
+                default:
                 }
             }
Index: branches/version-2_5-dev/data/class/SC_Product.php
===================================================================
--- branches/version-2_5-dev/data/class/SC_Product.php	(revision 19689)
+++ branches/version-2_5-dev/data/class/SC_Product.php	(revision 19695)
@@ -591,4 +591,27 @@
                                         MDB2_FETCHMODE_ORDERED);
         return $paymentIds;
+    }
+
+    /**
+     * 商品規格に支払方法を設定する.
+     *
+     * TODO 現在は DELETE/INSERT だが, UPDATE を検討する.
+     *
+     * @param integer $productClassId 商品規格ID
+     * @param array 設定する支払方法IDの配列
+     * @return void
+     */
+    function setPaymentOptions($productClassId, $paymentIds) {
+        $val['product_class_id'] = $productClassId;
+
+        $objQuery =& SC_Query::getSingletonInstance();
+        $objQuery->delete('dtb_payment_options', 'product_class_id = ?', array($productClassId));
+        $rank = 1;
+        foreach ($paymentIds as $paymentId) {
+            $val['payment_id'] = $paymentId;
+            $val['rank'] = $rank;
+            $objQuery->insert('dtb_payment_options', $val);
+            $rank++;
+        }
     }
 
