티스토리 뷰

반응형

구상부터 하고


일괄적용 -> 아이템 테이블에서 해당 카테고리의 모든 상품을 찾고 => 그 상품의 option 테이블에서 해당옵션들을 찾아서
현재 선택받은 옵션1의 값과 항목을 가지고 기존 옵션을 바꿔주는 코드로 만들기

우선 상품이 어떻게 옵션을 다른 카테고리에 적용시킬건지를 생각한 다음에 아래처럼 파일 하나를 만들어서 
처리하는 기능을 달아주고

\adm\shop_admin\ajax.category_options.php
<?php
include_once('./_common.php');
//error_reporting(E_ALL);
//ini_set('display_errors', 1);
//ini_set('display_startup_errors', 1);

$category = addslashes($_POST['category']);
$categorylevel = addslashes($_POST['categorylevel']);
$action = addslashes($_POST['action']);
$opt1_subject = addslashes($_POST['opt1_subject']);
$opt2_subject = addslashes($_POST['opt2_subject']);
$opt1 = addslashes($_POST['opt1']);
$opt2 = addslashes($_POST['opt2']);
$optprice = addslashes($_POST['optprice']);

/*
$category = '601010';
$categorylevel = '2';
$opt1_subject = 'quality';
$opt2_subject = 'size';
$opt1 = '일반,1:1';
$opt2 = 'M,L,XL,2XL';
$optprice = '45000';
$action = 'supply';
*/
$categoryField = $categorylevel === '1' ? 'ca_id' : 'ca_id2';

if ($action == "supply") {
    $sql = "SELECT it_id , it_option_subject FROM {$g5['g5_shop_item_table']} 
            WHERE $categoryField = '{$category}'";           
    $counter = 0;                
    $result = sql_query($sql);
    echo $total_rows = sql_num_rows($result);
    echo '<br>';

    // 날짜와 시간을 기반으로 한 파일명 생성
    /*
    $date_str = date('Ymd_His'); // 예: 20241105_153000
    $log_dir = G5_PATH.'/clog/';
    if (!is_dir($log_dir)) {
        mkdir($log_dir, 0755, true); // 폴더가 없을 경우 생성
    }    
    $log_filename = "{$log_dir}catelog_{$category}_{$date_str}.txt";
    $mismatched_options = []; // 옵션 불일치 항목을 저장할 배열
    */
    for ($i = 0; $row = sql_fetch_array($result); $i++) {
        //print_r($row);
        $it_option_subject = $row['it_option_subject'];
        //echo '<br>';
        $supply_it_option_subject = $opt1_subject . ',' . $opt2_subject;
        if ($it_option_subject !== '옵션1,옵션2') {
            // 옵션 수가 일치하지 않는 상품을 배열에 추가
            $mismatched_options[] = "Item ID: {$row['it_id']}, Category: {$category}";
            continue; // 옵션 불일치 항목은 건너뜁니다.            
            //return;
        }
        
        $sql = " UPDATE {$g5['g5_shop_item_table']} SET it_option_subject = '{$supply_it_option_subject}' 
                     WHERE it_id = '{$row['it_id']}'";
        sql_query($sql);
        //echo '<br>';
        
        $sql_option_check = "SELECT * FROM {$g5['g5_shop_item_option_table']} 
                                  WHERE it_id = '{$row['it_id']}' AND io_type = '0' ORDER BY io_no ASC";
        //echo '<br>';
        
        $option_result = sql_query($sql_option_check);
        
        if (sql_num_rows($option_result) > 0) {
            //echo '배열 존재 및 일치';
            $ori_array1 = explode(',', $opt1);
            
            for ($x = 0; $xrow = sql_fetch_array($option_result); $x++) {
                //echo '기존 옵션 아이디: ' . $xrow['io_id'];
                //echo ' 변경 옵션 아이디 :';
                $new_io_id = preg_replace('/^[^]+/', $ori_array1[0], $xrow['io_id']);
                //echo $new_io_id;
                //echo '<br>';

                //echo '기존 옵션의 변경 쿼리문: ';
                $sql_option_update = "
                    UPDATE {$g5['g5_shop_item_option_table']}
                    SET io_id = '{$new_io_id}'
                    WHERE io_no = '{$xrow['io_no']}'
                ";
                sql_query($sql_option_update);
                //echo '<br>';
                
                for ($s = 1; $s < count($ori_array1); $s++) {
                    //echo ' 새로 추가 옵션 아이디 : ';
                    $new_insert_io_id = preg_replace('/^[^]+/', $ori_array1[$s], $xrow['io_id']);
                    //echo $new_insert_io_id;
                    //echo '<br>';
                    
                    //echo ' 옵션 새로 추가하는 쿼리문';
                    $sql_option_insert = "
                        INSERT INTO {$g5['g5_shop_item_option_table']} 
                        (io_id, io_price, it_id, io_type, io_stock_qty, io_noti_qty, io_use)
                        VALUES (
                            '{$new_insert_io_id}', 
                            '{$optprice}', 
                            '{$row['it_id']}', 
                            '0', 
                            '9999', 
                            '100', 
                            '1'
                        )";
                    sql_query($sql_option_insert);
                    //echo '<br>';
                }
            }
        } else {
            // 옵션 갯수가 일치하지 않는 상품 특별 관리.
            // category 값과 오늘 날짜의 이름을 가진 파일로 저장
            //$mismatched_options[] = "옵션 체크   Item ID: {$row['it_id']}, Category: {$category}";
        }
        
        //echo '<br>';
        $counter++;
        
        //if ($counter  > 1 ) {           
        //    echo "Processed $counter items...\n";
        //    ob_flush();
        //    flush();                
        //}
        // 옵션 불일치 항목이 있을 경우 로그 파일로 저장
        //if (!empty($mismatched_options)) {
        //    file_put_contents($log_filename, implode(PHP_EOL, $mismatched_options));
        //    echo "옵션 불일치 항목이 {$log_filename}에 저장되었습니다.";
        //}        
    }
}

버튼 하나 만들어준다음에

 

                   // 선택된 옵션 데이터 수집 및 AJAX 요청
                    $("#sel_supply_category").click(function() {                                         
                        // 1차, 2차 분류 선택창 띄우기
                        const categorylevel = prompt("1차 분류는 '1', 2차 분류는 '2'를 입력하세요:");
                        var category = '';
                        if (categorylevel !== '1' && categorylevel !== '2') {
                            alert("올바른 값을 입력해 주세요.");
                            return;
                        } else if (categorylevel == '1') {
                            category = $('#ca_id').val();
                        } else if (categorylevel == '2'){
                            category = $('#ca_id2').val();
                        }
                      
                        // 금액 입력창 띄우기
                        const priceInput = prompt("옵션 금액을 입력하세요:");
                        const optprice = parseInt(priceInput, 10);
                        // 입력값이 정수가 아니면 경고 메시지 출력 후 함수 종료
                        if (isNaN(optprice)) {
                            alert("금액은 숫자 정수로 입력해 주세요.");
                            return;
                        }
                        
                        var opt1_subject = $.trim($("#opt1_subject").val());
                        var opt2_subject = $.trim($("#opt2_subject").val());
                        var opt1 = $.trim($("#opt1").val());
                        var opt2 = $.trim($("#opt2").val());
     

                        $.ajax({
                            url: "<?php echo G5_ADMIN_URL; ?>/shop_admin/ajax.ca_options.php", // 요청 URL
                            type: "POST", // HTTP 요청 방식
                            data: {
                                category: category,
                                categorylevel: categorylevel,
                                action: 'supply',
                                opt1_subject: opt1_subject,
                                opt2_subject: opt2_subject,                                
                                opt1: opt1,
                                opt2: opt2,                                
                                optprice: optprice
                            },
                            beforeSend: function() {
                                console.log("AJAX 요청을 보내기 전:", {
                                    category: category,
                                    action: 'supply',
                                    categorylevel: categorylevel,
                                    opt1_subject: opt1_subject,
                                    opt2_subject: opt2_subject,
                                    opt1: opt1,
                                    opt2: opt2,
                                    optprice: optprice
                                });
                            },
                            success: function(response) {
                                // 서버로부터의 응답 처리
                                console.log("서버 응답:", response);
                                // 응답에 따라 UI 업데이트를 여기서 수행
                                // 예: $('#result').html(response);
                            },
                            error: function(jqXHR, textStatus, errorThrown) {
                                console.error("AJAX 요청 실패:", textStatus, errorThrown);
                                console.log("상태 코드:", jqXHR.status);
                                console.log("응답 텍스트:", jqXHR.responseText);
                            }
                        });

                    });

실행하는 기능을 관리자 상품 수정 페이지에 달아준다. 그럼 편하다

조만간 이거랑 상관없지만

폰보드 제어하는 프로그램 새로 제작하나할거래서 작업하면 다시 올리겠음.

 

반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함