Profile
이온디

2017.12.06

개발팁

XE 게시판에 스크립트로 data 밀어넣기 팁

조회 수 16 추천 수 0

xpressengine(XE) 게시판에 파일 기반으로 된 data 자동으로 DB에 Insert 시키는 팁


XE  : version: 1.7.4.1 (XE 버전별 DB 컬럼이나 테이블 항목 차이는 있을수 있음)

OS : CentOS release 6.5 (Final) 에서 진행됨

DB : mysql  Ver 14.14 Distrib 5.5.38, for Linux (x86_64) using readline 5.1


요약 :


1) 새로운 게시판 생성 / 사용자 정의 이름 변수명 인지


2) 텍스트 형태로 신규 게시판에 밀어넣을 data 생성 /  "사용자 정의 변수" 각 필드에 부합되는 내용으로


3) DB 에서 중요한 부분 확인 ( document_srl , module_srl 번호 등)


4) Script 작성 및 실행 ( 3)번 내용을 잘 확인하여 스크립트에 대입)




1. xe 게시판 관리자에서 아래와 같이  "사용자 정의" 변수로 새로운 게시판 생성






2. cat list 파일 설명


- list 파일 내용은 , 로 구분 총 11개의 필드로 구성 (사용자 변수 타입에 맞게 대입 총 11개)


- 엑셀로 편집하여 -> vi list 복사-> :1,$ s/탭/,/g  (탭구분을 -> , 콤마로 변경)  


- sed -i 's/ //g' list  (list 파일 내용중 "빈칸제거") 

  (업 체명 or 업체 명  <- 빈칸이 들어가면 스크립트 실행시 제대로 import 되지 않음 )


업체명㈜,123456789,.,운영,.,HOST-HV-HSOL2,10.77.10.207,4,16,600,.
(주)업체명,123456789,.,운영,2,HOST-HV-BUU,10.77.10.246,4,16,300,.
.
.
.
.
.
.
.
한국업체명,123456789,.,해지,2,HOST-HHBT,10.205.14.12,4,16,1000,.
업체명가나다㈜,123456789,.,운영,2,HOST-DSTH,10.205.14.13,4,8,300,.



3. Mysql DB 확인 (data insert 스크립트 내에 사용될 컬럼 정보임)


- xe_documents 테이블 


- document_srl 컬럼 마지막 번호 (매우 중요) 아래서 설명 예정

  103009


- module_srl 컬럼  (1번에서 생성한 게시판 모듈 번호)

  101354


위 내용은 xe 로직상 모든 게시판 document(게시물) 에 대하여  자동으로 계산되어 부여되는 시리얼 번호 

(xe_sequence 테이블 , xe_documents 및  document_srl 컬럼과도 관계가 있다고함)


자세한 내용은 xpressengine 공식 홈페이지 참조




  



4. Script  내용 및 실행


- 1번에서 설정한 사용자 변수별로 list  파일에서 읽어서 ->  mysql 명령으로 -> insert 


- 중요 사항 


          module_srl  ->  3번에서 확인한 101354

          document_srl -> 3번에서 확인한 마지막 값보다 무조건 크게 입력 ( 필자는 100정도 이상 크게줌)

          var_idx -> 1번에서 사용자 변수별 가장 첫번째 항목  (사용자 정의 변수별로 각각 맞춰 줘야함)


    이유

          스크립트 실행시 insert error 및 

          Duplicate entry ‘0’ for key ‘PRIMARY' 라는 에러를 뿌리면서 글작성이 안됨.

          그리고 기준 운영중인 게시판에도 영향을 미칠수 있음


         



#!/bin/bash -x


hosting_company=`awk -F "," '{print $1}' ./list`
hosting_serial=`awk -F "," '{print $2}' ./list`
hosting_status=`awk -F "," '{print $4}' ./list`
hosting_product=`awk -F "," '{print $3}' ./list`
hosting_date=`awk -F "," '{print $11}' ./list`
hosting_sname=`awk -F "," '{print $6}' ./list`
hosting_ip=`awk -F "," '{print $7}' ./list`
hosting_cpu=`awk -F "," '{print $8}' ./list`
hosting_memory=`awk -F "," '{print $9}' ./list`
hosting_hdd=`awk -F "," '{print $10}' ./list`
hosting_sql=`awk -F "," '{print $5}' ./list`




### hosting_company


NUM=103100             <-- xe_documents 테이블 document_srl 컬럼 마지막 번호 보다 큰값  자동으로 1씩 증가하게 


for i in ${hosting_company}
do
let NUM=NUM+1
hosting_company=`echo $i`


mysql -uroot -p'PasworD' xe -Bse 'INSERT INTO `xe`.`xe_documents` (`document_srl`, `module_srl`, `category_srl`, `lang_code`, `is_notice`, `title`, `title_bold`, `title_color`, `content`, `readed_count`, `voted_count`, `blamed_count`, `comment_count`, `trackback_count`, `uploaded_count`, `password`, `user_id`, `user_name`, `nick_name`, `member_srl`, `email_address`, `homepage`, `tags`, `extra_vars`, `regdate`, `last_update`, `last_updater`, `ipaddress`, `list_order`, `update_order`, `allow_trackback`, `notify_message`, `status`, `comment_status`) VALUES ("'${NUM}'", "101354", "0", "ko", "N", "Title", "N", "N", "", "0", "0", "0", "0", "0", "0", NULL, "admin", "admin", "admin", "4", "useruser@xxx.com", "", NULL, "N;", "20170629110002", "20170629110002", NULL, "10.10.20.7", "-'${NUM}'", "-'${NUM}'", "N", "N", "PUBLIC", "ALLOW");


INSERT INTO `xe_document_extra_vars`(`module_srl`, `document_srl`, `var_idx`, `lang_code`, `value`, `eid`) VALUES ("101354","'${NUM}'","1","ko","'${hosting_company}'","hosting_company");'   


  # var_idx 번호 중요




done


       #     붉은색 부분을 명확하게 확인후 기입 


### hosting_serial


NUM=103100


for i in ${hosting_serial}
do
let NUM=NUM+1
hosting_serial=`echo $i`


mysql -uroot -p'PasworD' xe -Bse 'INSERT INTO `xe_document_extra_vars`(`module_srl`, `document_srl`, `var_idx`, `lang_code`, `value`, `eid`) VALUES ("101354","'${NUM}'","2","ko","'${hosting_serial}'","hosting_serial");'


done


###


### hosting_status


NUM=103100


for i in ${hosting_status}
do
let NUM=NUM+1
hosting_status=`echo $i`


mysql -uroot -p'PasworD' xe -Bse 'INSERT INTO `xe_document_extra_vars`(`module_srl`, `document_srl`, `var_idx`, `lang_code`, `value`, `eid`) VALUES ("101354","'${NUM}'","3","ko","'${hosting_status}'","hosting_status");'


done


###


### hosting_product


NUM=103100


for i in ${hosting_product}
do
let NUM=NUM+1
hosting_product=`echo $i`


mysql -uroot -p'PasworD' xe -Bse 'INSERT INTO `xe_document_extra_vars`(`module_srl`, `document_srl`, `var_idx`, `lang_code`, `value`, `eid`) VALUES ("101354","'${NUM}'","4","ko","'${hosting_product}'","hosting_product");'


done


###


### hosting_date


NUM=103100


for i in ${hosting_date}
do
let NUM=NUM+1
hosting_date=`echo $i`


mysql -uroot -p'PasworD' xe -Bse 'INSERT INTO `xe_document_extra_vars`(`module_srl`, `document_srl`, `var_idx`, `lang_code`, `value`, `eid`) VALUES ("101354","'${NUM}'","5","ko","'${hosting_date}'","hosting_date");'


done


###


### hosting_sname


NUM=103100


for i in ${hosting_sname}
do
let NUM=NUM+1
hosting_sname=`echo $i`


mysql -uroot -p'PasworD' xe -Bse 'INSERT INTO `xe_document_extra_vars`(`module_srl`, `document_srl`, `var_idx`, `lang_code`, `value`, `eid`) VALUES ("101354","'${NUM}'","6","ko","'${hosting_sname}'","hosting_sname");'


done


###


### hosting_ip


NUM=103100


for i in ${hosting_ip}
do
let NUM=NUM+1
hosting_ip=`echo $i`


mysql -uroot -p'PasworD' xe -Bse 'INSERT INTO `xe_document_extra_vars`(`module_srl`, `document_srl`, `var_idx`, `lang_code`, `value`, `eid`) VALUES ("101354","'${NUM}'","7","ko","'${hosting_ip}'","hosting_ip");'


done


###


### hosting_cpu


NUM=103100


for i in ${hosting_cpu}
do
let NUM=NUM+1
hosting_cpu=`echo $i`


mysql -uroot -p'PasworD' xe -Bse 'INSERT INTO `xe_document_extra_vars`(`module_srl`, `document_srl`, `var_idx`, `lang_code`, `value`, `eid`) VALUES ("101354","'${NUM}'","8","ko","'${hosting_cpu}'","hosting_cpu");'


done


            위와 같은 형식으로 "사용자 정의 이름" 별로 스크립트 내용 추가
.
.
.
.
.
.





10,000 줄 이상 입력시에도 DB나 서버 부하 없이 잘 insert 됨 



5. 결과 화면


  스크립트 실행후 자동으로 data 가 insert 된 결과 화면 




상세화면 


Profile
7
Lv
이온디

이온디 홈페이지는 간결하며,

 손쉽게 수정할 수 있습니다.

1개의 댓글

Profile
구미호
2017.12.28
잘 봤습니다 공부 해야 합니다
에디터
번호 제목 조회 수 추천 수 날짜
공지 [라이믹스] Another XE, 라이믹스 소개/설치하기 23 0 2019.01.09
공지 [XE소식] XE제작문의는 이온디 제작의뢰로 가주세요. 19 0 2018.12.10
공지 [사이트맵] XE/라이믹스 사이트맵 불편 기능을 알려주세요. 44 0 2017.09.23
290 [자유게시판] XE 다국어 사이트 폐쇄의 아쉬운점 25 0 2017.12.30
289 [아이디어/건의] 대시보드 UI 변경 건 16 0 2017.12.29
288 [사용팁] 레이아웃에서 게시판 모듈일떄만 보여주려면 16 0 2017.12.13
287 [강좌] xe개발자 k_rifle님 블로그 13 0 2017.12.13
[개발팁] XE 게시판에 스크립트로 data 밀어넣기 팁 1 16 0 2017.12.06
285 [아이디어/건의] xe 멀티검색/다중검색 106 0 2017.12.06
284 XE 문서수정내역 애드온 만들기 18 0 2017.11.27
283 [사용팁] 최근게시물 위젯에서 유투브 썸네일 출력하기 1 17 0 2017.11.20
282 [누리고] 누리고 스토어 가격표기 0원 -> Free 15 0 2017.10.27
281 [에디터] 프로알라 에디터 붙여넣기 스타일 적용하는 방법 20 0 2017.10.27
280 [에디터] 프로알라 에디터 붙여넣기 스타일 적용하는 방법 52 0 2017.10.26
279 [누리고] XE 쇼핑몰 운영의 특징 20 0 2017.10.24
278 [에디터] 프로알라 에디터 툴바 설정해보기(브런치, 미디엄 글쓰기 환경) 70 0 2017.10.22
277 [에디터] Froala Editor Toolbar 커스텀 설정 25 0 2017.10.22
276 [에디터] Froala Editor 추가설정 예시 31 0 2017.10.22