2016-09-16 4 views
3

Недавно мне была дана перестройка веб-сайта. Переработанный сайт должен быть выполнен в Markdown и проходить через генератор Hugo static site.Как другой файл может быть включен в страницу Hugo/Markdown?

Есть ли способ включить другие файлы в веб-страницу Markdown, обработанную через Hugo? Если да, то как? Если я что-то пропустил, это не рассматривается в Hugo docs.

С HTML и некоторых серверов (Apache, по крайней мере), вы можете сделать что-то вроде:

<html> 
<body> 
Some content 
<!--#include virtual="name_of_first_file_to_include" --> 
More content 
<!--#include virtual="name_of_second_file_to_include" --> 
Still more content 
</body> 
<html> 

Я попытался создать шаблон страницы, который ставит такие вещи, как «Some содержание» и «Больше содержания» в шаблон, а затем включенный материал в моем .md-файле, который «включается» через {{.Content}} в шаблоне. Однако 1) Это похоже на неправильный способ использования шаблона. 2) Я не придумал способ принести больше файлов, если они мне понадобятся.

ответ

5

Для файлов контента есть два варианта:

  1. Шорткоды. Мощный и документированный.
  2. Использовать mmark в качестве рендеринга рендеринга с его функцией include. Переименуйте файлы содержимого в «* .mmark». См. https://github.com/miekg/mmark

Я являюсь хранителем Хьюго.

+0

** include ** директива mmark делает некоторую фильтрацию контента, я не прав? Что делать, если я хочу включить сырую часть html со скриптами внутри? (например, интерактивная диаграмма) –

+1

Я не знаком с mmark, но я подозреваю, что вы можете обернуть его в 'div'. Но есть третий вариант: у Hugo есть шаблон func с именем 'readFile', но поймите, что результат не кэшируется каким-либо образом, поэтому, если вы используете его из сильно используемого шаблона, я предлагаю вам его обернуть в' partialCached'. – bep

+0

* readFile * Звучит хорошо: D Я этого не заметил! Спасибо. Так что мне нужно написать короткий код для включения фрагментов исходного текста. –

1

Коллега предложил creating a shortcode, чтобы помочь в этом. Хотя это не совсем то, что я имел в виду - это сложнее, чем мне хотелось бы - это не так уж плохо, и я не нашел лучшего способа. Таким образом, я реализовал решение, используя shortcode и CSV-файл. Простые примеры файлов приведены ниже:

файл контента по-прежнему (в основном) уценки и выглядит примерно так:

+++ 
date = "2016-09-29" 
title = "short_code_test" 
type = "pages" 
+++ 

## Short Code test 

Test table should appear below: 

{{< display_table_csv "static/test_data.csv" >}} 
    <tr><th>Name</th><th>Birthday</th> 
{{</test_table_shortcode>}} 

(Обратите внимание, что type = "pages" просто тянет в шаблоне, который модифицирует/отменяет Гуго-Uno по умолчанию страницы/single.html шаблон, чтобы сделать выходной очиститель для целей отображения ниже)

макеты/шорткоды/display_table_csv.html:.

<table> 
    <thead> 
     {{ .Inner }} 
    </thead> 
    <tbody> 
    {{ $url := (index .Params 0) }} 
    {{ $sep := "," }} 
    {{ range $row_i, $row := getCSV $sep $url }} 
    <tr> 
    {{ range $col_i, $col := $row }} 
    <td>{{ $col }}</td> 
    {{ end }} 
    </tr> 
    {{ end }} 
    </tbody> 
</table> 

статические/test_data.csv:

John, 1940-10-09 
Paul, 1942-06-18 
George, 1943-02-25 
Ringo, 1940-07-07 

Это изображение показывает, как все оказывается: Shortcode test screenshot

Data-driven Content page в Hugo docs был полезен также.

1

У меня есть пользовательский шорткод для рендеринга моих статических демо-файлов в качестве кода с помощью уценки, это просто:

макетов/шорткодов/code.html

{{ $file := .Get "file" | readFile }} 
{{ $lang := .Get "language" }} 
{{ (print "```" $lang "\n" $file "\n```") | markdownify }} 

содержания/должность/некоторые-пост.md

{{% code file="/static/some-script.js" language="js" %}} 
Смежные вопросы