프로그래밍 방식으로 페이지의 YAML 앞부분 (메타)에 지정된 페이지에 스크립트 또는 스타일 시트 태그를 추가 할 수 있습니까? 다음 내용 src/documents/posts/a.html.eco
가 가정프로그래밍 방식으로 페이지 단위로 스크립트 또는 스타일 시트를 추가하는 방법
:
---
layout: default
scripts: ['a.js']
---
Blog post that requires a special javascript
레이아웃 src/layouts/default.html.eco
다음 내용은 :
...
@getBlock('scripts').toHTML()
</body>
...
posts/a.html
의 최종 결과가 같아야
...
<!-- some extra stuff that was added when processing script tag -->
<script scr="/scripts/a.js"></script>
</body>
...
.. 다른 페이지는 붙지 않아야합니다. e에 대한 참조 /scripts/a.js
태그 위의 주석은 태그를 삽입하기 전에 처리가 진행될 수 있음을 보여주기위한 것입니다.
나는docpad.coffee
(
docpad-plugin-livereload
플러그인에서 촬영 방법 포함) 파일하지만이 같은 문제에 직면 할 때마다에
events
다른 사용하여 여러 방법을 시도 - 스크립트 태그 대신에만
a.html
에 적용되는 모든 페이지에 적용되었다. 여기 내 시도 중 하나입니다 : 나는 또한 지금까지
render
이벤트,
populateCollections
(문서화되어 있지 않습니다 그러나 내가
docpad-plugin-livereload
플러그인에서 발견), 심지어
extendTemplateData
이벤트와 행운을 시도했습니다
renderDocument: (opts) ->
{extension,templateData,file,content} = opts
if extension == 'html' and scripts = file.get('scripts')
if typeof scripts != 'undefined'
scripts.forEach (scriptName) ->
@docpad.getBlock('scripts').add('<!-- custom script tag here -->')
.
내가 레이아웃 안에이 권리를하는 방법이 알고
완전히 괜찮하고 정말 예상대로, 그러나 나를 위해 충분한 자유를 제공하지 않는 것 작동 요식@getBlock('scripts').add(@document.scripts or [])
페이지에 삽입하기 전에 내용을 조작하십시오. 그리고 가능한 경우에도 레이아웃 템플릿 내부에 무거운 논리가 있다는 생각이 싫어서 플러그인/docpad.coffee에 있어야합니다.
희망 사항 의미가있다
FrontEnd 플러그인을 사용해 보셨습니까? https://github.com/sergeche/docpad-plugin-frontend 그게 효과가 있다면 그렇게 말하면 답에 넣을 수 있습니다. :) – greduan
의견을 주셔서 감사합니다. 예, 플러그인을 확인했습니다. 그러나 Docpad의'@ getBlock'을 사용하여 스크립트를 추가하지는 않지만 사용자 정의 @assets 객체를 생성하고 채 웁니다. 그런 다음 레이아웃에서 반복합니다. 네이티브 Docpad의'@ getBlock' 헬퍼를 사용하는 솔루션을 찾고 있습니다. –