CMS솔루션마켓, 이온디 - 워드프레스, 라이믹스, 카페24, 그누보드, 엑셀

Contents Management System

[쿼리문]

<query id="getSubjectExtra" action="select">

    <tables>
        <table name="documents" alias="doc" />
        <table name="document_extra_vars" alias="dev_startdate" type="left join">
            <conditions>
                <condition operation="equal" column="doc.document_srl" default="dev_startdate.document_srl" />
                <condition operation="equal" column="dev_startdate.eid" default="startdate" pipe="and" />
            </conditions>
        </table>
        <table name="document_extra_vars" alias="dev_enddate" type="left join">
            <conditions>
                <condition operation="equal" column="doc.document_srl" default="dev_enddate.document_srl" />
                <condition operation="equal" column="dev_enddate.eid" default="enddate" pipe="and" />
            </conditions>
        </table>
        <table name="document_extra_vars" alias="dev_manager" type="left join">
            <conditions>
                <condition operation="equal" column="doc.document_srl" default="dev_manager.document_srl" />
                <condition operation="equal" column="dev_manager.eid" default="manager" pipe="and" />
            </conditions>
        </table>
        <table name="document_extra_vars" alias="dev_year" type="left join">
            <conditions>
                <condition operation="equal" column="doc.document_srl" default="dev_year.document_srl" />
                <condition operation="equal" column="dev_year.eid" default="year" pipe="and" />
            </conditions>
        </table>
        <table name="document_extra_vars" alias="dev_address" type="left join">
            <conditions>
                <condition operation="equal" column="doc.document_srl" default="dev_address.document_srl" />
                <condition operation="equal" column="dev_address.eid" default="addresslist" pipe="and" />
            </conditions>
        </table>
        <table name="document_extra_vars" alias="dev_category" type="left join">
            <conditions>
                <condition operation="equal" column="doc.document_srl" default="dev_category.document_srl" />
                <condition operation="equal" column="dev_category.eid" default="category" pipe="and" />
            </conditions>
        </table>
    </tables>
    <columns>
        <column name="doc.module_srl" />
        <column name="doc.document_srl" />
        <column name="doc.title" />
        <column name="dev_year.value" alias="year" />
        <column name="dev_address.value" alias="address" />
        <column name="dev_startdate.value" alias="startdate" />
        <column name="dev_enddate.value" alias="enddate" />
        <column name="dev_manager.value" alias="manager" />
        <column name="dev_category.value" alias="category" />
    </columns>
    <conditions>
        <condition operation="equal" column="doc.module_srl" var="module_srl" filter="number" notnull="notnull" />
        <condition operation="like" column="dev_address.value" var="address" pipe="and" />
        <condition operation="like" column="dev_year.value" var="year" pipe="and" />
        <condition operation="like" column="dev_startdate.value" var="startdate" pipe="or" />
        <condition operation="like" column="dev_enddate.value" var="enddate" pipe="or" />
        <condition operation="like" column="dev_manager.value" var="manager" pipe="or" />
        <condition operation="like" column="dev_category.value" var="category" pipe="or" />
    </conditions>
    <navigation>
        <index var="sort_index" default="startdate" order="desc" />
        <list_count var="list_count" default="20" />
        <page_count var="page_count" default="10" />
        <page var="page" default="1" />
    </navigation>
</query>

[설명]

지난번에 올린 게시물에서는 모든 확장변수를 한큐에 검색하는 것이었고, 이 쿼리문은

여러개의 확장변수를 각각 검색 가능한 쿼리문입니다.


[준비물]

1. 쿼리문.xml

2. 게시판 확장변수 설정

3. 기본 게시판 리스트와는 별개로 동작되는 list 파일


3번의 경우 검색폼부터 리스트까지 별도로 작업해야합니다.

3. 기본 게시판 리스트와 별개로 동작되는 리스트파일

1) 리스트 부분

<block>
    {@
    $obj = new stdClass();
    $obj->module_srl = $module_info->module_srl;
    $obj->year = isset($_GET['year']) ? $_GET['year'] : NULL;
    $obj->address = isset($_GET['addresslist']) ? $_GET['addresslist'] : NUll;
    $obj->page = Context::get('page');
    $obj->page_navigation = Context::get('page_navigation');
    $obj->total_count = Context::get('total_count');
    $obj->total_page = Context::get('total_page');
    $query_path = $module_info->module."/skins/".$module_info->skin; // 쿼리경로
    $document_list = executeQueryArray($query_path.'.getSubjectExtra',$obj); // 쿼리문
    }
</block>
<section class="cd-timeline js-cd-timeline">
    <div class="container max-width-lg cd-timeline__container">
        <div class="cd-timeline__block today" cond="!$mod=='search'">
            <div>오늘</div>
            <p>{date("Y.m.d")}</p>
        </div>
     <!--@foreach($document_list->data as $no => $document)-->
        {@
        $document = getModel('document')->getDocument($document->document_srl);
        $document_cover = (new TimelineItem)->getCoverContent($document->document_srl);
        }
        <div class="cd-timeline__block <!--@if($document->getExtraEidValue('startdate')=='20180101')-->start<!--@end-->" >
         <div class="cd-timeline__img cd-timeline__img--picture">
                {@
                $category = implode('', $document->getExtraEidValue('category'));

                switch($category):
                case '지역 문제 해결과 지원':
                $category = 'cat1';
                break;
                case '협력 및 네트워킹':
                $category = 'cat2';
                break;
                case '교육과 역량강화':
                $category = 'cat3';
                break;
                case '프로젝트 관리와 지원':
                $category = 'cat4';
                break;
                case '조사/분석':
                $category = 'cat5';
                break;
                case '정보제공과 홍보':
                $category = 'cat6';
                break;
                case '조직운영 및 관리':
                $category = 'cat7';
                break;
                endswitch;
                }
           <img src="img/ico-{$category}.png" alt="Picture">
         </div>
         <div class="cd-timeline__content text-component">
           <h2>{$document->getTitle()}</h2>
           <p class="color-contrast-medium">
                <ul>
                    <li>
                        {@
                        if($document->getExtraEidValue('startdate')):
                        $startdate = date("Y.m.d", strtotime($document->getExtraEidValue('startdate')));
                        else:
                        $startdate = '';
                        endif;

                        $enddate = date("Y.m.d", strtotime($document->getExtraEidValue('enddate')));
                        }

                        {$startdate} - {$enddate}
                    </li>
                    <li>
                        {@
                        $town = explode('|',$document->getExtraEidValue('addresslist'))
                        }
                        <block loop="$town=>$val">
                            {@
                            $val = explode(' ',$val);
                            }
                            <div>{$val[0]}({$val[1]})</div>
                        </block>
                        <block cond="0">{$town[0]}({$town[1]})</block>


                    </li>
                </ul>

              </p>

           <div class="flex justify-between items-center">
            <span class="cd-timeline__date">
                    {$startdate}
                </span>
            <a href="{getUrl('document_srl',$document->document_srl,'type','timeline')}" class="btn btn--subtle">자세히 보기</a>
           </div>
         </div>
        </div>
     <!--@endforeach-->
   </div>
</section>

2) 검색 부분

<form name="ap_extra_search " action="{getUrl()}" method="get" class="ap_extra_search timeline" style="width: 90rem">
    <!--<input type="hidden" name="act" value="">-->
    <input type="hidden" name="mod" value="search">
    <!--<input type="hidden" name="error_return_url" value="{getUrl('','mid',$mid,'type','timeline')}" />
    <input type="hidden" name="success_return_url" value="{getUrl('','mid',$mid,'type','timeline')}" />-->
    <input type="hidden" name="type" value="timeline">
    <input type="hidden" name="vid" value="{$vid}">
    <input type="hidden" name="mid" value="{$mid}">
    <input type="hidden" name="year" value="{$year}">
    <input type="hidden" name="category" value="{$category}">
    <input type="hidden" name="addresslist" value="{$addresslist}" id="addresslist">
    <div class="form-body">
        <div class="exsearch-content" style="width: 90%">
            <div class="input-group">
                <select name="addressRegion" id="addressRegion1">
                    <option>읍면 선택</option>
                    <option value="장수읍" selected|cond="$_GET['addressRegion']=='장수읍'">장수읍</option>
                    <option value="산서면" selected|cond="$_GET['addressRegion']=='산서면'">산서면</option>
                    <option value="번암면" selected|cond="$_GET['addressRegion']=='번암면'">번암면</option>
                    <option value="장계면" selected|cond="$_GET['addressRegion']=='장계면'">장계면</option>
                    <option value="천천면" selected|cond="$_GET['addressRegion']=='천천면'">천천면</option>
                    <option value="계남면" selected|cond="$_GET['addressRegion']=='계남면'">계남면</option>
                    <option value="계북면" selected|cond="$_GET['addressRegion']=='계북면'">계북면</option>
                </select>
            </div>
            <div class="input-group">
                <select name="addressDo" id="addressDo1">
                    <option value="">전체</option>
                </select>
            </div>
            <div class="input-group">
                <select name="addressSiGunGu" id="addressSiGunGu1">
                    <option value="">전체</option>
                </select>
            </div>
            <div class="input-group">
                <select name="year">
                    <option value="">추진년도</option>
                    <!--@for($i = date('Y'); $i >= 2018; $i--)-->
                    <option value="{$i}" <!--@if($_GET['year']==$i)-->selected<!--@end-->>{$i}</option>
                    <!--@end-->
                </select>
                <label>추친년도</label>
            </div>
            <div class="input-group">
                <input type="text" class="text rx_ev_text itx" name="extra_vars3" value="" placeholder="지역구">
                <label>지역구</label>
            </div>
            <div class="input-group" style="display: flex;align-items: center;gap: 4px;">
                <input type="checkbox" class="text rx_ev_text itx" id="use_town" name="use_town" value="" style="width: auto" checked|cond="!$addresslist">
                <label for="use_town" style="display:inline;font-size:1em;">
                    해당없음
                </label>
            </div>
            <div class="input-group">
                <div class="exsearch-footer">
                    <input type="submit" value="검색">
                    <input type="button" name='reset' value="검색초기화" onclick="location.href='{getUrl('','mid',$mid)}'" cond="$mod=='search'"/>
                </div>
            </div>
        </div>

    </div>
    <div class="cat-wrap">
        <ul>
            <li data-category="지역 문제 해결과 지원">
                <input type="checkbox" value="지역 문제 해결과 지원" name="category" style="display:none" checked />
                <span class="category">지역 문제 해결과 지원</span><br>
                <span class="cnt">

                {$oDocument->getExtraEidValue('category2')}
                </span>
            </li>
            <li data-category="협력 및 네트워킹">
                <input type="checkbox" value="협력 및 네트워킹" name="category" style="display:none" checked />
                <span class="category">협력 및 네트워킹</span><br><span class="cnt">(0)</span>
            </li>
            <li data-category="교육과 역량강화">
                <input type="checkbox" value="교육과 역량강화" name="category" style="display:none" checked />
                <span class="category">교육과 역량강화</span><br><span class="cnt">(0)</span>
            </li>
            <li data-category="프로젝트 관리와 지원">
                <input type="checkbox" value="프로젝트 관리와 지원" name="category" style="display:none" checked />
                <span class="category">프로젝트 관리와 지원</span><br><span class="cnt">(0)</span>
            </li>
            <li data-category="조사/분석">
                <input type="checkbox" value="조사/분석" name="category" style="display:none" checked />
                <span class="category">조사/분석</span><br><span class="cnt">(0)</span>
            </li>
            <li data-category="정보제공과 홍보">
                <input type="checkbox" value="정보제공과 홍보" name="categories" style="display:none" checked />
                <span class="category">정보제공과 홍보</span><br><span class="cnt">(0)</span>
            </li>
            <li data-category="조직운영 및 관리">
                <input type="checkbox" value="조직운영 및 관리" name="category" style="display:none" checked />
                <span class="category">조직운영 및 관리</span><br><span class="cnt">(0)</span>
            </li>
        </ul>

    </div>
</form>

3) 자바스크립트 부분

<script>
    $(function() {
        $("li[data-category]").click(function(){
            $(this).find("input[type=checkbox]").prop("checked", !$(this).find("input[type=checkbox]").prop("checked"));
        });
        //마을목록 데이터
        $.ajax({
            url: '/modules/board/skins/jslocal_timeline/func/townlist.php',
            dataType: 'json',
            async: false
        }).done(function(e) {
            window.town = e;
        });
        <!--@if(!$addressRegion)-->
//        $("#addressRegion1").html("<option value=\"\">읍면선택</option>");
//
//        Object.keys(window.town).forEach(function(e) {
//            $(`<option value="${e}">${e}</option>`).appendTo("#addressRegion1");
//        });
        <!--@end-->
        $("#addressDo1").html("<option value=\"\">리선택</option>");
        $("#addressSiGunGu1").html("<option value=\"\">마을선택</option>");
        $("#addressRegion1").change(function(ev) {
            $("#addressDo1").html("<option value=\"\">리선택</option>");
            $("#addressSiGunGu1").html("<option value=\"\">마을선택</option>");
            if ($(this).val() != '') {
                Object.keys(window.town[$(this).val()]).forEach(function(e) {
                    $(`<option value="${e}">${e}</option>`).appendTo("#addressDo1");
                });
            }
        });
        $("#addressDo1").change(function(ev) {
            $("#addressSiGunGu1").html("<option value=\"\">마을선택</option>");
            if ($("#addressRegion1").val() != '' && $(this).val() != '') {
                window.town[$("#addressRegion1").val()][$(this).val()].forEach(function(e) {
                    $(`<option value="${e}">${e}</option>`).appendTo("#addressSiGunGu1");
                })
            }
        });
        // $c = $(".cd-timeline__container");
        // $i = get_data();
        // $c.html("");
        $("li[data-category] span.cnt").text("(0)").data("cnt", 0);
    //     function get_el(e) {
    //         return `
   // <div class="cd-timeline__block">
   //     <div class="cd-timeline__img cd-timeline__img--picture">
   //       <img src="img/cd-icon-picture.svg" alt="Picture">
   //     </div>
    //
   //     <div class="cd-timeline__content text-component">
   //       <h2><a href="/{$mid}/${e.document_srl}?type=timeline">${e.title}</a></h2>
   //       <p class="color-contrast-medium"></p>
   //     </div>
   //   </div>
   // `;
    //     }
        // $($i).each(function(i,e) {
        //     var t = e.regdate.toString().match(/^(\d\d\d\d)(\d\d)(\d\d)/);
        //     $(get_el(e)).appendTo($c);
        //     $("li[data-category='" + e.category + "'] span.cnt").data("cnt", $("li[data-category='" + e.category + "'] span.cnt").data("cnt") +1);
        //     $("li[data-category='" + e.category + "'] span.cnt").text("(" + $("li[data-category='" + e.category + "'] span.cnt").data("cnt") + ")");
        // });
        // $("[name='ap_extra_search'] input[type='submit']").click(function(e) {
        //     e.preventDefault();
        //     $c = $(".cd-timeline__container");
        //     $i = get_data();
        //     $c.html("");
        //     $("li[data-category] span.cnt").text("(0)").data("cnt", 0);
        //     $($i).each(function(i,e) {
        //         var t = e.regdate.toString().match(/^(\d\d\d\d)(\d\d)(\d\d)/);
        //         console.log(t);
        //         $(get_el(e)).appendTo($c);
        //         $("li[data-category='" + e.category + "'] span.cnt").data("cnt", $("li[data-category='" + e.category + "'] span.cnt").data("cnt") +1);
        //         $("li[data-category='" + e.category + "'] span.cnt").text("(" + $("li[data-category='" + e.category + "'] span.cnt").data("cnt") + ")");
        //     });
        // });
    })
</script>
<script>
    document.addEventListener('DOMContentLoaded', function() {
        // 각 셀렉트 요소에 대한 이벤트 리스너 추가
        var addressRegionSelect = document.getElementById('addressRegion1');
        var addressDoSelect = document.getElementById('addressDo1');
        var addressSiGunGuSelect = document.getElementById('addressSiGunGu1');
        var addressInput = document.querySelector('input[name="addresslist"]');

        addressRegionSelect.addEventListener('change', updateAddressValue);
        addressDoSelect.addEventListener('change', updateAddressValue);
        addressSiGunGuSelect.addEventListener('change', updateAddressValue);

        // 체크박스에 대한 이벤트 리스너 추가
        var useTownCheckbox = document.getElementById('use_town');
        useTownCheckbox.addEventListener('change', function() {
            if (useTownCheckbox.checked) {
                // 해당없음 체크하면 셀렉트 값과 input[name='address'] 초기화
                // addressRegionSelect.value = '읍면 선택';
                // addressRegionSelect.text = '읍면 선택';
                // addressDoSelect.value = '전체';
                // addressSiGunGuSelect.value = '전체';
                // addressInput.value = '';

                // var option = document.createElement('option');
                // option.text = '읍면 선택';
                // option.value = ''; // 빈 값으로 설정할 경우 선택되었을 때 value가 빈 문자열이 됩니다.
                // addressRegionSelect.add(option, 0); // 첫 번째 위치에 추가
                // addressDoSelect.options[1].selected = true;
                // break;

                addressRegionSelect.selectedIndex = 0;
                addressDoSelect.selectedIndex = 0;
                addressSiGunGuSelect.selectedIndex = 0;
            }
        });

        // 주소 값 업데이트 함수
        function updateAddressValue() {
            useTownCheckbox.checked = false;
            var regionValue = addressRegionSelect.value;
            var doValue = ' ' + addressDoSelect.value;
            var siGunGuValue = ' ' + addressSiGunGuSelect.value;
            var address = regionValue + doValue + siGunGuValue;

            // 선택된 값이 '읍면 선택', '전체' 등이 아니면 input[name='address']에 업데이트
            if (regionValue !== '읍면 선택' && doValue !== '리 선택' && siGunGuValue !== '마을 선택') {
                addressInput.value = address.trimRight();
            } else {
                // 선택된 값이 '읍면 선택', '전체' 등이면 input[name='address'] 초기화
                addressInput.value = '';
            }
        }

    });

    // 해당없음 체크시 동작하는 스크립트
    // Wait for the DOM to be ready
    document.addEventListener("DOMContentLoaded", function() {
        // Get the checkbox and text field elements
        var checkbox = document.getElementById("use_town");
        var addresslistField = document.getElementById("addresslist");

        // Add an event listener to the checkbox
        checkbox.addEventListener("change", function() {
            // If the checkbox is checked, clear the text field; otherwise, set its original value
            if (checkbox.checked) {
                addresslistField.value = "";
            } else {
                // You may set the original value here if needed
            }
        });
    });
</script>
 
댓글은 로그인 사용자만 작성 가능합니다. 로그인하기