이 글에 소개된 내용은 phpcms의 검색 기능 구현에 관한 내용입니다. 이제 모든 사람과 공유합니다. 도움이 필요한 친구들이 참고할 수 있습니다.
최근 포털 사이트를 구축하고 있습니다. 예전부터 이 기능을 구현하고 싶었지만 마음을 진정시키고 phpcms의 구현 원리를 연구하기 위해 애썼습니다. 오늘은 이 블로그를 통해 분석 과정을 기록해 보겠습니다. 상대적으로 분산되어 있어 항상 혼란스럽습니다. 제가 하는 일은 좀 더 체계적인 요약입니다.
phpcms 검색 기능의 배경 템플릿은 phpcmsmodulessearch 경로에 있습니다. 이 경로에 검색 결과를 표시하는 몇 가지 방법이 있습니다. 예를 들어, 우리가 일반적으로 사용하는 init 메소드는 index.php
의 구성 메소드에서 따왔습니다. $this->db =pc_base::load_model('search_model'); index.php는 데이터베이스 접두사 _search 이름 테이블을 사용하는 것을 확인할 수 있습니다
phpcms 검색 기능의 프런트 엔드 템플릿은 phpcmstemplatesdefaultsearch에 있습니다. 이 경로에는 index.html, footer.html, header.html 및 list.html이라는 4개의 파일이 있습니다. 검색결과가 없을 때 호출되는 표시 페이지, header.html 및 footer.html은 출력된 검색 결과의 머리글과 바닥글 부분을 나타내고, list.html은 검색 결과가 발견된 후 호출되는 표시 페이지를 나타냅니다
phpcms의 검색 기능으로 주로 사용되는데 mysql의 퍼지 쿼리 기능과의 매칭을 사용하는데 이 기능은 중국어 정보가 포함된 콘텐츠를 쿼리하는 경우 올바르지 않고 지원도 좋지 않습니다. 그래서 이 코드 부분을 차단했습니다. 구체적인 차단 방법은 phpcmsmodulessearchindex.php 파일을 열고 약 84줄을 찾아 다음 코드를 주석 처리하는 것입니다.
//如果分词结果为空 if(!empty($segment_q)) { $sql = "`siteid`= '$siteid' AND `typeid` = '$typeid' $sql_time AND MATCH (`data`) AGAINST ('$segment_q' IN BOOLEAN MODE)"; } else { $sql = "`siteid`= '$siteid' AND `typeid` = '$typeid' $sql_time AND `data` like '%$q%'"; }
이 코드 뒤에 다음 코드를 추가합니다.
$sql = "`siteid`= '$siteid' AND `typeid` = '$typeid' $sql_time AND `data` like '%$q%'";
프런트엔드 코드 수정은 phpcmstemplatesdefaultsearchindex.html 파일을 참고하시면 됩니다. 원본 index.html 파일을 확인하여 아래와 같이 쿼리 함수 양식 제출과 관련된 코드를 찾아보세요.
<form name="search" type="get"> <input type="hidden" name="m" value="search"/> <input type="hidden" name="c" value="index"/> <input type="hidden" name="a" value="init"/> <input type="hidden" name="typeid" value="{$typeid}" id="typeid"/> <input type="hidden" name="siteid" value="{$siteid}" id="siteid"/> <p class="sr_frm"> <p class="sr_frm_box"> <p class="sr_frmipt"><input type="text" name="q" id="q" class="ipt"> <p class="sp" id="aca"> </p><input type="submit" class="ss_btn" value="搜 索"> </p> </p> <p id="sr_infos" class="wrap sr_infoul"> </p> </p> </form>
코드의 이 부분에서는 입력 유형 속성이 숨겨집니다. URL에서 이 부분은 양식을 통해 제출되지 않습니다. 예를 들어 검색 버튼이 포함된 URL은 http://localhost/startwill/index.php?m=content&c=index&a=lists&catid =41입니다. 검색 상자에 product라는 단어를 입력하면 리디렉션된 URL은 다음과 같습니다. : http://localhost/startwill/index.php?m=search&c=index&a=init&typeid=3&siteid=1&q=product, 여기서 m, c, a, typeid, siteid 값은 모두 숨겨진 메소드를 통해 제출되며, q의 값은 검색창을 통해 입력되는 반면, 자체 페이지에서 이를 사용하면 위의 코드를 모방할 수 있습니다.
phpcmstemplatesdefaultsearchlist.html을 참조하여 phpcms의 표시 코드를 구현할 수 있으며, list.html에서 {loop
r}을 통해 검색된 결과 값을 얻을 수 있습니다. $ 데이터에 저장되는 콘텐츠 필드는 다음과 같습니다.
이러한 필드 정보를 사용하여 list.html 표시 페이지에서 원하는 모든 작업을 수행할 수 있습니다.
여기서 특별한 주의가 필요한 것은 우리 자신의 list.html에 코드를 작성할 때 루프 루프를 사용할 수 있지만 data를 사용하여 우리 자신이 통과한 값을 저장한 다음 검색을 통해 값을 덮어쓰며, 전체 페이지에 사용자가 지정한 값이 표시됩니다.
위 내용은 phpcms 검색 기능 구현의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!