ghost cms 에 목차(toc) 넣기
큰 문서는 목차(table of contents) 를 제공하면 독자가 전체 구조를 파악하고 필요한 부분만 읽는등 더 쉽게 접근할 수 있습니다.
고스트는 목차 기능이 별도로 제공되지 않아서 다음 방법으로 직접 설정해야 합니다.
코드
사이트 header 에 추가
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/tocbot/4.13.5/tocbot.min.css" integrity="sha512-SFw7k74K3983tyOlJIHa8atr9Ppef3Kix5cmifwzU7ZdtU2E0FRuOVRtd3ENpMJ8sNCie5hlb/0j23efcdQJXA==" crossorigin="anonymous" referrerpolicy="no-referrer" />
code inject js
<script src="https://cdnjs.cloudflare.com/ajax/libs/tocbot/4.13.5/tocbot.min.js" integrity="sha512-Pb1ryJBQ8yanWB5d4BaW6AyQsPNkB3m9dVNLpwYeyQA3jxM/NJtLXsB0DU4VOD0EBbJBXm8LOnwsVnQCdClwgg==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
footer 에 다음 내용을 추가합니다. contentSelector 는 theme 종류에 따라 다를 수 있는데 기본 테마인 casper 는 post-content 이고 제가 사용하는 theme 는 gh-content 였습니다.
자세한 건 chrome 개발자 모드에서 해당 selector 를 확인해 보세요.
<script> tocbot.init({ tocSelector: '.toc', /* contentSelector: '.post-content', */ contentSelector: '.gh-content', hasInnerContainers: true }); </script>
이제 post 를 작성할 때 상단에 html 을 하나 삽입합니다.
그리고 html 에 다음 내용을 추가하고 저장합니다.
<aside class="toc"></aside>
그러면 상단에 다음과 같이 toc 가 추가된 것을 볼 수 있습니다.
theme 에 넣기
위 방법은 빠르게 목차를 넣을 수 있지만 예쁘지 않고 customizing 이 불가능하므로 더 유연하게 만들려면 직접 테마를 수정해야 합니다.
사용하는 테마의 default.hbs 의 head 영역에 css link url 을 추가합니다.
<head> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/tocbot/4.13.5/tocbot.min.css" integrity="sha512-SFw7k74K3983tyOlJIHa8atr9Ppef3Kix5cmifwzU7ZdtU2E0FRuOVRtd3ENpMJ8sNCie5hlb/0j23efcdQJXA==" crossorigin="anonymous" referrerpolicy="no-referrer" /> {{ghost_head}} </head>
그리고 default.hbs 의 body 영역에 css link url 을 추가합니다.
<body> <script src="https://cdnjs.cloudflare.com/ajax/libs/tocbot/4.13.5/tocbot.min.js" integrity="sha512-Pb1ryJBQ8yanWB5d4BaW6AyQsPNkB3m9dVNLpwYeyQA3jxM/NJtLXsB0DU4VOD0EBbJBXm8LOnwsVnQCdClwgg==" crossorigin="anonymous" referrerpolicy="no-referrer"></script> <script> tocbot.init({ tocSelector: '.toc', contentSelector: '.post-content', /*contentSelector: '.gh-content', */ hasInnerContainers: true }); </script> {{{block "scripts"}}} </body>
post.hbs 에서 content 영역을 찾은 후에 그 위에 toc class 를 추가합니다. (content 영역은 테마마다 다를 수 있으니 크롬 개발자 모드에서 영역을 확인해 보세요)
<article class="{{post_class}} single"> {{> post-header tag="h1" show_meta=true single=true}} {{> post-media same_height=false with_caption=true}} {{!-- 추가 --}} <aside class="toc-container"> <div class="toc"></div> </aside> <div class="post-content kg-canvas u-text-format"> {{content}} </div> {{> post-tags}} </article>
toc 에 사용할 css 파일(예: toc.css)을 만들어 주고 테마의 assets/css/ 폴더에 저장합니다.
.post-content h2, .post-content h3 { outline: none; } body { overflow: visible; } .post-full-content { display: grid; grid-template-columns: 1fr 0.2fr; padding: 0 0 6vw; margin: 0; } .toc-container { order: 1; } .toc-container .toc { position: sticky; top: 70px; min-width: 260px; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, Ubuntu, Cantarell, Open Sans, Helvetica Neue, sans-serif; font-size: 1.6rem; line-height: 1.6em; padding: 0 0.8em; } .is-active-link::before { background-color: #3eb0ef; } ol.toc-list { margin: 0; }
예로 toc.css 를 만들었으면 default.hbs 의 head 에 다음 내용을 추가합니다.
<head> <link rel="stylesheet" type="text/css" href="{{asset "css/toc.css"}}" /> {{ghost_head}} </head>