2012-06-16 3 views
-3

나는 tridion 웹 사이트를 만들었습니다. 이제는 Google 맞춤 검색과 같은 검색 제어 기능을 추가하고 싶습니다. 동일한 옵션을 제공하는 옵션이 있습니까?tridion 사이트에서 검색 컨트롤을 만드는 방법은 무엇입니까?

내 옵션 : 사용자 컨 틀롤을 만들고 거기에 Google 맞춤 검색을 구현 ​​한 다음 내 페이지에 렌더링해야합니다. 또는 어떤 다른 접근은 좋을 것이다.

검색 컨트롤 (텍스트 상자와 검색 버튼 포함)은 텍스트를 검색 할 수 있어야합니다.
검색 엔진은 검색 결과를 형식화해야합니다.

+1

에 대한 검색 결과를 생성하려면 다음 XSLT를 사용합니까? http://stackoverflow.com/questions/11014950/how-can-we-integrate-microsoft-fast-with-sdl-tridion-2011-sp1 잠재적으로 다른 검색 엔진을 구현하려고하지만, Nuno는 똑같이 관련이 있음을 나타냅니다. –

+0

크리스, 제발 또한 공유 할 수 있습니다 search.aspx – Matt

답변

2

Google을 말할 때 Google 검색 어플라이언스 (GSA)에 대해 이야기하고 있습니까?

그럴 경우 : XSLT로 많은 작업을 수행 한 것으로 보입니다. 제 생각에는 가장 쉬운 방법은 usercontrol에 관련 검색어로 GSA의 XML API를 호출하는 것입니다. 단순히 XSLT로 응답을 변환하십시오. 이렇게하면 레이아웃 변경이 필요할 때 컨트롤을 다시 컴파일하지 않아도되고 Tridion에서 XSLT를 게시 할 수 있습니다.

나는 당신이이 질문에 대한 답변을 확인 했이 페이지 http://medicine.yale.edu/search.aspx?q=test&x=0&y=0&site=YSM_School_of_Medicine

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <xsl:output method="html" omit-xml-declaration="yes"/> 
    <xsl:param name="SITE_CATALOG"/> 
    <xsl:param name="SITE_NAME"/> 
    <xsl:param name="MAX_PAGES_IN_NAVIGATION">10</xsl:param> 
    <xsl:param name="TOTALNUMBER" select="/GSP/RES/M"/> 
    <xsl:param name="QUERY" select="/GSP/PARAM[@name='q']/@value"/> 
    <xsl:param name="SEARCHED_SITE_CATALOG" select="/GSP/PARAM[@name='site']/@value"/> 
    <xsl:template match="/"> 
     <xsl:variable name="STARTNUMBER" select="/GSP/RES/@SN"/> 
     <xsl:variable name="ENDNUMBER" select="/GSP/RES/@EN"/> 
     <xsl:variable name="TIMER" select="/GSP/TM"/> 
     <!--begin search results --> 
     <div class="google-search-form bordered-box shaded-f5 padded-20"> 
      <xsl:call-template name="WriteSearchForm"/> 
     </div> 
     <xsl:if test="/GSP/Spelling"> 
      <p>Did you mean <a href="?q={/GSP/Spelling/Suggestion/@q}&amp;site={/GSP/PARAM[@name='site']/@value}"> 
        <xsl:value-of select="/GSP/Spelling/Suggestion/@q"/> 
       </a>?</p> 
     </xsl:if> 
     <div id="search-results-pagination"> 

      <xsl:for-each select="/GSP/RES/R"> 
       <xsl:choose> 
        <xsl:when test="@L='2'"> 
         <div class="grouped-search-result"> 
          <h4> 
           <a href="{U}"> 
            <xsl:value-of select="T" disable-output-escaping="yes"/> 
           </a> 
          </h4> 
          <p class="search-result-body"> 
           <xsl:value-of select="S" disable-output-escaping="yes"/> 
          </p> 
          <p class="gray95"> 
           <span class="green"> 
            <xsl:choose> 
             <xsl:when test="string-length(U) &gt; 88"> 
              <xsl:value-of select="substring(U, 0, 88)"/>... 
             </xsl:when> 
             <xsl:otherwise> 
              <xsl:value-of select="U"/> 
             </xsl:otherwise> 

            </xsl:choose> 
           </span> 
          </p> 

          <p> 
           <a href="?as_sitesearch={HN/@U}&amp;q={$QUERY}&amp;site={$SITE_CATALOG}" class="more-results-link"> 
            [ <span> 
             More results from <xsl:value-of select="HN/@U"/> 
            </span> ] 
           </a> 
          </p> 
         </div> 
        </xsl:when> 
        <xsl:otherwise> 
         <div class="pagination-element search-result"> 
          <h4><a href="{U}"> 

            <xsl:call-template name="WriteMimeTypeIndicator"> 
             <xsl:with-param name="RESULT" select="."/> 
            </xsl:call-template> 
            <xsl:value-of select="T" disable-output-escaping="yes"/> 

          </a></h4> 
          <p class="search-result-body"> 
           <xsl:value-of select="S" disable-output-escaping="yes"/> 
          </p> 
          <p> 
           <span class="green"> 
            <xsl:choose> 
             <xsl:when test="string-length(U) &gt; 92"> 
              <xsl:value-of select="substring(U, 0, 92)"/>... 
             </xsl:when> 
             <xsl:otherwise> 
              <xsl:value-of select="U"/> 
             </xsl:otherwise> 

            </xsl:choose> 

           </span> - <xsl:value-of select="HAS/C/@SZ"/> 
          </p> 
         </div> 
        </xsl:otherwise> 
       </xsl:choose> 
      </xsl:for-each> 
     </div> 
     <hr class="dashed" /> 

<xsl:call-template name="WritePageNavigation"/> 
     <!--<div id="pagination-controls" class="pagination-controls float-rt"></div>--> 

     <!-- end pagination-controls --> 



     <div class="results-footer-notes"> 

      <p class="small-gray95">Note: This search service may return results that are not approved by Yale University, or results that may not reflect the official views of Yale University.</p> 

     </div> 



     <div class="clear"></div> 

     <div class="google-search-form bordered-box shaded-f5 padded-20 big-margin-top"> 
      <xsl:call-template name="WriteSearchForm"/> 
     </div> 
     <!-- end search results --> 
    </xsl:template> 
    <xsl:template name="WritePageNavigation"> 
     <xsl:variable name="RESULTS_ON_THIS_PAGE" select="count(/GSP/RES/R)"/> 
     <xsl:variable name="TOTAL_RESULT_COUNT" select="/GSP/RES/M"/> 
     <xsl:variable name="TOTAL_PAGES" select="ceiling($TOTAL_RESULT_COUNT div $RESULTS_ON_THIS_PAGE)"/> 
     <xsl:variable name="CURRENT_PAGE" select="floor((/GSP/RES/@SN) div $RESULTS_ON_THIS_PAGE) + 1"/> 
     <xsl:variable name="START_RESULT" select="/GSP/RES/@SN"/> 
     <!-- 

    Results On This Page: <xsl:value-of select="$RESULTS_ON_THIS_PAGE"/> 
     <br/> 
    Total Results: <xsl:value-of select="$TOTAL_RESULT_COUNT"/> 
     <br/> 
    Total Pages: <xsl:value-of select="$TOTAL_PAGES"/> 
     <br/> 
    Current Page: <xsl:value-of select="$CURRENT_PAGE"/> 
     <br/> 
    Start Result: <xsl:value-of select="$START_RESULT"/> 
     <br/> 
    Start Navigation Page: <xsl:value-of select="$CURRENT_PAGE - ($MAX_PAGES_IN_NAVIGATION div 2)"/> 
--> 
     <xsl:if test="$TOTAL_PAGES &gt; 1"> 
      <ul class="google-search-pagination"> 

       <xsl:if test="$CURRENT_PAGE &gt; 1"> 
        <li class="pagination-previous"> 
         <a href="?q={/GSP/PARAM[@name='q']/@value}&amp;start={($CURRENT_PAGE - 2)*$RESULTS_ON_THIS_PAGE}&amp;site={/GSP/PARAM[@name='site']/@value}">Previous</a> 
        </li> 
       </xsl:if> 





       <xsl:call-template name="WritePaging"> 
        <xsl:with-param name="CURRENT_PAGE" select="$CURRENT_PAGE"/> 
        <xsl:with-param name="NEXT_PAGE_START" select="$RESULTS_ON_THIS_PAGE + 1"/> 
        <xsl:with-param name="TOTAL_RESULTS" select="$TOTAL_RESULT_COUNT"/> 
        <xsl:with-param name="RESULTS_ON_PAGE" select="$RESULTS_ON_THIS_PAGE"/> 
        <xsl:with-param name="START_PAGE"> 
         <xsl:choose> 
          <xsl:when test="($CURRENT_PAGE - ($MAX_PAGES_IN_NAVIGATION div 2)) &gt; 0"> 
           <xsl:value-of select="$CURRENT_PAGE - ($MAX_PAGES_IN_NAVIGATION div 2)"/> 
          </xsl:when> 
          <xsl:otherwise>1</xsl:otherwise> 
         </xsl:choose> 
        </xsl:with-param> 
        <xsl:with-param name="END_PAGE"> 
         <xsl:choose> 
          <xsl:when test="($CURRENT_PAGE - ($MAX_PAGES_IN_NAVIGATION div 2)) &gt; 0"> 
           <xsl:value-of select="$MAX_PAGES_IN_NAVIGATION + $CURRENT_PAGE - floor($MAX_PAGES_IN_NAVIGATION div 2) - 1"/> 
          </xsl:when> 
          <xsl:otherwise> 
           <xsl:value-of select="$MAX_PAGES_IN_NAVIGATION"/> 
          </xsl:otherwise> 
         </xsl:choose> 
        </xsl:with-param> 
       </xsl:call-template> 

       <li class="pagination-next"> 
        <a href="?q={/GSP/PARAM[@name='q']/@value}&amp;start={($CURRENT_PAGE)*$RESULTS_ON_THIS_PAGE}&amp;site={/GSP/PARAM[@name='site']/@value}">Next</a> 
       </li> 

      </ul> 
     </xsl:if> 
    </xsl:template> 
    <xsl:template name="WritePaging"> 
     <xsl:param name="NEXT_PAGE_START"/> 
     <xsl:param name="RESULTS_ON_PAGE"/> 
     <xsl:param name="TOTAL_RESULTS"/> 
     <xsl:param name="CURRENT_PAGE"/> 
     <xsl:param name="START_PAGE"/> 
     <xsl:param name="END_PAGE"/> 
<!-- 
     NEXT_PAGE_START: <xsl:value-of select="$NEXT_PAGE_START"/><br/> 
     RESULTS_ON_PAGE: <xsl:value-of select="$RESULTS_ON_PAGE"/><br/> 
     TOTAL_RESULTS: <xsl:value-of select="$TOTAL_RESULTS"/><br/> 
     CURRENT_PAGE: <xsl:value-of select="$CURRENT_PAGE"/><br/> 
     START_PAGE: <xsl:value-of select="$START_PAGE"/><br/> 
     END_PAGE: <xsl:value-of select="$END_PAGE"/><br/> 
--> 


     <li> 
      <xsl:if test="$CURRENT_PAGE = $START_PAGE"> 
       <xsl:attribute name="class">selected</xsl:attribute> 
       <a href="#"> 
        <xsl:value-of select="$START_PAGE"/> 
       </a> 
      </xsl:if> 
      <xsl:if test="$CURRENT_PAGE != $START_PAGE"> 
       <a href="?q={/GSP/PARAM[@name='q']/@value}&amp;start={($START_PAGE - 1)*$RESULTS_ON_PAGE}&amp;site={/GSP/PARAM[@name='site']/@value}"> 
        <xsl:value-of select="$START_PAGE"/> 
       </a> 
      </xsl:if> 
     </li> 



     <xsl:if test="$START_PAGE &lt; $END_PAGE"> 
      <xsl:if test="$NEXT_PAGE_START &lt; $TOTAL_RESULTS"> 
       <xsl:call-template name="WritePaging"> 
        <xsl:with-param name="NEXT_PAGE_START" select="$NEXT_PAGE_START + $RESULTS_ON_PAGE"/> 
        <xsl:with-param name="TOTAL_RESULTS" select="$TOTAL_RESULTS"/> 
        <xsl:with-param name="RESULTS_ON_PAGE" select="$RESULTS_ON_PAGE"/> 
        <xsl:with-param name="START_PAGE" select="$START_PAGE + 1"/> 
        <xsl:with-param name="CURRENT_PAGE" select="$CURRENT_PAGE"/> 
        <xsl:with-param name="END_PAGE" select="$END_PAGE"/> 
       </xsl:call-template> 
      </xsl:if> 
     </xsl:if> 
    </xsl:template> 
    <xsl:template name="WriteSearchForm"> 
     <form name="gs" method="GET" action="#"> 
      <p class="wrapper"> 
       <input type="text" name="q" maxlength="256" value="{$QUERY}" class="google-search-keywords"/> 
       <select name="site" class="google-search-site"> 
        <option value="{$SITE_CATALOG}"> 
         <xsl:if test="$SEARCHED_SITE_CATALOG = $SITE_CATALOG"> 
          <xsl:attribute name="selected">true</xsl:attribute> 
         </xsl:if> 
         <xsl:value-of select="$SITE_NAME" disable-output-escaping="yes"/> 
        </option> 
        <option value="Yale_University">---------------</option> 
        <option value="YSM_School_of_Medicine"> 
         <xsl:if test="$SEARCHED_SITE_CATALOG = 'YSM_School_of_Medicine'"> 
          <xsl:attribute name="selected">true</xsl:attribute> 
         </xsl:if> 
         School of Medicine 
        </option> 
        <option value="Yale_Medical_Group"> 
         <xsl:if test="$SEARCHED_SITE_CATALOG = 'Yale_Medical_Group'"> 
          <xsl:attribute name="selected">true</xsl:attribute> 
         </xsl:if> 
         Yale Medical Group 
        </option> 
        <option value="Yale_New_Haven_Hospital"> 
         <xsl:if test="$SEARCHED_SITE_CATALOG = 'Yale_New_Haven_Hospital'"> 
          <xsl:attribute name="selected">true</xsl:attribute> 
         </xsl:if> 
         Yale-New Haven Hospital 
        </option> 
        <option value="Medical_Center"> 
         <xsl:if test="$SEARCHED_SITE_CATALOG = 'Medical_Center'"> 
          <xsl:attribute name="selected">true</xsl:attribute> 
         </xsl:if> 
         Medical Center (all) 
        </option> 
        <option value="Medical_Library"> 
         <xsl:if test="$SEARCHED_SITE_CATALOG = 'Medical_Library'"> 
          <xsl:attribute name="selected">true</xsl:attribute> 
         </xsl:if> 
         Medical Library 
        </option> 
        <option value="Yale_University">---------------</option> 
        <option value="Yale_Libraries"> 
         <xsl:if test="$SEARCHED_SITE_CATALOG = 'Yale_Libraries'"> 
          <xsl:attribute name="selected">true</xsl:attribute> 
         </xsl:if> 
         Yale Libraries 
        </option> 
        <option value="Finance_and_Administration"> 
         <xsl:if test="$SEARCHED_SITE_CATALOG = 'Finance_and_Administration'"> 
          <xsl:attribute name="selected">true</xsl:attribute> 
         </xsl:if> 
         Finance &amp; Admin 
        </option> 
        <option value="Human_Resources"> 
         <xsl:if test="$SEARCHED_SITE_CATALOG = 'Human_Resources'"> 
          <xsl:attribute name="selected">true</xsl:attribute> 
         </xsl:if> 
         Human Resources 
        </option> 
        <option value="ITS"> 
         <xsl:if test="$SEARCHED_SITE_CATALOG = 'ITS'"> 
          <xsl:attribute name="selected">true</xsl:attribute> 
         </xsl:if> 
         Information Technology 
        </option> 
        <option value="Yale_University"> 
         <xsl:if test="$SEARCHED_SITE_CATALOG = 'Yale_University'"> 
          <xsl:attribute name="selected">true</xsl:attribute> 
         </xsl:if> 
         Yale University 
        </option> 
       </select> 
       <button type="submit" value="submit" class="google-search-button theme-background"> 
        <img src="/files/images/button_search_icon_translucent_sm.png" />Google Search 
       </button> 
      </p> 
      <p class="no-space-bottom float-rt" style="margin-right:50px;"> 
       <a href="http://www.yale.edu/its/web/search/tips.html" class="search-tips"> 
        <img src="/files/images/icon_question.gif" alt="" style="vertical-align:middle" />&#160;Search Tips 
       </a> 
      </p> 

      <p class="no-space-bottom gray95"> 
       Results <span class="green"> 
        <xsl:value-of select="/GSP/RES/@SN"/> 
       </span> - <span class="green"> 
        <xsl:value-of select="/GSP/RES/@EN"/> 
       </span> of about <span class="green"><xsl:value-of select="$TOTALNUMBER"/></span> for <strong><xsl:value-of select="$QUERY"/></strong> 
      </p> 


     </form> 
    </xsl:template> 
    <xsl:template name="WriteMimeTypeIndicator"> 
     <xsl:param name="RESULT"/> 
     <xsl:choose> 
      <xsl:when test="not($RESULT/@MIME)"></xsl:when> 
      <xsl:when test="$RESULT/@MIME = 'application/msword'">[DOC] </xsl:when> 
      <xsl:when test="$RESULT/@MIME = 'application/octet-stream'">TEST OPTIONS</xsl:when> 
      <xsl:when test="$RESULT/@MIME = 'application/pdf'">[PDF] </xsl:when> 
      <xsl:otherwise>TODO:<xsl:value-of select="$RESULT/@MIME"/></xsl:otherwise> 
     </xsl:choose> 


    </xsl:template> 
</xsl:stylesheet> 
+0

확인 크리스, 그 공유 할 수 제발 XSLT – Coder

+0

위의 내 대답에 추가 –

관련 문제