first
This commit is contained in:
21
modules/search/themes/_mobile/rc-default/LICENSE
Normal file
21
modules/search/themes/_mobile/rc-default/LICENSE
Normal 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.
|
||||
6
modules/search/themes/_mobile/rc-default/README.md
Normal file
6
modules/search/themes/_mobile/rc-default/README.md
Normal file
@@ -0,0 +1,6 @@
|
||||
|
||||
# 알씨 기본형
|
||||
|
||||
모바일 전용 통합검색 테마 입니다.
|
||||
|
||||
## 주요 기능
|
||||
172
modules/search/themes/_mobile/rc-default/component.js
Normal file
172
modules/search/themes/_mobile/rc-default/component.js
Normal 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"); // 검색어 초기화 버튼 숨김'
|
||||
})
|
||||
23
modules/search/themes/_mobile/rc-default/component.php
Normal file
23
modules/search/themes/_mobile/rc-default/component.php
Normal 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>
|
||||
7
modules/search/themes/_mobile/rc-default/main.css
Normal file
7
modules/search/themes/_mobile/rc-default/main.css
Normal file
@@ -0,0 +1,7 @@
|
||||
.bar input[type="search"] {
|
||||
height: 2.35rem;
|
||||
margin: .2rem 0;
|
||||
}
|
||||
.rb-main {
|
||||
margin-top: -1px
|
||||
}
|
||||
190
modules/search/themes/_mobile/rc-default/main.php
Normal file
190
modules/search/themes/_mobile/rc-default/main.php
Normal 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>‘<span><?php echo $keyword;?></span>’에 대한 검색결과가 없습니다.</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>
|
||||
1
modules/search/themes/_mobile/rc-default/name.txt
Normal file
1
modules/search/themes/_mobile/rc-default/name.txt
Normal file
@@ -0,0 +1 @@
|
||||
알씨 기본형
|
||||
Reference in New Issue
Block a user