2017-01-23 5 views
0

私はthe official instructions on the Hakyll siteをフォローして、自分のサイトでポストティーザーを実行しています。残念ながら、私はひどい打撃を受けており、指示はあまり役に立ちません。ポストティーザーをインストールするにはどうしたらいいですか?

私はこのスニペットで参照item値を範囲外のエラーを取得しています:

loadAndApplyTemplate 
    "template/postitem.html" 
    (teaserField "teaser" "content" <> defaultContext) 
    item 

site.hsにそれを埋め込みます。再現性の面では、<>オペレータがどこから来たのか明確ではありませんでした。これはLiterate Haskellのモジュールの1つをインポートする必要がありました。

itemにこの参照がどこから来たのかそれは完全に不明瞭だし、それはかなり一般的な言葉だから、私は私のマシン上でfindgrepを用いた場合であっても、結果の何千もの取捨選択する必要があります。

ここでitemにアクセスするには、宣言またはインポートする必要がありますか?

+0

'(<>)'は['Data.Monoid'](https://hackage.haskell.org/package/base-4.9.1.0/docs/Data-Monoid.html#v:-60- -62-)。 –

+0

@JanTojnar私はHoogleでそれを探し、 'template-haskell Language.Haskell.TH.PprLib'と' pretty Text.PrettyPrint.HughesPJ、pretty Text.PrettyPrint'の両方で利用できました。 – Jules

+0

ほとんどの場合、 '(<>)'が 'mappend'として使われます。たとえば、['Text'](https://hackage.haskell.org/package/text-1.2.2.1/docs/Data-Text.html#t:Text)への参加や、あなたの例えば、 '' Context'(https://hackage.haskell.org/package/hakyll-4.9.5.0/docs/Hakyll-Web-Template-Context.html#t:Context)をビルドするためのもので、どちらも ' Monoidのインスタンス。 –

答えて

1

チュートリアルページは完全な例ではありません。 itemは、一部の機能への参照ではありません。それはちょうどItemのプレースホルダーの名前です。通常はpandocCompilerまたはmany other "compilers"のいずれかから取得します。この例では、loadAndApplyTemplateは他の用途と同様です。唯一の違いは、$teaser$がテンプレートのティーザーテキストにバインドされることです。

これは、通常、複数の投稿を一覧表示するページにティーザーテキストを使用したいので、これは素晴らしい例ではありません。これはおそらくlistFieldを使用して、テンプレート内で反復処理する投稿のコレクションを作成することに関係します。たとえば、これは私のインデックスページのためのルールです:

​​

「アイテム」、この場合には、どのようなgetResourceBody戻り、index.htmlのすなわち体です。これにより、$posts$が投稿のリストにバインドされます。メタデータを無視して、私のindex.htmlだけです:

$for(posts)$ 
    $partial("templates/teaser.html")$ 
$endfor$ 

$teaser$は、その後template/teaser.htmlテンプレートにバインドされています。

関連する問題