2015-03-30 3 views
0

Я использую Docpad для создания статического веб-сайта. Я пытаюсь настроить Lunr плагин для полнотекстового поиска по сайту, но я получаю эту ошибку:Пытается создать полнотекстовый поисковый плагин Lunr для сайта Docpad. Что я делаю не так?

$ docpad run

info: Welcome to DocPad v6.78.1 (local installation: /PATH/TO/WEBSITE/REPOSITORY/node_modules/docpad) 
info: Plugins: cleanurls, eco, livereload, lunr, marked, moment, partials, rss, sitemap, stylus 
info: Environment: development 
info: DocPad listening to http://127.0.0.1:9778/ on directory /PATH/TO/WEBSITE/REPOSITORY/out 
info: LiveReload listening to new socket on channel /docpad-livereload 
ReferenceError: partial is not defined 
    at Object.eval (<anonymous>:41:18) 
    at Object.eval (<anonymous>:51:8) 
    at eval (<anonymous>:53:6) 
    at Function.eco.render (/PATH/TO/WEBSITE/REPOSITORY/node_modules/docpad-plugin-eco/node_modules/eco/lib/index.js:26:25) 
    at EcoPlugin.render (/PATH/TO/WEBSITE/REPOSITORY/node_modules/docpad-plugin-eco/out/eco.plugin.js:23:32) 
    at ambi (/PATH/TO/WEBSITE/REPOSITORY/node_modules/docpad/node_modules/ambi/out/lib/ambi.js:57:27) 
    at Task.<anonymous> (/PATH/TO/WEBSITE/REPOSITORY/node_modules/docpad/node_modules/event-emitter-grouped/out/lib/event-emitter-grouped.js:45:23) 
    at ambi (/PATH/TO/WEBSITE/REPOSITORY/node_modules/docpad/node_modules/ambi/out/lib/ambi.js:55:18) 
    at fireMethod (/PATH/TO/WEBSITE/REPOSITORY/node_modules/docpad/node_modules/taskgroup/out/lib/taskgroup.js:397:23) 
    at b (domain.js:183:18) 
    at Domain.run (domain.js:123:23) 
    at Task.fire (/PATH/TO/WEBSITE/REPOSITORY/node_modules/docpad/node_modules/taskgroup/out/lib/taskgroup.js:435:27) 
    at Object._onImmediate (/PATH/TO/WEBSITE/REPOSITORY/node_modules/docpad/node_modules/taskgroup/out/lib/taskgroup.js:452:26) 
    at processImmediate [as _immediateCallback] (timers.js:354:15) 
info: Generating... 
error: The action completed successfully 
error: Something went wrong while rendering: /PATH/TO/WEBSITE/REPOSITORY/src/render/search.html.eco 
The error follows: 

ReferenceError: partial is not defined 
    at Object.eval (<anonymous>:41:18) 
    at Object.eval (<anonymous>:51:8) 
    at eval (<anonymous>:53:6) 
    at Function.eco.render (/PATH/TO/WEBSITE/REPOSITORY/node_modules/docpad-plugin-eco/node_modules/eco/lib/index.js:26:25) 
    at EcoPlugin.render (/PATH/TO/WEBSITE/REPOSITORY/node_modules/docpad-plugin-eco/out/eco.plugin.js:23:32) 
    at ambi (/PATH/TO/WEBSITE/REPOSITORY/node_modules/docpad/node_modules/ambi/out/lib/ambi.js:57:27) 
    at Task.<anonymous> (/PATH/TO/WEBSITE/REPOSITORY/node_modules/docpad/node_modules/event-emitter-grouped/out/lib/event-emitter-grouped.js:45:23) 
    at ambi (/PATH/TO/WEBSITE/REPOSITORY/node_modules/docpad/node_modules/ambi/out/lib/ambi.js:55:18) 
    at fireMethod (/PATH/TO/WEBSITE/REPOSITORY/node_modules/docpad/node_modules/taskgroup/out/lib/taskgroup.js:397:23) 
    at b (domain.js:183:18) 
    at Domain.run (domain.js:123:23) 
    at Task.fire (/PATH/TO/WEBSITE/REPOSITORY/node_modules/docpad/node_modules/taskgroup/out/lib/taskgroup.js:435:27) 
    at Object._onImmediate (/PATH/TO/WEBSITE/REPOSITORY/node_modules/docpad/node_modules/taskgroup/out/lib/taskgroup.js:452:26) 
    at processImmediate [as _immediateCallback] (timers.js:354:15) 

Я прочитал хранилище README плагина Lunr, и я не всегда был обязательно, где поместить свойства конфигурации. Но вот docpad.coffee свойства, которые я придумал.

plugins: 
     lunr: 
      indexes: 
       myIndex: 
        collection: [ "story", "meta" ] 
        resultsTemplate: "src/partials/search-excerpt.html.eco" 

... И поиск результаты частичных в src/partials/search-excerpt.html.eco

<div> 
    <a href="<%= post.url %>"><%= post.title %></a> 
    <span>posted on <%= post.date %></span> 
</div> 

... И страница результатов поиска в src/render/search.html.eco

--- 
title: "search results" 
--- 

<%- partial("header") %> 

<%- @getLunrSearchPage("myIndex") %> 

<%- partial("footer") %> 

Я не удосужился пытается вставьте панель поиска в шаблоны веб-сайта, потому что основы уже ломаются. Что я делаю не так? Любая помощь будет принята с благодарностью.

ответ

0

Я никогда не делал это работающим - частичная часть. Мое решение было и работает очень хорошо - я напрямую изменяю источники (я знаю, плохая практика, вы можете разветвить проект, если хотите). Итак, в вашем проекте есть node_modules/docpad-plugin-lunr/out/lunrdoc.js и есть атрибут resultsTemplate, который вы можете изменить

0

У меня никогда не было плагина Lunr, но я думаю, что придумал лучшее, более простое решение.

Что я в итоге сделал, это простая форма HTML, которая выполняет пользовательский поиск моего сайта на DuckDuckGo - хотя я уверен, что вы можете легко настроить это, чтобы работать над любой поисковой системой, которую вы предпочитаете.

<!-- 
    Here, method="post" hides the query parameters, so the code doesn't 
    appear in the search results page URL. You can change attribute 
    `method` to "get" if you want all the parameters to show in the URL 
    bar when users go to the search page. 
--> 
<form action="https://duckduckgo.com/" method="post"> 
    <!-- 
     Input elements with type="hidden" won't render on your page, but 
     they send extra parameters when users submit the form. For 
     example, this will set DuckDuckGo to show search results for 
     *your* website. 
    --> 
    <input type="hidden" name="sites" value="YOURDOMAIN.URL" /> 

    <!-- 
     DuckDuckGo has a variety of parameters you can set to customize 
     the look and feel of the search results page. See 
     <https://duckduckgo.com/params> for a full list. 
     For example, this will set the page to use DuckDuckGo's 
     dark theme. 
    --> 
    <input type="hidden" name="kae" value="d" /> 

    <!-- 
     label the search bar with, say, a magnifying lens icon, or just 
     the word "Search." the `for` attribute has to match the `id` 
     attribute of the input element with type="search" coming up after 
     this. 
    --> 
    <label for="search-bar"> 
     <img src="/PATH/TO/SEARCH/ICON.jpg" alt="Search" /> 
    </label> 

    <!-- 
     The actual search bar. This sends the user's search terms to 
     DuckDuckGo. You can also add a `placeholder` attribute here to 
     show placeholder text until the user starts typing in the search 
     bar. 
    --> 
    <input id="search-bar" type="search" name="q" /> 
    <button id="search-button" type="submit" title="search provided by DuckDuckGo">Go</button> 
</form>