2017-09-13 5 views
1

나는 _colletion 콜렉션을 가지고 있습니다. 파일이 _collection/path/topic.md이고 내용이 많은 .md 파일이 많이 포함 된 _collection/path/topic/ 폴더가 있습니다. 이 파일의 퍼머 링크는 /path/topic/path/topic/file-x입니다. 따라서 동일한 이름의 폴더에 여러 개의 임의의 페이지가있는 상위 페이지가 있습니다."상위 페이지"에 대한 링크를 출력 하시겠습니까?

--- 
title: This is the page title defined in topic.md 
--- 

내가 그 가장 쉽게 할 어떻게 <a href="/path/topic">This is the page title defined in topic.md</a>

이되어야 :

는 지금은 출력 링크 텍스트로 topic.md의 제목이 모든 .md 파일 /path/topic에 대한 링크를 원하는?

나는 어떻게 든 .md 파일의 topic을 폴더 이름을 액세스하고 topic.md 내용을 읽을 수 및 출력이 title의도에 대한 링크를 생성 할 수 있습니까?

+1

는 page.url의 '주제'에 포함되지인가? – JoostS

+0

예,'file-x.md'는'page.url'로'/ path/topic/file-x'를 얻을 것입니다. 어떻게 든이 주제에서'topic'과'topic.md'의'title'과 URL로 갈 수 있기를 희망했습니다. 그래서 거기에 연결할 수 있습니다. – janpio

+1

topic.md가 index.md라고 불리는 것이 더 쉬웠을 것입니다 ... – JoostS

답변

1

나의 현재 매뉴얼 "솔루션"(또는 해결 방법) :

parent: ['Topic Title', '../topic'] 

에서 :

topic.md의 제목 및 상대 URL이 포함 /topic/에 모든 페이지의 frontmatter에 parent 항목을 추가 페이지의 템플릿 :

{% if page.parent %} 
    <p>« <a href="{{ page.parent[1] }}">{{ page.parent[0] }}</a></p> 
{% endif %} 

작동하지만 물론이 정보를 n 번 복제합니다. 수동으로 유지 관리해야합니다.

+0

매우 건조하지는 않지만 수용 가능한 빌드 타임을 가진 솔루션입니다. – JoostS

1

어때 이것 (옵션 1) 어때? 당신이 미친 빌드 시간을 신경 쓰지 않는 경우

{% assign pageurl_array = page.url | split: "/" %} 
{% assign path = pageurl_array[0] %} 
{% assign topic = pageurl_array[1] %} 
<p>« <a href="{{ path }}/{{ topic }}/{{ topic }}.html"> 
    {{ topic | capitalize | replace: "-", " " }} 
</a></p> 

이 (옵션 2) 수행

{% assign pageurl_array = page.url | split: "/" %} 
{% assign path = pageurl_array[0] %} 
{% assign topic = pageurl_array[1] %} 
{% capture parent_url %}{{ path }}/{{ topic }}/{{ topic }}.html{% endcapture %} 
<p>« <a href="{{ parent_url }}"> 
    {% for i in site.pages %} 
    {% if i.url == parent_url %} 
     {{ i.title }} 
    {% endif %} 
    {% endfor %} 
</a></p> 

내가 (더 빨리) 첫 번째 옵션에 대한 갈 것이라고를하고 수도를 얻기 위해이 자바 스크립트를 사용하여 특수 문자 오른쪽 :

$('a').each(function() { 
    var str = $(this).html(); 
    str = str.replace('Topic from url', 'Topic from URL'); 
    $(this).html(str); 
}); 

나는 자바 스크립트 솔루션이 예쁘다는 것을 인정하지만, 빌드 시간 문제를 꽤 잘 해결해 준다.

지킬은 꽤 느립니다. 빌드 시간이 더 필요하면 Hugo를 파헤 치라고 충고합니다.

+0

오, 매우 수동;) href가 적용될 수있는 것처럼 보입니다 ('/ {{}}/{{topic}} '로 충분할 것 같습니다.) 그리고 "workaround"의 일부를 대체하십시오. 그러나 나는 자동으로'topic.md'에서 실제'title' 속성을 얻고 싶었습니다 ... (그래서 링크 텍스트는 "Topic"이 아니라 "topic, md에 정의 된 페이지 제목입니다") – janpio

+1

You site.pages를 반복하고이 제목을 찾기 위해 URL을 일치시킬 수는 있지만 빌드 시간을 (극적으로) 늘릴 수 있습니다. 나는 그것이 정말로 필요하지 않은 것처럼 그렇게하지 않을 것이다. – JoostS

+0

그래, 나는 (performant) "나에게이 파일/페이지에 대한 제목을 알려주지 않았다"라는 기능이 있었으면 좋겠다. – janpio

1

내 질문에 대한 의견과 다른 답변에 대한 토론에서 나는 내가 만들고 싶었던 것이 실제로는 매우 흔한 일이라는 것을 알아 냈습니다 : 빵 부스러기 탐색! 단지 아주 작은 "하나"수준입니다.이 솔루션은 "부스러기"를 추출 할 페이지의 경로를 사용

:

내가 지킬를위한 플러그인을 구글 "탐색 경로"수이 새로 발견 한 지식을 가진

링크 텍스트의 폴더 이름을 사용합니다.

또 다른 유사한 구현 :

또 다른 하나 : 그래서

모든 O를 전혀 title 링크 텍스트 이것들.


이 솔루션은 실제로 페이지 title를 읽고, 또한 페이지에서 breadcrumb frontmatter를 읽을 수 있으며, 링크 텍스트로 다음을 사용합니다

e는 유효한 해결책 일 수 있습니다.


실제 플러그인 (불행하게도 Github의 페이지에서 작동하지 않는)도있다 :