일반적으로 만들어진 홈페이지에 게시판이 갑자기 추가되는 번거로워지는 경우가 생겼다.

그래서 크게 구조 등을 변경하지 않고 아이프레임으로 삽입을 하면 될 거라 생각했는데

<iframe id="iframe-import" src="http://domain.com/external-board" frameborder="0" scolling="no" width="100%" height="900"></iframe>

높이가 고정이다보니 안예쁨.

따라서 아래 코드로 변경(onLoad 부분)

<iframe id="iframe-import" src="http://domain.com/external-board" frameborder="0" scolling="no" width="100%" height="900" onload="autoResize(this)"></iframe>

autoResize 라는 자바스크립트 함수도 추가

<script type="text/javascript">

// iFrame Resizing Funcgtion

function autoResize(i){
    var iframeHeight=
    (i).contentWindow.document.body.scrollHeight;
    (i).height=iframeHeight+20;
}

</script>

ini_set('display_errors', 1);

ini_set('error_reporting', E_ALL);

 

페이지 상단에 삽입

config.php 파일

 

1. /bbs/list_num_update.php 생성

* Mysql DB 의 데이터베이스 이름하고 접두사를 잘 확인할것(g5_XXXX)

<?php
include_once('./_common.php');
// 게시판 관리자 이상 복사, 이동 가능 
if ($is_admin != "board" && $is_admin != "group" && $is_admin != "super") 
    alert_close("게시판 관리자 이상 접근이 가능합니다."); 

$wr_id=$_POST[chk_wr_id][0]; 
if($_POST[chk_wr_id][1]) $wr_id2=$_POST[chk_wr_id][1]; 

if($sw=="change"){ 
    if(count($_POST[chk_wr_id])==2){
    
    $act = "순서변경"; 

    $sql = " select wr_num from g5_write_{$bo_table} where wr_id='$wr_id'"; //절대값이 높은(위쪽) wr_num값을 구한다.
    $result = sql_query($sql); 
    $forth_wr_num_array=sql_fetch_array($result); 
    $wr_id;
    $forth_wr_num = $forth_wr_num_array['wr_num']; //절대값이 높은 wr_num값
    $sql = " select wr_num from g5_write_{$bo_table} where wr_id='$wr_id2'"; //절대값이 낮은(아래쪽) wr_num값을 구한다.
    $result = sql_query($sql); 
    $back_wr_num_array=sql_fetch_array($result); 
    $wr_id2;
    $back_wr_num = $back_wr_num_array['wr_num']; //절대값이 낮은 wr_num값

    sql_query(" update g5_write_{$bo_table} set wr_num = '$back_wr_num' where wr_id = '$wr_id'"); //위쪽 게시물 wr_num을 아래쪽 wr_num으로 수정
    sql_query(" update g5_write_{$bo_table} set wr_num = '$forth_wr_num' where wr_id = '$wr_id2'"); //아래쪽 게시물 wr_num을 위쪽 wr_num으로 수정

    }else{
        alert_close("2개의 게시물을 선택해주세요."); 
    }

}else if($sw == "prev"){ 
    if(count($_POST[chk_wr_id])>=2){alert_close("1개의 게시물만 선택해주세요."); }


    $act = "앞으로 이동"; 

    $sql = " select wr_num from g5_write_{$bo_table} where wr_id='$wr_id'"; //선택된 wr_num값을 구한다.
    $result = sql_query($sql); 
    $selected_wr_num_array=sql_fetch_array($result); 
    $selected_wr_num = $selected_wr_num_array['wr_num']; //선택된 wr_num값
    if($selected_wr_num=='-1') alert_close("가장 앞선 게시물입니다."); 
    $prev_wr_num = $selected_wr_num+1; //앞의 wr_num 값
    $sql = " select wr_id from g5_write_{$bo_table} where wr_num='{$prev_wr_num}'"; //앞의 wr_num값을 갖는 wr_id를 구한다.
    $result = sql_query($sql); 
    $prev_wr_id_array=sql_fetch_array($result);
    $prev_wr_id = $prev_wr_id_array['wr_id']; //앞의 wr_id 값

    sql_query(" update g5_write_{$bo_table} set wr_num = '$prev_wr_num' where wr_id = '$wr_id'"); //선택된 게시물을 앞번으로 수정
    sql_query(" update g5_write_{$bo_table} set wr_num = '$selected_wr_num' where wr_id = '$prev_wr_id'"); //앞번 게시물을 선택된번으로 수정

}else if ($sw == "next") { 
    if(count($_POST[chk_wr_id])>=2){alert_close("1개의 게시물만 선택해주세요."); }
    
    $act = "뒤로 이동"; 

    $sql = " select wr_num from g5_write_{$bo_table} where wr_id='$wr_id'"; //선택된 wr_num값을 구한다.
    $result = sql_query($sql); 
    $selected_wr_num_array=sql_fetch_array($result); 
    $selected_wr_num = $selected_wr_num_array['wr_num']; //선택된 wr_num값
    $latest_wr_num_array = sql_fetch(" select min(wr_num) as latest from g5_write_{$bo_table} where 1");
    if($selected_wr_num == $latest_wr_num_array['latest']) alert_close("가장 뒤선 게시물입니다.");
    $next_wr_num = $selected_wr_num-1; //뒤의 wr_num 값
    $sql = " select wr_id from g5_write_{$bo_table} where wr_num='{$next_wr_num}'"; //뒤의 wr_num값을 갖는 wr_id를 구한다.
    $result = sql_query($sql); 
    $next_wr_id_array=sql_fetch_array($result);
    $next_wr_id = $next_wr_id_array['wr_id']; //뒤의 wr_id 값

    sql_query(" update g5_write_{$bo_table} set wr_num = '$next_wr_num' where wr_id = '$wr_id'"); //선택된 게시물을 뒷번으로 수정
    sql_query(" update g5_write_{$bo_table} set wr_num = '$selected_wr_num' where wr_id = '$next_wr_id'"); //뒷번 게시물을 선택된번으로 수정


}else { 
    alert("수행 값이 제대로 넘어오지 않았습니다."); 
} 

$msg = "순서변경완료!"; 
$opener_href = "./board.php?bo_table=$bo_table&page=$page&$qstr"; 

?>
<script language="javascript"> 
//alert("<?php echo $msg?>"); 
opener.document.location.href = "<?php echo $opener_href?>"; 
window.close(); 
</script> 

2. 게시판 테마 리스트 파일 수정( /skin/board/boardtheme/list.skin.php)

2-1 하단에 아래 코드 추가(스크립트 영역)

function list_changer(sw) 
{ 
    /*
    var chk_count = 0;

    for (var i=0; i<f.length; i++) {
        if (f.elements[i].name == "chk_wr_id[]" && f.elements[i].checked)
            chk_count++;
    }

    if (!chk_count) {
        alert(document.pressed + "할 게시물을 하나 이상 선택하세요.");
        return false;
    }
    */

    var f = document.fboardlist; 

    var sub_win = window.open("", "move", "width=0, height=0, scrollbars=1"); 

    f.sw.value = sw; 
    f.target = "move"; 
    f.action = "./list_num_update.php"; 
    f.submit(); 
} 

2-2 위치 변경 버튼 추가

   <li><a href="javascript:list_changer('prev');" >위로 이동</a></li>
   <li><a href="javascript:list_changer('change');" >상호 변경</a> </li>
   <li><a href="javascript:list_changer('next');" >아래로 이동</a> </li>

 

 

1. ismobile_module.php 

<?php
	class module {
		function mobileConcertCheck() {
            $mobileArray = array(
                  "iphone"
                , "lgtelecom"
                , "skt"
                , "mobile"
                , "samsung"
                , "nokia"
                , "blackberry"
                , "android"
                , "sony"
                , "phone"
            );

			$checkCount = 0;

			for($num = 0; $num < sizeof($mobileArray); $num++) {
				if(preg_match("/$mobileArray[$num]/", strtolower($_SERVER['HTTP_USER_AGENT']))) {

                                        $checkCount++;

                                        break;

                        	}

			}
			return ($checkCount >= 1) ? "mobile" : "computer";

		}

	}

?>

2. index.php

<?php include("ismobile_module.php"); ?>
<?php $obj = new module(); ?>
<?php  if($obj -> mobileConcertCheck() == "mobile") { 
	// 모바일 영역
 } else { 
 	// PC 영역 } 
?>

 

#php #모바일 #pc #모바일,PC구분하기 

'공부 > Php' 카테고리의 다른 글

[Centos] crontab 를 이용한 php 자동실행, DB 모니터링구현  (0) 2024.02.18
[PHP] If 조건문 한줄로 축약  (0) 2023.12.29
트위터 OAuth Sign in 튜토리얼  (0) 2013.07.22
트위터 oauth with php  (0) 2013.07.22
php 파일 include  (0) 2013.01.11

필요에의해 갤러리형태의 게시판의 리스트를 무한으로 구현해야 했다.

잘 찾아보니 http://webpaper.kr/show/98&page=1&stx=%EC%8A%A4%ED%81%AC%EB%A1%A4 에서 

개발 후 방법을 공유하신게 있어서 커스터마이징 후 기록을 위해 남김

 

 

게시판 스킨/list.skin.php 하단에 아래 코드를 넣어준다. 

물론 게시판 형태에 따라 일부 수정은 해야한다. 

게시판에 리스트 영역의 다음페이지를 불러와 코드를 붙이는 방식.

<script>
var total_page = "<?=$total_page?>";
var now_page = "<?=$page?>";
var roll_page = now_page;


$(window).scroll(function() {
    var chkBtm = parseInt($(document).height()) - parseInt($(window).height());

    if (chkBtm == $(window).scrollTop()) {
        roll_page++;
        if (roll_page <= total_page) {
            callContent(roll_page, 'append');
        }
    } else if ($(window).scrollTop() == 0) {
        now_page--;
        if (now_page > 0) {
            callContent(now_page, 'prepend');
        }
    }
});

function callContent(a, b) {

    var url = "<?=G5_BBS_URL?>/board.php?bo_table=<?=$bo_table?>&page=" + a;
    var tbody = "";
    var thtml = "";
    $.ajax({
        type: "POST",
        url: url,
        dataType: "html",
        success: function(html) {
            tbody = html.split('<article>');
            thtml = tbody[1].split('</article>');
            setTimeout(function() {
                if (b == 'append') {
                    // $(".tbl_head01").find('tbody').append(thtml[0]);
                    $("#fboardlist").append(thtml[0]);

                } 
            }, 1000);

        },
        error: function(xhr, status, error) {
            alert(error);
        }
    });
}
</script>

아래는 최하단 스크롤 부분. 

$(window).scroll(function(){
     
    // 최하단일 경우를 체크하기 위해 최하단 위치값을 지정
    // 화면 문서전체의 길이에서, 현재 창 높이를 뺀 것이 최하단 값
    var chkBtm = parseInt($(document).height()) - parseInt($(window).height());
     
    if(chkBtm == $(window).scrollTop()){        
        // 최하단으로 도달했을 경우
        console.log('바닥입니다!');
    }else if($(window).scrollTop() == 0){
        // 최상단으로 도달했을 경우
        console.log('꼭대기입니다!');
    }
});

오토셋뿐만 아니라 기존에 사용하고 있는 웹호스팅에서 다른 웹호스팅 회사로 이전할 때도 모두 동일합니다.

phpMyAdmin 기준으로 작성되었습니다.

 

대부분의 웹호스팅 회사들은 phpMyAmin을 기본으로 지원하고 있습니다.

호스팅 관리 페이지 등에서 잘 찾아보면 접속 링크가 있을 겁니다.

 

1. PHPMYADMIN 접속(설치방법, Centos7 기준)

# yum -y install phpmyadmin

명령어 한줄로 설치 끝. 다만 외부에서 접속할 수 있도록 하기위해서 설정이 필요

최초엔 127.0.0.1 에서(로컬)만 접속이 된다. 

# nano /etc/httpd/conf.d/phpMyAdmin.conf
<Directory /usr/share/phpMyAdmin/>

AddDefaultCharset UTF-8


<IfModule mod_authz_core.c>

# Apache 2.4

<RequireAny>

Require ip 127.0.0.1

Require ip All granted

Require ip ::1

</RequireAny>

</IfModule>

위 부분에서 <RequireAny>  ~ </RequireAny> 사이에 

Require all granted 를 추가하고, httpd 재시작

# service httpd restart

백업 및 복사 방법

 

 

1. 오토셋이나 기존에 사용하던 웹호스팅에서 DB 백업하기

 


 

왼쪽 데이터베이스 목록에서 백업할 DB를 선택 후 상단 메뉴 중 내보내기 클릭

 

 


 

 

퀵 (전체를 즉시 백업합니다)

커스텀 (원하는 테이블만 선택해서 백업합니다)

 

이번 내용은 홈페이지 전체 서버 이전이 목적이기 때문에 퀵을 선택 후 백업.

커스텀은 특정 게시판이나 특정 테이블만 옮기고 싶을 때 선택해서 백업하면 됩니다. 

실행 버튼 누르면 gnuboard5.sql 파일이 자동으로 컴퓨터에 생성됩니다.
 

 

참고사항 (phpmyadmin 버전이 다른 경우)

 


 

phpmyadmin 버전이 예전 버전이라면 퀵이나 커스텀 선택 창이 아니라 위 화면처럼 뜰 겁니다.

조금 차이만 있을 뿐 과정은 동일합니다.

 

 

2. 신규 웹호스팅에 접속해서 백업해 놓은 DB 복구하기

 

로컬 서버나 기존 웹호스팅 계정에서 백업한 DB 파일을 신규 웹호스팅 서버에 복구하는 방법입니다.

국내에서 많이들 사용하는 cafe24 웹호스팅으로 진행해보겠습니다. 

보안 이슈로 인해서 최근 카페24 호스팅 관리 메뉴에서 phpmyadmin이 사라졌네요. 직접 설치하는 방법입니다.

 

 

DB 복구하기

 


 

phpmyadmin 접속 후 왼쪽 데이터베이스에서 본인 아이디로 생성된 DB를 선택하고 상단 메뉴 중 import 클릭

파일 선택 창에서 autoset 이나 기존 서버에서 백업했던 DB 파일을 선택 후 실행하면 DB는 복구 완료됩니다.

 

 

 

여기서 주의 사항이 있는데 (Maximum size: 21,504 KB)​ 이 부분입니다.

허용 용량 제한이 있어서 db 용량이 너무 크면 phpmyadmin​에서는 에러가 뜰 겁니다.

분할해서 하는 방법도 있지만 이럴 땐 쉘창에서 복구 명령어로 직접 하는 게 낫습니다.

이 내용은 별도로 강좌 글을 올려놓겠습니다 

 

 

3. 홈페이지 전체 파일 및 DATA 파일 이전하기

 

작업한 파일과 폴더 전체를 FTP로 신규 웹호스팅 서버에 그대로 업로드한 후 DATA 폴더 퍼미션을 707로 변경합니다.

기존 웹호스팅에서 다른 웹호스팅으로 이전할 때도 ftp로 기존 웹호스팅에 접속 후 모든 파일을 받아서
신규 웹호스팅으로 그대로 업로드하면 됩니다.

* 일부 파일은 다운 실패가 뜨는 경우가 있는데 대부분 session 파일일 겁니다. 세션 파일은 신경 안 써도 됩니다.

* 이전 후에도 이미지가 안 보인다거나 일부 문제가 생기면 DATA 폴더 하위 폴더까지 퍼미션을 707로 변경해보세요.

 

 

4. DB 설정 파일 수정하기

 

신규 웹호스팅에 옮겼던 data/dbconfig.php 파일 내용을 반드시 수정해야 합니다.

 

define('G5_MYSQL_HOST', 'localhost');

define('G5_MYSQL_USER', 'root');

define('G5_MYSQL_PASSWORD', 'autoset');

define('G5_MYSQL_DB', 'gnuboard5');

define('G5_MYSQL_SET_MODE', false);​ 

 

기존 DB 정보를 신규 웹호스팅 서버 DB 정보로 수정해서 다시 올리면 서버 이전이 완료됩니다.

일부 웹호스팅 회사 중 HOST 가 localhost 가 아닌 곳도 있으니 확인해서 수정하세요.

 

출처 : http://gnustudy.com/bbs/board.php?bo_table=gnu_tip&wr_id=23

 

1. iframe 주소 확인

<iframe src="https://tv.naver.com/embed/11099859?autoPlay=true" frameborder="no" scrolling="no" marginwidth="0" marginheight="0" width="936" height="526" allow="autoplay" allowfullscreen=""></iframe>

=>'tv.naver.com' 부분 화긴

 

2. ./plugin/htmlpurifier/safeiframe.txt

파일을 열고

tv.naver.com/

을 한줄 추가해준다. (끝에 슬래쉬 / 까지 포함)

 

/skin/member/basic/register_form.skin.php 내 약 332번째 줄
        if(f.mb_password.value != f.mb_password_re.value)
        {
            alert("입력하신 비밀번호와 비밀번호확인이 일치하지 않습니다");
            return false;
        }

        if(f.mb_password.value.length<8)
        {
            alert("비밀번호는 문자, 숫자, 특수문자의 조합으로 8 이상으로 입력해주세요.");
            return false;
        }

        if(!f.mb_password.value.match(/([a-zA-Z0-9].*[!,@,#,$,%,^,&,*,?,_,~])|([!,@,#,$,%,^,&,*,?,_,~].*[a-zA-Z0-9])/))
        {
            alert("비밀번호는 문자, 숫자, 특수문자의 조합으로 8 이상으로 입력해주세요.");
            return false;
        }

 

$(".idcheck").click(function(){

var msg = reg_mb_id_check();

 

if(msg == "" || msg == null){

// 중복된 아이디가 존재하지 않는다.

if(!confirm("가입할 수 있는 아이디입니다.\n현재 아이디를 사용하시겠습니까?")){

document.getElementById("reg_mb_id").value = "";

}

}

else

{

// 중복된 아이디가 존재한다.

alert(msg);

}

});

 

 

 

$x = 100000000

x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");

=>  100,000,000

+ Recent posts