· documentation · 8 min read
mosugeek CMSテンプレートの深堀り
初めは簡単に始められるものの、mosugeek CMSは内部的にかなり複雑です。このページでは、より複雑な部分のドキュメンテーションを提供します。
概要
mosugeek CMS の内部構造や、特にさまざまな使用方法について理解するのはやや難しい作業です。
このページでは、mosugeek CMS で見つかったいくつかの技術を概説し、明確にします。さらなる変更のガイドとして、または自分の取り組みで使用する技術の教材として活用してください。
スタイリング
名前が示すように、mosugeek CMS はスタイリングに TailWind を利用しています。さらに、mosugeek CMS はカスタムの低レベルスタイル設定を定義し、これらは TailWind にシームレスに組み込まれ、高レベルのスタイリング構造に一貫性を提供し、ダークモードを有効にします。
スタイリングメカニズムは以下のファイルで構成されています(すべてのパスは /src/
で始まります):
assets/styles/tailwind.css
このファイルは、TailWind の base.css の基本的な拡張です。ここでは高レベルのコンポーネントスタイルが定義されています。また、ファイルの最後にある ‘attribute’ セレクタで選択された要素のスタイリング、特に ‘data’ 属性で選択されたものに注意してください。
components/CustomStyles.astro
カスタムカラーやフォントを定義します。これらを ‘base.css’ ファイルで有効にするためには、HTMLヘッダーセクションで読み込む必要があります。次を参照してください。
layouts/Layout.astro
このレイアウトは、mosugeek CMS によってレンダリングされるすべてのページで使用されます。上述の tailwind.css および CustomStyles.astro コンポーネントの内容が HTML ヘッダーに注入されます。
ダークモード
ダークモード はページヘッダーの小さな ‘日光’ アイコンでトリガーされます:。これは components/common/ToggleTheme.astro で定義されていますが、イベントは components/common/BasicScripts.astro に添付され、次のスニペットでアクシ ョンが定義されています:
attachEvent('[data-aw-toggle-color-scheme]', 'click', function () {
if (defaultTheme.endsWith(':only')) {
return;
}
document.documentElement.classList.toggle('dark');
localStorage.theme = document.documentElement.classList.contains('dark') ? 'dark' : 'light';
});
これはクライアントイベントです。BasicScripts.astro はこのイベント以外にもいくつかのクライアントサイドの機能を定義しています。
高度なスロット使用法
スロットは、Astrojs を含む多くのフレームワークで一般的なコンポーネント実装の一部です。コンポーネント内の典型的なスロット定義は次のようになります:
---
// (ファイル: MyComponent.astro)
const { title } = Astro.props;
export interface Props {
title: string;
}
---
<div>
<h2>{title}</h2>
<slot />
<!-- スロット内容はここに注入されます -->
<div></div>
</div>
他の場所での使用法:
import MyComponent from "~/components/MyComponent"; ...
<MyComponent someArg="スロットの例">
<p>このコンテンツはスロットに表示されます</p>
</MyComponent>
代替使用法
スロットの別の使い方には、特にコンポーネントがマークダウンコンテンツを持つ場合に有用な方法があります(注意深く検討してください…):
---
// (ファイル: MyComponent.astro)
const { title } = Astro.props;
export interface Props {
title: string;
}
const content: string = await Astro.props.render('default');
---
// HTMLを 'content' 変数にレンダリングします
<div>
<h2>{title}</h2>
<div set:html={content} />
<!-- スロット内容はここに注入されます -->
<div></div>
</div>
何が起こっているのか?!
HTML部分のコンポーネントにスロット定義がないことに気づくでしょう。代わりに、Astro がスロットコンテンツ(ここでは ‘default’ コンテンツ、名前付きスロットもレンダリング可能)を変数にレンダリングし、そのコンテンツを div に使用します(たとえば)。
したがって、マークダウンファイルでの使用法は次のようになります:
import MyComponent from '../../components/MyComponent';
# .mdxファイルで上記のコンポーネントを使用する(コンポーネントを取ることができます)
{' '}
<MyComponent title="スロットの実装者です">### こちらはマークダウンコンテンツです - リストアイテム付き。</MyComponent>
MyComponent はマークダウンをHTMLにレンダリングし、それをdivに注入します。
これには大きな利点があります — 通常の使用法ではスロットコンテンツにアクセスできません:Astro は単にコンテンツを <slot/> タグに挿入します。しかし、この方法を使用すると、コンテンツにアクセスして、HTMLに挿入される前にさらに操作することができます。
これにより、コンポーネント設計の柔軟性が大幅に向上します。
さらなる一歩
mosugeek CMS で使用されている技術については、pages/index.astro ファイルを例に説明します。
indexファイルは多くのコンポーネントをインポートしており、それぞれがインデックスページのパネルに大まかに対応しています。これらのコンポーネントは、ページを通して順番にインスタンス化されます。しかし、いくつかのコンポーネントは次のような構造を使用していることに気づくでしょう(技術を最もよく示している最後のセクション、CallToAction を例にとります):
<CallToAction
callToAction={{
text: 'テンプレートを入手',
href: 'https://github.com/onwidget/astrowind',
icon: 'tabler:download',
}}
>
<Fragment slot="title">
Astro + <br class="block sm:hidden" /><span class="sm:whitespace-nowrap">Tailwind CSS</span>
</Fragment>
<Fragment slot="subtitle">
このページに表示されている巨大な偽の数字に驚いてください。<br class="hidden md:inline" />もう時間を無駄にしないで! :P
</Fragment>
</CallToAction>
ページ構造の洗練
mosugeek CMS では、ページの構造を洗練させるためのいくつかの高度なテクニックが使用されています。例えば、pages/index.astro ファイルでは、以下のような方法が採用されています:
---
// (ファイル: pages/index.astro)
import SomeComponent from '~/components/SomeComponent.astro';
// その他のインポート
---
<SomeComponent>
{/* ここにコンテンツ */}
</SomeComponent>
この方法では、各コンポーネントがページの特定のセクションに対応し、ページ全体の構造がより明確になります。また、これにより、各セクションを独立して管理しやすくなるため、メンテナンスが容易になります。
結論
mosugeek CMS は、その内部構造と使い方に関して多くの高度なテクニックを採用しています。このドキュメントでは、これらのテクニックのいくつかを紹介し、詳しく説明しました。これらの知識を活用し、mosugeek CMS をさらにカスタマイズすることで、自分だけのユニークなWebページやアプリケーションを作成することができます。
このドキュメントが、mosugeek CMS のより深い理解と、これを使ったプロジェクトの開発に役立つことを願っています。
以上がMarkdownファイルの翻訳です。翻訳が役立つことを願います。