prismic開発メモ
コンテンツの種類にSingle Typeがある。サイト内の文章を全てprismicに押し込めるのは魅力的かも。
初Repeatable type操作。ドキュメント読まずなんとなく触ってみる。
画像とか色々組み込みたい気持ちを抑えてひとまず少ない項目で。
Add a new tabとあるがよくわからないままSave
Custom Types作ったらあとはドキュメント書くだけ。簡単。
Nextjsで使うのでここ見てく。
Sliceの機能などは使わずシンプルにコンテンツを引っ張ってきて表示するのを目指す。(Slice使うつもりはそもそもなかったので)
Sliceが目玉らしい?ので推したいんだろうけど。リッチテキストとかゴリゴリ使う場合は確かに便利かも。
No Codeベースで作りたいならいいかも。
コーディングベースだと色々(特にスタイル)いじりたいので扱いが難しそう。特にデザインをライブラリに頼ってる場合は特に。
シンプルに使う分には、クエリーは簡単そう。
typeごとの内容をどう扱えばいいかのドキュメント。
RichText.asText()でプレーンテキストを得られる。
というか、NextよりまずReactの方を先に見るべきだな。
リッチテキストをカスタムコンポーネントで扱いたい時はこう。
うん、Reactに関することはこっちのドキュメント見るべき。
@prismicio/react
と
prismic-reactjs
は同じものだった。
ドキュメントが追いついてないっぽい。
ということで
$ npm install @prismicio/react @prismicio/client
てっきりシークレットなアクセストークンありきなものかと思ったら。
プライベートにしたいならクライアント側でアクセストークン露出したらあかんやん。なんかガイドが不親切なきが?(詳しく読んでない)
@prismicio/clientのv5とv6でAPIがまぁまぁ違う。
Nextjsのチュートリアルは古いので参考程度に見て、あとはライブラリ自体の最新版のガイドを見るべし。
これでlogに出してみる
getByTypeで出してみようとしたけど1つでも記事をpublishしてないとエラーになった。
og:titleはサポートされてるけどdescriptionが中途半端。
Rich textは何もしないとピュアなhtmlで表現される。
カスタマイズしたい場合は、こうできる。
<PrismicRichText
field={document.data.myRichTextField}
components={{
heading1: ({ children }) => <Heading>{children}</Heading>,
paragraph: ({ children }) => <p className="paragraph">{children}</p>,
}}
/>
PrismicProviderで一括して変更できるのでこっちが便利か。
const PrismicCustomProvider = ({ children: mainchildren }) => (
<PrismicProvider
richTextComponents={{
paragraph: ({ children }) => <Text>{children}</Text>,
hyperlink: ({ node, children }) => (
<ExternalLink link={node.data.url}>{children}</ExternalLink>
),
}}
>
{mainchildren}
</PrismicProvider>
);
こっちに書けばよかったか。
publish前の記事をローカルだけでいいから見たいなぁ。
preview modeはなんだか用途にあわなさそう。
publish前(unpublish)、archivedな物を引っ張ってくるapiはなさそう。
tagsで運用するか・・・
サーバーサイドで扱うならこうできる
export const getStaticProps = async () => {
const rawContents = await client.getAllByType('...type...');
const contents = rawContents
.filter(({ tags }) => !tags.some((tag) => tag === 'unpublished')) // productionではこうしといて、ローカル開発するときはコメントアウトすればよい
.map((raw) => raw);
return {
props: {
contents,
},
};
};
試したけどName of the Webhookちゃうやん。Type nameやん。まぁいいけど。
type : test-trigger | api-update
masksってのもある。
新規でドキュメントpublishしたらmasks.additionがあるのを目撃。その後出てこない。
うん、とりあえず細かな情報は得られなさそうだからdocument idで引っ張ってみるしかなさそう。