2019.02.09: 이 포스팅은 WP 4를 기준으로 만들어졌던 것으로 WP 5에서는 테스트되지 않았습니다.
중대한 문제 – 구조 간소화
작업을 진행하다보니 다음과 같은 문제가 생긴다.
바로 content-xxx.php와 archives-xxx.php 등을 너무 막 써버렸다.
무슨말인고 하니, 저 요소들은 재활용이 가능한데, 예를 들자면
이런식으로, 각각의 파일은 각각의 역할에 맞춰 써야하나, 나는 content-xxx.php파일을 전체 자료 리스트 출력을 위해 썼다던지 하는 문제가 생겨버렸다.
이러면 나중에 파일이 쓸데없이 많아지는 문제가 발생하는 것이다.
블로그를 게시판처럼 쓰게 되면서 발생해버린 문제인데, 나름 해결책은 여러개가 있을 것 같다.
일단 나는 이렇게 해결하기로 했다.
(1) Archive-xxx에서 list를 출력하는 부분을 다음과 같은 규칙으로 사용.
get_template_part( ‘template-parts/list’, $post->post_type );
content를 list로 바꾸고, 실제로 template-parts 폴더의 이전에 만든 content-patients.php를 list-patients.php로 바꾸었다.
즉 archive-patients.php와 list-patients.php 가 한쌍
(2) 그러면 medicaldata도 역시, archive파일에 위의 php코드를 변경,
그러면 archive-medicaldata.php, list-medicaldata.php가 한쌍
(3) 검색파일(search.php)에서는 고민을 해볼수 있다. 어차피 주민등록번호로 검색하면 단 하나의 자료가 나오는데, 이것도 리스트처럼 보였다가 쓰려면 list-…를 쓰면되고, 바로 그 하나를 들어가볼꺼라면 content…를 써면 되는 것이다.
아까 만들었던, content-search_citizen은 제거, search.php에서 template를 list-patients로 바꾸면 잘 된다.
결국 search.php 와 list-patients.php 도 한쌍
간략해졌다. 이제 환자 번호에 링크를 부여하고 그 링크를 눌렀을 때 나오는 페이지에서 그 환자에 해당하는 자료만 다시 list-medicaldata.php로 넘겨주는 식으로 하면, 아주 간소해지게 된다.
환자 ID 클릭을 통한 자료 나열
Custom UI를 통해 인식되는 single-patient.php 파일을 single.php를 통해 복사한다. 그리고
get_template_part( ‘template-parts/content’, ‘patient’ );
를 유지시킨다. (환자 한명을 보겠다는 이야기)
list-patients가 만들어졌으니, content-patients는 다시 구성되어야 한다. 아예 삭제하고 content-single.php를 복사해서 만드는게 낫다.
이번에는 그 환자의 medical data만 불러오면 되니, 기존 content-single에 있는 다음 내용들을 삭제한다.
the_title( ); , the_content();
그리고 다음 코드를 넣고
$pts_id = get_post_meta($post->ID, 'pts_id')[0]; $args = array( 'post_type' => 'medicaldata', 'meta_query' => array( array( 'key' => 'pts_rec_id', 'value' => $pts_id, ), ), ); $query = new WP_Query( $args );
사실 앞에 포스팅한 medicaldata 찾기와 동일하다.
그리고 적절한 위치에 아래 코드들을 삽입하면
<header class="entry-header"> <?php echo "ID : ".$pts_id; ?>(<?=$query->found_posts?>) </header><!-- .entry-header --> <table> <?php // Start the Loop. while ( $query->have_posts() ) : $query->the_post(); get_template_part( 'template-parts/list', 'medicaldata'); // End the loop. endwhile; $query->reset_postdata(); ?> </table>
출력이 잘 된다.
파일이 불려지는 흐름
archive-patients.php / Search.php –> list-patients.php
: 전체 혹은 검색된 환자 list 출력 (list를 클릭하면 sinlge-patients.php 를 호출)
archive-medicaldata.php –> list-medicaldata.php
: 전체 자료 list 출력
single-patients.php –> list-medicaldata.php
: 그 환자에 해당하는 자료 list 출력 (list를 클릭하면 single-medicaldata.php 를 호출)
이런 흐름인 것이다.
다음 포스팅에서는 & References
#1. pts_id 와 pts_rec_id가 동일한 data만 추출하는 것. 그래야 그 환자의 자료만 볼 수 있을테니까.
#2. 레코드 삭제버튼
#3. 환자 데이터를 삭제할때 하위 레코들도 함께 삭제하기(귀찮을 것 같다)
#4. 환자등록시 주민등록번호를 받아서 암호화 시켜 저장하고, 주민등록번호로 환자 record를 찾을 수 있게 하기.
#5. 환자ID를 통한 환자 데이터 세부조회, 날짜별 정렬, 글쓴이 표시 등등
#6. DB를 엑셀(xml)로 export하기
PHPExcel 이라는 라이브러리를 이용한다 (https://phpexcel.codeplex.com/)