'2018/04/15'에 해당되는 글 2건

728x90

체크된 체크박스 value 가져오기

전체선택/해제 하는 jQuery 코드와

개별적으로 선택된 값을 가져오고 가져온 개수가 몇개인지 파악하는 코드다.


prop()는 현재 설정된 속성값과 입력폼의 체크등의 여부를 확인 가능한 매우 유용한 속성이다.

결과로 체크 여부에 따라 boolean 타입의 true, false가 반환된다.

$("input:checkbox[id='ID']").prop("checked");

$("input:checkbox[name='NAME']").prop("checked");

$("input:checkbox[name='class[2]']").prop("checked",true); // 배열 사용시 따옴표를 넣어야 인식되더라.

$("input:checkbox[id='class3']").prop("checked",true);


is() 메소드는 해당하는 요소의 상태에 따라 옳고 그름을 불리언으로 반환한다.
$(this).is(":checked");

if($("input:checkbox[id='ID']").is(":checked") == true){ }


<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<script>
$(function(){
    $("#check_all").click(function(){
        var chk = $(this).is(":checked");
        if(chk) $(".allchk input").prop('checked', true);
        else  $(".allchk input").prop('checked', false);
    });

    $("#submit").click(function(){
        var selectedCheck = new Array();
        $('.inputchk:checked').each(function() {
            selectedCheck.push(this.value);
        });
        // alert(selectedCheck + '\n개수 : '+selectedCheck.length);
        if(selectedCheck.length < 1 ){
            alert('최소한 1개 이상 항목을 선택하셔야 합니다');
            return false;
        }
        //document.form.submit();
    });

});
</script>
</head>
<body>
<label><input id="check_all" type="checkbox"> <b>전체선택</b></label>
<ul class="allchk">
<label><input class="inputchk" name="class[1]" value="1" type="checkbox">1</label>
<label><input class="inputchk" name="class[2]" value="2" type="checkbox">2</label>
<label><input class="inputchk" name="class[3]" id="class3" value="3" type="checkbox">3</label>
<label><input class="inputchk" name="class[4]" value="4" type="checkbox">4</label>
<label><input class="inputchk" name="class[5]" value="5" type="checkbox">5</label>
</ul>
<button type='submit' class='btn btn-primary' id='submit'>전송</button>
</body>
</html>


http://bytutorial.com/blogs/jquery/jquery-get-selected-checkboxes 를 참조하면 된다.


개수만 체크하는 경우에는 이렇게 하면 더 편하다.

  var selectedCheck = new Array();
  $('.inputchk:checked').each(function() {
       selectedCheck.push(this.value);
  });
  // alert(selectedCheck + '\n개수 : '+selectedCheck.length);
  if(selectedCheck.length < 1 ){
      alert('최소한 1개 이상 항목을 선택하셔야 합니다');
      return false;
   }

전체 갯수 : $("input:checkbox[name='name명']").length;
선택된 갯수 : $("input:checkbox[name='name명']:checked").length;

따라서 위의 것을 간단하게 줄이면 $('.inputchk:checked').length; 가 개수 체크를 하므로

if($('.inputchk:checked').length < 1){

     alert('최소한 1개 이상 항목을 선택하셔야 합니다');

     return false;

}


'Web 프로그램 > js, jQuery' 카테고리의 다른 글

Javascript 배열 정리  (0) 2018.04.29
jQuery - input 배열 수 세기  (0) 2018.04.20
Popup Modal with jQuery  (0) 2018.04.12
jQuery animate  (2) 2018.02.14
jQuery addClass()  (0) 2018.02.04
블로그 이미지

Link2Me

,
728x90

PHP 에서 write.php 만들 때 textarea 만 포함하면 텍스트 형태로만 저장되어 표현의 다양성이 부족하다.

그래서 스마트에디터를 검색해보니 오픈소스인 네이버 스마트에디터(smart editor)를 연동하면 된다고 나온다.

자료를 많이 검색해도 잘 이해가 안되어 개념 잡는데 고생을 좀 했다.

 

네이버 스마트에디터(SmartEditor)는 JavaScript로 구현된 웹 기반의 WYSIWYG 편집기다.

 

연동에 필요한 사항 전부를 하나 하나 작성해둔다.

1. 네이버 스마트 에디터 다운로드

   스마트에디터2.0 오픈소스는 github으로 이전했다.

    https://github.com/naver/smarteditor2/releases 에서 받아야 한다.

    스마트에디터3.0은 2.0버전과 동작방식이 전혀 다르고 설치형이 아니라 서비스형이다.

    네이버는 오픈소스 계획이 없다.


2. 스마트 에디터 설치 준비

    - 압축을 풀어서 plugin/editor/ 폴더에 복사를 한다.

      다른 API 도 연동할 수 있으므로 plugin 폴더를 만들고 그 하위 폴더에 위치시켰다.

    - readme.txt 파일을 보면 ....

      /css : 에디터에서 사용하는 css 파일
      /img : 에디터에서 사용하는 이미지 파일
      /js : 에디터를 적용할 때 사용하는 JS 파일
      /photo_uploader : 사진 퀵 업로더 팝업 UI를 구성하는 파일

 

3. 스마트 에디터 연동 과정

   - smart editor 본문에 이미지를 추가하면 sample/photo_uploader/file_uploader.php 가 동작된다.

     이미지가 file_uploader.php 에서 지정한 폴더에 저장된다.

   - 원하는 폴더에 저장되게 하고 싶다면 file_uploader.php 를 수정한다.

   - 이미지가 저장되면 코드가 자동으로 생성되어 smart editor 본문에 추가된다.

   - 저장된 이미지의 경로명을 DB에 저장하고 싶다면 저장할 테이블을 만들고 아래 코드로 추출한다.

     // 정규식을 이용해서 img 태그 전체 / src 값만 추출하기
     preg_match_all("/<img[^>]*src=[\"']?([^>\"']+)[\"']?[^>]*>/i", $content, $getImageSrcPaths);

     $b->bbs_imgSaveDB($getImageSrcPaths[1],$uid); // 이 코드는 개발자가 직접 구현 필요


4. 코드 예시

=== writeForm.php ===

<?php
require_once 'dbconnect.php'; // db접속
require_once 'phpclass/bbsClass.php'; // 게시판 클래스
$b = new bbsClass();

$uid = isset($_GET['uid']) ? $_GET['uid'] : '';
if($uid){
    $sql ="select * from table_name where id=".$uid;
    $rs = mysqli_query($dbconn,$sql);
    if($R = mysqli_fetch_array($rs)){

    }
}
?>

<!DOCTYPE html>
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no"/>
<meta http-equiv="X-UA Compatible" control="IE=edge,chrome=1" />
<link rel="stylesheet" type="text/css" href="css/table.css" />
<script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script>
<!-- 네이버 스마트에디터 스크립트 include -->
<script type="text/javascript" src="plugin/editor/js/HuskyEZCreator.js"></script>
</head>
<body>
<div class="rdata_write">
    <form name="writeForm" id="writeForm" method="post" action="write.php">
    <input type="hidden" name="uid" value="<?php echo isset($R['uid'])? $R['uid']:'';?>">
    <table class="table" width="800">
        <tr>
            <td class="td1">제목</td>
            <td class="td2"><input type="text" name="subject" value="<?php echo isset($R['title'])? htmlspecialchars($R['title']):'';?>" />
            </td>
        </tr>

        <tr>
            <td class="td1">내용</td>
            <td class="td2">
            <textarea name="content" id="ir1" rows="20" style="width:100%;height400px;">
            <?php
                if(isset($R['content'])&& strlen($R['content'])){
                    echo $b->html_decode($R['content']);
                } else { echo '';}
            ?>
            </textarea>
            <!-- 아래 스크립트를 추가 -->
            <script type="text/javascript" src="plugin/editor/js/se2_insert.js"></script>
            </td>
        </tr>

        <tr>
        <td colspan="2" align="center"><input type="button" id="savebtn" value="서버전송" class="btnblue" /></td>
        </tr>

    </table>
    </form>
</div>
</body>
</html>

=== se2_insert.js ===

$(function(){
    // 전역변수 선언
    var oEditors = [];
    nhn.husky.EZCreator.createInIFrame({
        oAppRef: oEditors,
        elPlaceHolder: "ir1",
        // 스킨 경로명에 맞게 수정
        sSkinURI: "plugin/editor/SmartEditor2Skin.html",
        htParams : {
            // 툴바 사용 여부 (true:사용/ false:사용하지 않음)
            bUseToolbar : true,
            // 입력창 크기 조절바 사용 여부 (true:사용/ false:사용하지 않음)
            bUseVerticalResizer : true,
            // 모드 탭(Editor | HTML | TEXT) 사용 여부 (true:사용/ false:사용하지 않음)
            bUseModeChanger : true,
            fOnBeforeUnload : function(){
                //alert("");
            }
        }, //boolean
        fOnAppLoad : function(){
            // 기존 저장된 내용의 text 내용을 에디터상에 뿌려주고자 할때 사용
        },
        fCreator: "createSEditor2"
    });

    function pasteHTML(str) { // 에디터에 내용 삽입
        sHTML = str;
        oEditors.getById["ir1"].exec("PASTE_HTML", [sHTML]);
    }

    function editerResetHTML() { // 에디터 내용 초기화
       oEditors.getById["ir1"].exec("SET_CONTENTS", [""]);  // 내용초기화
    }

    function setDefaultFont() {
        var sDefaultFont = '돋움';
        var nFontSize = 11;
        oEditors.getById["ir1"].setDefaultFont(sDefaultFont, nFontSize);
    }

    $("#savebtn").click(function(){
        // 에디터의 내용을 에디터 생성시에 사용했던 textarea에 넣어준다.
        if($("input[name='subject']").val() ==""){
            alert('제목을 입력하세요');
            $("input[name='subject']").focus();
            return false;
        }

        // 이부분에 에디터 validation 검증
        var ir1_data = oEditors.getById['ir1'].getIR();
        var checkarr = ['<p>&nbsp;</p>','&nbsp;','<p><br></p>','<p></p>','<br>'];
        if(jQuery.inArray(ir1_data.toLowerCase(), checkarr) != -1){
            alert("내용을 입력해 주십시오.");
            oEditors.getById["ir1"].exec('FOCUS');
            return false;
        }

        // id가 ir1인 에디터의 내용이 textarea에 적용됨
        oEditors.getById["ir1"].exec("UPDATE_CONTENTS_FIELD", []);

        //폼 submit
        $("#writeForm").submit();
    });
});
 

 

=== delete.php ===

<?php
if (!isset($_SESSION)) {
    session_start();
}

if($_SERVER['REQUEST_METHOD'] !== 'POST'){
    echo 0;
    exit;
}
extract($_POST);

// 업로드된 파일이 있다면 파일삭제
require_once 'dbconnect.php'; // db접속
require_once 'phpclass/bbsClass.php'; // 게시판 클래스
$b = new bbsClass();
if($uid){
    $b->bbs_imgDeleteDB($uid); // 이미지 DB 삭제 및 파일 삭제
    $sql ="delete from table_name where uid=".$uid;
    mysqli_query($dbconn,$sql);
    mysqli_close($dbconn);
}
?>

 

=== write.php ===

<?php
if (!isset($_SESSION)) {
    session_start();
}

if($_SERVER['REQUEST_METHOD'] !== 'POST'){
    echo 0;
    exit;
}
extract($_POST);
// 정규식을 이용해서 img 태그 전체 / src 값만 추출하기
preg_match_all("/<img[^>]*src=[\"']?([^>\"']+)[\"']?[^>]*>/i", $content, $getImageSrcPaths);

require_once 'dbconnect.php'; // db접속
require_once 'phpclass/bbsClass.php'; // 게시판 클래스
$b = new bbsClass();

$ip    = $_SERVER['REMOTE_ADDR'];
$agent = $_SERVER['HTTP_USER_AGENT'];

if($uid){
    $sql ="Update table_name SET content='".$b->html_encode($content)."', title='".$subject."' Where uid=".$uid;
    mysqli_query($dbconn,$sql);
    if(count($getImageSrcPaths[1])){
        $b->bbs_imgSaveDB($getImageSrcPaths[1],$uid);
    }
    echo 1;
} else {
    $sql ="INSERT INTO table_name (uid,title,content,d_regis) VALUES (NULL,'".$subject."','".$b->html_encode($content)."','".date("Y-m-d H:i:s")."')";
    mysqli_query($dbconn,$sql);
    $uid = mysqli_insert_id($dbconn);
    if(count($getImageSrcPaths[1])){
        $b->bbs_imgSaveDB($getImageSrcPaths[1],$uid);
    }
    echo 2;
}
?>

 

5. Smart Editor2에서 이미지 삽입 후 정렬이나 크기 조정 옵션을 설정 하는 방법
   GitHub : https://github.com/naver/smarteditor2/issues/36 를 참고하라고 나오네요.(이건 테스트 안해봤음)

실력이 부족해서 여기까지 알아내는데도 많은 시간이 걸렸다.

이미지 저장 처리 함수는 여기에 적어두지 않는다. 그 부분은 직접 로직 설계를 하면서 구현 ....

블로그 이미지

Link2Me

,