2014-09-30 6 views
1

В Джекил питание страницы, у меня есть набор файлов, расположенных в:Включить файлы, а также копировать их на выходе

_includes/stuff/ 

Я положил эти файлы там, так что я могу include их на других страницах Markdown с помощью:

{% include stuff/example.txt %} 

Это работает должным образом.

Однако я также хочу скопировать эти файлы на сгенерированную страницу, чтобы я мог ссылаться на них и чтобы люди могли следить за этими ссылками для их загрузки. Но по определению вещи, хранящиеся в каталогах, начинающихся с подчеркивания, не копируются Jekyll.

Другой подход также не работает. Я помещал файлы в собственную верхнюю папку под названием stuff. Это копирует папку на конечный сайт. Однако я не могу включить файл из этой папки. Кажется, include_relative разрешает включать файлы ниже текущего. Например, следующее не работает:

{% include_relative stuff/example.txt %} 
{% include_relative /stuff/example.txt %} 
{% include_relative ../stuff/example.txt %} 

Любые идеи, как я могу добиться включения и копирования в одно и то же время?

+0

Как насчет использования 'include' вместо' include_relative'. Я не пытался, но это была бы моя первая попытка. –

+0

@RudyVelthuis Не работает, я попробовал это первым, посмотрю начало моего вопроса. – Sebi

ответ

3

Это работает с index.html

{% include_relative example.txt %} for example.txt 
{% include_relative stuff/example.txt %} for stuff/example.txt 
{% include_relative /stuff/example.txt %} for stuff/example.txt 

материал/example.txt

class Toto 
    def dototo 
     myvar = "toto" 
    end 
end 

index.html

{% assign codeurl = "stuff/example.txt" %} 
{% highlight ruby %} 
{% include_relative {{codeurl}} %} 
{% endhighlight %} 
<a href="{{codeurl}}">link to code</a> 

if codeurl == "/stuff/example.txt" this generates a link relative to site root 
this may need {{site.baseurl}} prepended if your site is not at the root 
of a domain (eg: user.github.io/repository) 
<a href="{{site.baseurl}}{{codeurl}}">link to code</a> 

По соображениям безопасности, это не будет работа:

{% include_relative ../stuff/example.txt %} 
Just to avoid directory traversal 
{% include_relative ../../../../../../../../../../../../etc/pwd %} 

Если вы хотите, чтобы поставить вас файлы в _includes/StuFF вам нужно будет сделать в _config.yml в include: [ /_includes ], который будет включать в себя все файлы в _includes как статические файлы. Не очень чистый, поскольку вы не можете фильтровать поддиректории, такие как include: [ /_includes/stuff ], чтобы импортировать только файлы ваших файлов.

Примечание: грязный трюк позволяет вам импортировать только _includes/stuff/*.txt, но я думаю, что это действительно грязно.

# _config.yml 
include: 
    - "_includes" 
    - "stuff" 
    - "*.txt" 

exclude: 
    - "_includes/*.*" 
+0

Ha! Это ** - это грязный трюк, но невероятно полезный !!! Краткая версия: у меня есть настройка подмодуля в моем каталоге '_data', и вам нужно оставить пару файлов оттуда. Это единственный способ, которым я мог бы заставить это работать без повторного дублирования подмодуля, спасибо :) – sjm324

Смежные вопросы