Пытаюсь настроить плагин полнотекстового поиска Lunr для сайта Docpad. Что я делаю неправильно?

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

$ 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" ) %>

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


person Community    schedule 30.03.2015    source источник


Ответы (2)


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

person Lukasz Gornicki    schedule 03.04.2015

У меня никогда не работал плагин 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>
person Community    schedule 05.04.2015