dataview나 dataviewjs 코드블록에 커서(캐럿)를 위치시켜고
템플릿을 실행하면 클립보드로 그 Dataview 결과를 마크다운 형식으로 복사합니다.
복사된 내용을 바라는 곳에 어디에나 붙여넣기(Ctrl + V) 하면 됩니다.
얼마 전에 Dataview로 바라는 파일들 목록 표를 만들어 그 가운데서도 세부적으로 더 일부만 선택하여 한꺼번에 여러 노트의 메타데이터 태그를 바꾸는 템플릿을 만들었습니다. (아래 링크)
옵시디언 - 한꺼번에 여러 노트의 태그들을 바꾸기(Feat. 템플레이터 & 데이터뷰)
https://eoureo.tistory.com/entry/옵시디언-한꺼번에-여러-노트의-태그들을-바꾸기-Feat-템플레이터-데이터뷰
여기에 더해서 파일 목록 표에 열을 추가하고 고칠 수 있으면 더 많은 것을 할 수 있을 것이라고 생각했습니다.
예로 들면 표에 새로 바꿀 파일 이름 열을 더 하여 거기에 새로운 이름을 넣을 수 있으면 템플릿을 써서 한꺼번에 파일 이름을 고칠 수 있을 것 같습니다. 또는 메타데이터(프런트매터) 구조나 키 이름 바꾸기도 할 수 있겠네요.
그래서 Dataview로 만들어진 결과(테이블, 리스트, 태스크)를 일반 텍스트로 된 표로 만들기 위해 테이블을 선택하고 Ctrl+C(복사하기)하고 Ctrl+V(붙여넣기)를 하면 제대로 되지 않습니다. 그래서 인터넷 검색을 통해 방법을 찾았으나 찾지 못하였습니다.
또한 볼트 안의 내용이 바뀔 때마다 Dataview 결과는 다시 만들어지게 됩니다. 따라서 불필요하게 시스템 자원을 낭비하게 되는 경우가 많습니다.
또 옵시디언이 아닌 마크다운 편집기에서는 Dataview 결과를 볼 수가 없습니다.
그러던 가운데 저와 같은 생각을 가지고 있는 분의 글도 보게 되었습니다.
깬아이 2023.04.02. 20:34
https://cafe.naver.com/obsidianary/4212
위 글에서 "Dataview를 사용하여 노트를 작성하면 마크다운 노트의 장점인 범용성, 가벼움, 호환성이 심각하게 훼손됩니다."라는 글에 공감하였습니다.
이렇게 해서 이 템플릿을 만들게 되었습니다.
설정과 사용 방법
다음 슬라이드에서 해당 설정과 사용 방법을 볼 수 있습니다.
소스 코드
템플릿 소스 코드
Copy Markdown of Dataview.md (☜ 이 파일을 다운로드하여 Templater 폴더에 넣으면 됩니다.)
Github 저장소( https://github.com/eoureo/Obsidian-Template-Copy-Dataview )에서도 볼 수 있습니다.
아래 Github1s 프레임( 새창에서 열기 )에서도 소스를 볼 수 있습니다. (Shift + Ctrl + P > Change language mode > javascript로 해서 보면 좋습니다. Ctrl + B로 사이드 패널을 숨겨서 소스를 넓게 보세요. )
Dataview 코드 (슬라이드에서 템플릿 테스트에 사용됨)
코드 일부는 제가 이전에 만든 교보문고 도서정보(https://eoureo.tistory.com/entry/옵시디언-Templater-교보문고-도서-검색한-다음-선택하여-정보-가져오기) 노트 파일을 이용하고 있으므로 코드 내용을 고쳐서 테스트 해보기 바랍니다.
---
cssclass: cards, cards-cover, cards-2-3, table-100, width-100
---
# 테스트 - Copy Markdown of Dataview
## dataview 코드 블럭
### Table
table
```dataview
table without id
("![|80](" + cover + ")") as Cover,
("<input type=checkbox checked> [[" + file.path + "|" + book-title + "]]") as Title,
join(nonnull(list(authors.authors, authors.translaters)), ", ") as Authors,
publisher as Publisher,
string(replace(publish-date," (", "<br>(")) as P-date,
category as Category,
default(rating, "") + padright("", default(rating, 0), "⭐") as Rating
from #book and "pages"
where cover != null
sort publish-date
```
### List
List 1
```dataview-
List
```
List 2
```dataview
List without id "[[" + file.path + "|" + book-title + "]]" + " - " + join(nonnull(list(authors.authors)), ", ") + choice(rating, " (⭐" + rating + ")", "")
from #book
where cover != null
sort book-title
```
### Task
TASK 1
```dataview-
TASK
```
TASK 2
```dataview
TASK
from #tag
```
TASK 3
```dataview
TASK
WHERE !completed
GROUP BY file.link
```
## dataviewjs 코드 블럭
### Table - Category
#### 테이블 셀 안에 dv.el 있는 경우
```dataviewjs-
for (let group of dv.pages("#book").where(k => k.cover != null).groupBy(p => p.category)) {
dv.header(4, group.key);
dv.span("category: ")
dv.el("b", group.key, {attr:{style:"color:yellow"}})
let p = dv.paragraph("개수: " + group.rows.length);
dv.table(["Cover", "Title", "Authors", "Publisher", "Pdate", "Rating"],
group.rows
.sort(k => k["publish-date"], 'desc')
.map(k => ["![|80](" + k.cover + ")",
`<input type="checkbox"> ` + "[[" + k.file.path + "|" + k["book-title"] + "]]",
dv.el("b", [k.authors.authors, (k.authors?.translaters? k.authors?.translaters:[])].join(", "), {attr:{style:"color:red"}}),
dv.el("span", k.publisher, {attr:{style:"color:orange"}}),
k["publish-date"].replace(/ \(/g, "<br>("),
(k.rating? k.rating:"") + (k.rating?"⭐".repeat(k.rating):"") ]))
}
```
#### append로 덧붙인 경우 - 지금 안됨
```dataviewjs
for (let group of dv.pages("#book").where(k => k.cover != null).groupBy(p => p.category)) {
dv.header(3, group.key);
let p = dv.paragraph(group.key);
p.append(dv.span("category: "));
p.append(dv.el("b", group.key, {attr:{style:"color:yellow"}}));
dv.table(["Cover", "Title", "Authors", "Publisher", "Pdate", "Rating"],
group.rows
.sort(k => k["publish-date"], 'desc')
.map(k => ["![|80](" + k.cover + ")",
"[[" + k.file.path + "|" + k["book-title"] + "]]",
[k.authors.authors, (k.authors?.translaters? k.authors?.translaters:[])].join(", "),
dv.el("span", k.publisher, {attr:{style:"color:red"}}),
k["publish-date"].replace(/ \(/g, "<br>("),
(k.rating? k.rating:"") + (k.rating?"⭐".repeat(k.rating):"") ]))
}
```
#### paragraph 안의 테이블
```dataviewjs-
for (let group of dv.pages("#book").where(k => k.cover != null).groupBy(p => p.category)) {
dv.header(3, group.key);
let tbl = dv.markdownTable(["Cover", "Title", "Authors", "Publisher", "Pdate", "Rating"],
group.rows
.sort(k => k["publish-date"], 'desc')
.map(k => ["![|80](" + k.cover + ")",
"[[" + k.file.path + "|" + k["book-title"] + "]]",
[k.authors.authors, (k.authors?.translaters? k.authors?.translaters:[])].join(", "),
dv.el("span", k.publisher, {attr:{style:"color:red"}}),
k["publish-date"].replace(/ \(/g, "<br>("),
(k.rating? k.rating:"") + (k.rating?"⭐".repeat(k.rating):"") ]))
dv.paragraph(tbl);
}
```
```dataviewjs-
const table = dv.markdownTable(["Result"], [["1"],["2"]])
console.log(table)
```
### list test
```dataviewjs
dv.list(dv.pages("#book").where(k => k.cover != null).groupBy(p => p.category).map(g => g.key + ": " + g.rows.length));
```
```dataviewjs-
dv.list(dv.pages("#book").where(k => k.cover != null).groupBy(p => p.category));
console.log(dv.pages("#book").where(k => k.cover != null).groupBy(p => p.category))
```
### Task
```dataviewjs
dv.taskList(dv.pages("#tag").file.tasks
.where(t => !t.completed))
```
### execute
```dataviewjs
dv.execute("LIST FROM #book/audio");
```
```dataviewjs
dv.executeJs("dv.list([1, 2, 3])");
```
### 코드 블럭 안의 코드 블럭
````
```dataviewjs_
dv.execute("LIST FROM #book/audio");
```
```dataview
LIST FROM #book/audio
```
````
만들면서
처음에는 Buttons을 써서 만들려고 했는데 안되어 템플레이터로 만들게 되었습니다.
소스 코드를 보면 굳이 템플레이터를 쓸 필요가 없습니다.
템플레이터보다 스크립트를 더 쉽게 쓸 수 있는 플러그인이 있으면 좋겠네요.
안되는 Dataview 코드가 있으면 댓글 달아 주세요. 해결 방법을 찾아 보도록 하겠습니다.
여러 의견을 듣고 싶습니다. 많은 댓글 바랍니다.
'Obsidian > Templater' 카테고리의 다른 글
옵시디언 템플레이터(Templater) - Callout 넣기 (6) | 2023.04.16 |
---|---|
옵시디언 템플레이터(Templater) - 교보문고 도서 검색(제목, 저자)한 다음 선택하여 정보 가져오기 (0) | 2023.04.11 |
옵시디언 템플레이터(Templater) - 교보문고 도서 정보 가져오기(User Script Functions을 써서) (3) | 2023.04.11 |
옵시디언 - 한꺼번에 여러 노트의 태그들을 바꾸기(Feat. 템플레이터 & 데이터뷰) (0) | 2023.04.05 |
옵시디언 템플레이터(Templater) - 교보문고 도서 정보 가져오기 (고침 @2023-04-05 20:00:00) (0) | 2023.03.22 |