This commit is contained in:
shim
2023-04-17 11:06:08 +09:00
parent d0b393aa97
commit 76264e09ad
4686 changed files with 552713 additions and 0 deletions

View File

@@ -0,0 +1,21 @@
The RBL License
Copyright (c) 2011-2018 Redblock, Inc.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

View File

@@ -0,0 +1,6 @@
# 알씨 기본형
모바일 전용 통합검색 테마 입니다.
## 주요 기능

View File

@@ -0,0 +1,172 @@
var modal_search = $('#modal-search');
var modal_search_none = '<div class="p-5 text-xs-center text-muted" data-role="none">검색된 자료가 없습니다.</div>';
function getSearchResult(settings) {
var wrapper = settings.wrapper;
var start = settings.start;
var keyword = settings.keyword;
var sort = settings.sort;
var recnum = settings.recnum;
var markup_file = settings.markup_file;
var none = settings.none;
var totalPage = settings.totalPage;
var totalNUM = settings.totalNUM;
var currentPage =1; // 처음엔 무조건 1, 아래 더보기 진행되면서 +1 증가
var prevNUM = currentPage * recnum;
var moreNUM = totalNUM - prevNUM ;
wrapper.find('[data-role="list-post"]').loader({ position: 'inside' });
$.post(rooturl+'/?r='+raccount+'&m=post&a=get_postSearch',{
start: start,
keyword : keyword,
sort : sort,
recnum : recnum,
p : currentPage,
markup_file : markup_file
},function(response,status){
if(status=='success'){
var result = $.parseJSON(response);
var list=result.list;
var num=result.num;
if (list) wrapper.find('[data-role="list-post"]').html(list)
else wrapper.find('[data-role="list-post"]').html(none)
wrapper.find('[data-role="keyword-reset"]').removeClass("hidden");
wrapper.find('[data-plugin="timeago"]').timeago();
$('[data-role="search"]').find('[name="keyword"]').blur();
//무한 스크롤
wrapper.closest('.content').infinitescroll({
dataSource: function(helpers, callback){
var nextPage = parseInt(currentPage)+1;
if (totalPage>currentPage) {
$.post(rooturl+'/?r='+raccount+'&m=post&a=get_postSearch',{
start: start,
sort: sort,
recnum : recnum,
markup_file : markup_file,
p : nextPage
},function(response) {
var result = $.parseJSON(response);
var error = result.error;
var list=result.list;
if(error) alert(result.error);
callback({ content: list });
currentPage++; // 현재 페이지 +1
console.log(currentPage+'페이지 불러옴')
wrapper.find('[data-plugin="timeago"]').timeago();
//wrapper.find('[data-plugin="markjs"]').mark(keyword); // marks.js
});
} else {
callback({ end: true });
console.log('더이상 불러올 페이지가 없습니다.')
}
},
appendToEle : wrapper,
percentage : 95, // 95% 아래로 스크롤할때 다움페이지 호출
hybrid : false // true: 버튼형, false: 자동
});
} else {
alert(status);
}
});
} // getSearchResult
//검색 모달이 열렸을때
modal_search.on('shown.rc.modal', function () {
var modal = $(this);
setTimeout(function() {
modal_search.find('[name="keyword"]').val('').focus();
}, 100);
$('#modal-post-view').find('[data-act="pauseVideo"]').click(); //유튜브 미니플레이어 재생정지
modal_search.find('[name="keyword"]').autocomplete({
lookup: function (query, done) {
$.getJSON(rooturl+"/?m=tag&a=searchtag", {q: query}, function(res){
var sg_tag = [];
var data_arr = res.taglist.split(',');//console.log(data.usernames);
$.each(data_arr,function(key,tag){
var tagData = tag.split('|');
var keyword = tagData[0];
var hit = tagData[1];
sg_tag.push({"value":keyword,"data":hit});
});
var result = {
suggestions: sg_tag
};
done(result);
});
},
onSelect: function (suggestion) {
if (modal_search.find('[name="keyword"]').val().length >= 1) {
modal_search.find('form').submit();
console.log('검색')
}
}
});
})
//검색실행
modal_search.find('form').submit( function(e){
var modal = modal_search;
var keyword = modal_search.find('[name="keyword"]').val();
e.preventDefault();
e.stopPropagation();
getSearchResult({
wrapper : modal,
keyword : keyword,
totalNUM : '',
totalPage : '',
recnum : '5',
totalPage : '',
sort : 'gid',
markup_file : 'search-row',
none : modal_search_none
});
});
// 검색버튼과 검색어 초기화 버튼 동적 출력
modal_search.find('[name="keyword"]').on('keyup', function(event) {
var modal = modal_search
modal.find('[data-role="keyword-reset"]').addClass("hidden"); // 검색어 초기화 버튼 숨김
modal.find("#drawer-search-footer").addClass('hidden') //검색풋터(검색버튼 포함) 숨김
modal.find('[data-role="none"]').addClass('d-none');
if ($(this).val().length >= 2) {
modal.find('[data-role="keyword-reset"]').removeClass("hidden");
}
});
// 검색어 입력필드 초기화
$(document).on('tap click','[data-act="keyword-reset"]',function(){
var modal = modal_search
modal.find('[name="keyword"]').val('').autocomplete('clear'); // 입력필드 초기화
setTimeout(function(){
modal.find('[name="keyword"]').focus(); // 입력필드 포커싱
modal.find('[data-role="keyword-reset"]').addClass("hidden"); // 검색어 초기화 버튼 숨김
modal.find('[data-role="none"]').addClass('d-none');
modal.find('[data-role="list-post"]').empty();
}, 10);
});
// 검색모달이 닫혔을때
modal_search.on('hidden.rc.modal', function () {
var modal = $(this)
modal.find('[name="keyword"]').autocomplete('clear');
$('.autocomplete-suggestions').remove();
modal.find('[name="keyword"]').val('');
modal.find('[data-role="list-post"]').html('');
modal.find('[data-role="keyword-reset"]').addClass("hidden"); // 검색어 초기화 버튼 숨김'
})

View File

@@ -0,0 +1,23 @@
<!-- 통합검색 -->
<div id="modal-search" class="modal fast" data-role="search">
<header class="bar bar-nav px-0 bg-white">
<a class="icon material-icons pull-left pl-3 pr-2 text-muted" role="button" data-history="back">arrow_back</a>
<form class="input-group">
<input type="search" name="keyword" class="form-control bg-faded" placeholder="검색어 입력" required autocomplete="off">
<span class="input-group-btn hidden" data-role="keyword-reset" >
<button class="btn btn-link btn-nav" type="button" data-act="keyword-reset" tabindex="-1">
<i class="icon material-icons" aria-hidden="true">close</i>
</button>
</span>
</form>
</header>
<main class="content bg-white">
<ul class="table-view table-view-sm mt-2 border-top-0 border-bottom-0" data-role="list-list"></ul>
<ul class="table-view table-view-sm mt-2 border-top-0 border-bottom-0" data-role="list-post"></ul>
</main>
</div><!-- /.modal -->
<script src="/modules/search/themes/_mobile/rc-default/component.js<?php echo $g['wcache']?>" ></script>

View File

@@ -0,0 +1,7 @@
.bar input[type="search"] {
height: 2.35rem;
margin: .2rem 0;
}
.rb-main {
margin-top: -1px
}

View File

@@ -0,0 +1,190 @@
<!-- markjs js : https://github.com/julmot/mark.js -->
<?php getImport('markjs','jquery.mark.min','8.11.1','js')?>
<header class="bar bar-nav bar-dark bg-primary pl-0 pr-1">
<form name="RbSearchForm" action="<?php echo $g['s']?>/" class="input-group" role="form" id="search-form" style="top: 0;">
<input type="hidden" name="r" value="<?php echo $r?>">
<input type="hidden" name="m" value="<?php echo $m?>">
<input type="hidden" name="where" value="<?php echo $where?>">
<input type="hidden" name="swhere" value="all">
<input type="hidden" name="term" value="<?php echo $term?>">
<input type="hidden" name="orderby" value="<?php echo $orderby?>">
<span class="input-group-btn" data-role="return-result">
<a class="icon icon-left-nav pull-left px-2" role="button" href="<?php echo RW(0) ?>"></a>
</span>
<input type="search" class="form-control border-0" placeholder="검색어를 입력하세요." value="<?php echo $_keyword?>" id="search-input-page" name="keyword" autocomplete="off">
<span class="input-group-btn hidden" data-role="reset-keyword">
<button class="btn btn-secondary px-3" type="button" data-act="keyword-reset" tabindex="-1">
<i class="fa fa-times-circle fa-lg" aria-hidden="true"></i>
</button>
</span>
</form>
</header>
<!-- Block button in standard bar fixed below top bar -->
<div class="bar bar-standard bar-header-secondary bar-light bg-white">
<nav class="nav nav-inline">
<a id="nav_search_all" class="nav-link<?php if($swhere=='all'):?> active<?php endif?>" href="<?php echo $g['url_where'] ?>all" data-control="push" data-transition="fade" data-act="moreResult">전체</a>
<a id="nav_site_page" class="nav-link<?php if($swhere=='site_page'):?> active<?php endif?>" href="<?php echo $g['url_where'] ?>site_page" data-control="push" data-transition="fade" data-act="moreResult">페이지</a>
<a id="nav_bbs_post" class="nav-link<?php if($swhere=='bbs_post'):?> active<?php endif?>" href="<?php echo $g['url_where'] ?>bbs_post" data-control="push" data-transition="fade" data-act="moreResult">게시물</a>
<a id="nav_mediaset_photo" class="nav-link<?php if($swhere=='mediaset_photo'):?> active<?php endif?>" href="<?php echo $g['url_where'] ?>mediaset_photo" data-control="push" data-transition="fade" data-act="moreResult">사진</a>
<a id="nav_mediaset_youtube" class="nav-link<?php if($swhere=='mediaset_youtube'):?> active<?php endif?>" href="<?php echo $g['url_where'] ?>mediaset_youtube" data-control="push" data-transition="fade" data-act="moreResult">동영상</a>
<a id="nav_mediaset_file" class="nav-link<?php if($swhere=='mediaset_file'):?> active<?php endif?>" href="<?php echo $g['url_where'] ?>mediaset_file" data-control="push" data-transition="fade" data-act="moreResult">파일</a>
</nav>
</div>
<div class="bar bar-standard bar-footer bar-light bg-faded hidden" id="search-footer">
<button class="btn btn-secondary btn-block" id="search-form-submit">검색</button>
</div>
<div class="content bg-faded" data-role="panal-result">
<main class="rb-main" data-plugin="markjs">
<?php if($keyword && $swhere == 'all'):?>
<div id="rb-sortbar" class="card p-a-1 bg-white">
총 <span id="rb_sresult_num_all" class="badge badge-primary badge-outline">0</span> 건이 검색 되었습니다.
</div>
<div id="search_no_result" class="d-none content-padded">
<div class="alert alert-info text-xs-center"><strong>&lsquo;<span><?php echo $keyword;?></span>&rsquo;에 대한 검색결과가 없습니다.</strong></div>
<ul class="list-unstyled text-muted">
<li>검색어의 철자를 정확하게 입력했는지 확인해 보세요.</li>
<li>연관된 다른 검색어나 비슷한 의미의 일반적인 단어를 입력하여 찾아 보세요.</li>
</ul>
<p>
<a href="<?php echo RW(0) ?>" class="btn btn-secondary btn-block">홈으로</a>
</p>
</div>
<?php endif?>
<?php $_ResultArray['num']=array()?>
<?php if($keyword):?>
<?php foreach($d['search_order'] as $_key => $_val):if(!strstr($_val[1],'['.$r.']'))continue?>
<?php $_iscallpage=($swhere == 'all' || $swhere == $_key)?>
<?php if($_iscallpage):?>
<?php if(is_file($_val[2].'.css')) echo '<link href="'.$_val[2].'.css" rel="stylesheet">'?>
<section id="rb_search_panel_<?php echo $_key?>" class="widget mb-2">
<header>
<div class="content-padded">
<?php echo $_val[0]?>
<small class="ml-2"><span id="rb_sresult_num_tt_<?php echo $_key?>" class="text-danger">0</span> 건</small>
</div>
</header>
<?php endif?>
<!-- 검색결과 -->
<div class="">
<?php include $_val[2].'.php' ?>
</div>
<!-- @검색결과 -->
<?php if($_iscallpage): ?>
<?php if($swhere==$_key): ?>
<footer>
<div class="p-x-0">
<?php echo getPageLink_RC(3,$p,getTotalPage($_ResultArray['num'][$_key],$d['search']['num2']),'1')?>
</div>
</footer>
<?php else:?>
<?php if($_ResultArray['num'][$_key] > $d['search']['num1']):?>
<footer class="p-2 text-xs-right">
<a href="<?php echo $g['url_where'].$_key ?>" class="btn btn-link text-muted" data-control="push" data-transition="fade" data-act="moreResult">
<?php echo $_val[0]?> 더보기 <i class="fa fa-arrow-circle-o-right fa-lg" aria-hidden="true"></i>
</a>
</footer>
<?php endif ?>
<?php endif?>
</section>
<?php endif?>
<?php endforeach?>
<?php else:?>
<div id="rb-searchresult-none" class="content-padded">
<p>검색어를 입력해 주세요.</p>
</div>
<?php endif?>
</main>
</div><!-- /.content -->
<script>
// 통합검색 입력창
var doSearchInput = function(){
$('#search-input-page').focus(function(){
var keyword = $(this).val()
var modal = $('#modal-search')
$('.loader-overlay').remove()
modal.modal('show')
setTimeout(function(){
$('#search-input').val(keyword).focus()
modal.find('[data-role="keyword-reset"]').removeClass('hidden')
}, 310);
});
};
var doSearchResult = function(){
function searchSortChange(obj)
{
var f = document.RbSearchForm;
f.orderby.value = obj.value;
f.submit();
}
function searchTermChange(obj)
{
var f = document.RbSearchForm;
f.term.value = obj.value;
f.submit();
}
function searchWhereChange(obj)
{
var f = document.RbSearchForm;
f.where.value = obj.value;
f.submit();
}
// marks.js
$('[data-plugin="markjs"]').mark("<?php echo $keyword ?>");
<?php $total = 0?>
<?php foreach($_ResultArray['num'] as $_key => $_val):$total+=$_val?>
if ($('#rb_sresult_num_tt_<?php echo $_key?>')) {
$('#rb_sresult_num_tt_<?php echo $_key?>').text('<?php echo $_val?>')
}
<?php if(!$_val):?>
$('#rb_search_panel_<?php echo $_key?>').addClass('d-none')
$('#nav_<?php echo $_key?>').addClass('d-none')
<?php endif?>
<?php endforeach?>
var search_result_total = <?php echo $swhere=='all'?$total:$_ResultArray['num'][$swhere]?>;
if(search_result_total==0){
$("#search_no_result").removeClass("d-none");
$('.bar-header-secondary').remove()
}
$('#rb_sresult_num_all').text(search_result_total)
<?php if(!$_ResultArray['spage']):?>
if(getId('rb-sortbar')) getId('rb-sortbar').className = 'd-none';
<?php endif?>
};
$(function () {
// 검색관련 스크립트 실행
doSearchInput();
doSearchResult();
})
</script>

View File

@@ -0,0 +1 @@
알씨 기본형