Ver.2.12β版に同梱しているwebpack環境でシンタックスハイライターを利用する方法


この記事では、現在開発中のVer.2.12のdevelopテーマとUTSUWAテーマで配布しているwebpackの開発環境について解説します。

概要

公式テーマで配布しているwebpackの開発環境についてシンタックスハイライターが読者以下の権限またはログアウト時に読み込まれないという現象が報告されました。この記事ではログアウト時にもシンタックスハイライターを有効化するいくつかの方法をご紹介します。
siteテーマ、beginnerテーマ、bootstrapテーマ、blogテーマを使用されている方には同じ現象は該当しないのでご安心ください。

webpackで行なっていること

以前からパフォーマンス速度の改善をする際に、組み込みJSで使用しているacms.jsの容量が問題となっておりました。このwebpackの開発環境を使うことにより、Webサイトのパフォーマンス速度を改善するため、最小限の組み込みJSを読み込むことができます。
具体的には、読者権限以下またはログアウト状態ではタッチモジュールを使ってacms.jsを読み込まないようにし、組み込みJSで使用している各プラグインをnpm経由でwebpackを使って読み込んで再現しています。

この記事で説明すること

npmに公開されていないライブラリは一部再現できないものがあり、その1つが今回上げているシンタックスハイライターで利用しているgoogle-code-prettifyのライブラリです。こちらは2013年ごろに開発がストップしており、npmではライブラリが公開されていないため、webpackで使用することが困難になります。
この記事では、webpack以外でgoogle-code-prettifyを使用する方法と、webpackで別のnpmパッケージを利用する方法をご紹介します。

webpack以外でシンタックスハイライターを使用する方法

  • タッチモジュールを外す
  • CDNで使用する

タッチモジュールを外す

この方法が一番簡単な方法です。developテーマとUTSUWAテーマでは読者以下の権限(ログアウトを含む)にて、acms.jsが読み込まれていないことが原因となっています。 /include/head/js.htmlを開き、該当するタッチモジュールを削除すれば、他のテーマと同様に使用することができます。

CDNで使用する

次に簡単な方法です。acms.jsを読み込みたくないけど、google-code-prettify(シンタックスハイライター)を使いたい場合におすすめです。Githubに記載されているCDNをhead要素内で読み込みましょう。

<script src="https://cdn.jsdelivr.net/gh/google/code-prettify@master/loader/run_prettify.js"></script>

webpackで別のnpmパッケージを利用する方法

この機会にwebpackを試したい方や、他のライブラリに挑戦したい方におすすめの方法です。a-blog cms 以外に基本的なJavaScriptの知識が必要となります。

今回は実際に highlight.js を使ってご紹介します。2021年11月現在、このデベロッパーサイトでも使っているシンタックスハイライターです。

Ver.2.12β版で配布しているUTSUWAテーマをもとに解説します。

npmパッケージをインストールする

まずは、/themes/utsuwa/のディレクトリまで移動し、highlight.jsのnpmパッケージをインストールします。

$ npm install highlight.js --save

インストールしたら、次はインストールしたパッケージをwebpackから読み込みます。

インストールしたパッケージをwebpackから読み込む

/themes/utsuwa/src/js/index.jsをエディタで開きます。ファイルの8行目付近で、highlight.jsを読み込みます。

import hljs from 'highlight.js';

使用するスタイルを指定する

先程のhighlight.jsのサイトで、スタイルがいくつかプレビューできるので、好きなテーマを探してください。



そして、14行目付近にテーマ名と同じcssファイルを読み込みます。

今回は、agateというテーマを指定します。

import 'highlight.js/styles/agate.css';

発火する処理を書く

UTSUWAテーマでは、82行目付近にdomContentLoadedが既に書かれています。このdomContentLoadedの中に発火するための処理を書きます。

domContentLoaded(() => {

  document.querySelectorAll('pre code').forEach((el) => {
    hljs.highlightElement(el);
  });

// ... 省略 ... 
});

これで、ログアウト状態でもシンタックスハイライターが動くようになりました。ただ、ログイン状態の時にgoogle-code-prettifyとhighlight.jsが2つ動いてしまっているので、google-code-prettifyを無効化します。

google-code-prettifyを無効化する

UTSUWAテーマでは既に33行目付近に、acms.js に関するif文が記述されています。このif文のelseの中に、google-code-prettifyを無効化する記述をします。以下のように書きます。

if (window.ACMS === undefined) { // acms.jsが読み込まれていない時
// ... 省略 ....
} else { //acms.jsが読み込まれている時
  edit();
  ACMS.Ready(() => {
     ACMS.Config.googleCodePrettifyClass = 'prettyprinted';
  });
}

これで、ログインしている時もhighligh.jsが動くようになったはずです。一度お試しください。

まとめ

今回ご紹介したように、acms.jsを使う方法やCDN経由で従来のライブラリを使用する方法があり、webpackの開発環境は無理にお使いいただくものではありません。これからもa-blog cmsを使ったWeb制作で最低限必要な知識はa-blog cms、HTML、CSSのみです。
Web制作に関する技術が増え、技術選択に迷う時代ではありますが、弊社としては開発効率の向上やパフォーマンス改善を行なう際のベースとして、みなさまがより良いお仕事ができるように開発環境を提供できたらと考えております。

弊社としては時にはCMSの垣根を超えて、みなさまの制作に役立つものを提供したいと考えております。
フィードバックなどありましたら、お気軽にお問い合わせフォームTwitterFacebookなどのSNSからお気軽にお知らせください。

カスタムフィールドグループのデータをCSVインポートする

弊社アップルップルの学生インターンの課題として、a-blog cms のカスタムフィールドグループ の値を CSV でインポートする機能 があり、 a-blog cms LIVE Vol.01 でインターンの @ryoseiyamano に発表して頂きました。

a-blog cms LIVEでもご紹介させていただきましたが、実装方法をこの記事でご案内いたします。

ダウンロード方法

作られたものは github の https://github.com/appleple/cfg-csv に公開されています。以下のボタンから一式をダウンロードすることができます。

ダウンロード

src フォルダ内のファイルの説明



csvImport.js CSVインポート用の JavaScript
csvDownload.js CSVダウンロード用の JavaScript
csvImport.css 追加ボタンの横にボタンのみ表示させるためのCSS

設置方法

設置場所は自由ですが、field.html と同じディレクトリであれば以下のように書くだけで「CSVアップロード」ボタンが表示されるようになります。

インポートだけではなくCSVをダウンロードする機能も必要であれば、合わせて csvDownload.js も読み込んでください。

<script src="csvImport.js"></script>
<link rel="stylesheet" href="csvImport.css">

CSVアップロードボタンが表示された様子

利用方法

  1. アップロードするCSV ファイルを用意してください。データは、 1行目にカスタムフィールドの name をカンマ区切りで設定し、2行目以降は1行目に対応するデータを記入してください。
  2. CSVアップロードボタンから、作成したCSVファイルを選択してアップロードしてください。

コーポレートサイトでの htmx 実装をデモサイトで試してみよう


2024年2月、JavaScriptライブラリ htmx の発見から始まり、短期間でその可能性に引き込まれ、以下の3つの記事を書きました。




この 3つの記事の投稿後、さらに3つのカスタマイズに関するブログの記事を a-blog cms 開発ブログ htmx に書き、実際に 2つのテーマ siteblog を元に htmx を使った実装を試みました。この記事では、その挑戦の結果と htmx を用いた具体的な利用事例を共有します。

a-blog cms で実現する htmx のバックエンド処理

a-blog cms は10年以上前から、htmx が提供する hx-post のような機能を持っています。(参考)このため、バックエンドの処理はほとんど意識する必要がなく、htmx が必要とする部分的な HTMLコンテンツを生成して送信するだけで済みます。

htmx は、JavaScript を記述することなく Ajax を用いてページ更新が可能です。しかし、バックエンドでは PHP のコードを都度準備する必要があるため、実装が必ずしも容易になるわけではありません。さらに、hx-push-url を利用する場合、htmx によって更新されない時に表示されるページも考慮する必要があり、CMS の積極的な利用が不可欠です。

a-blog cms では、hx-push-url によって更新される URL が検索条件となり、その URL に基づいて選ばれたテンプレートが特定の HTML を生成します。この HTML には、動作する PHPモジュールが記述されています。CMS の管理画面で設定を定義することで、カスタマイズはテンプレートのHTMLを記述するだけで済みます。

結果として、htmx を用いたフロントエンドの記述から、必要とされる HTML を生成するテンプレートまで、すべてがシンプルに処理されます。これにより、htmx のバックエンドとして a-blog cms を利用することで、開発者の負担が大幅に軽減されるのです。

ablogcms.io でhtmxテーマを試す

a-blog cms の可能性を直接体験していただくために、htmx@sitehtmx@blog のテーマを試せるインストール済みのサーバーを無料で 30日間提供するサービス ablogcms.io を用意しています。


このブログ記事の公開に合わせて、これらのテーマを選択して申し込むことが可能です。具体的な実装方法を理解したり、個々のニーズに合わせて実際に試すことができますので、ぜひこの機会に利用してみてください。


どのテーマで試すかを選択し送信することで、メールアドレスに ログイン情報と、SFTP 情報がメールで届きます。テーマファイルがどのような実装になっているのかご確認ください。


a-blog cms でhtmxを利用する方法


htmx を使用するためには、まず次のタグを HTML の <head> 部分に追加する必要があります。

<script src="https://unpkg.com/htmx.org@1.9.12"
integrity="sha384-ujb1lZYygJmzgSwoxRggbCHcjc0rB2XoQrxeTUQyRjrOnlCoYta87iKBWq3EsdM2"
crossorigin="anonymous"></script>

加えて、a-blog cms が Ajaxリクエストを認識できるようにするためには、ajax-header Extension の追加が必要です。この拡張機能は以下のスクリプトを利用して有効化します。

<script src="https://unpkg.com/htmx.org/dist/ext/ajax-header.js"></script>

hx-gethx-post を使用する際には、hx-ext="ajax-header" の属性を追加することで、a-blog cmshtmx のバックエンドとして動作させることができます。

a-blog cms で hx-post と hx-push-url 利用する際の処理とルール

a-blog cms では、POSTリクエストを使用した検索機能がありますが、この機能は検索条件からURLを組み立てた後、そのURLにリダイレクトしてGETリクエストでページを表示します。

例えば、通常 a-blog cms だけの機能で「kubun=マンション」で検索すると、以下のようなURLになります。

https://example.com/realestate/field/kubun/マンション/

次に、htmx を利用して部分的にページを更新する際には、部分的なコンテンツを表示させるテンプレートを指定する必要があります。このため、以下のような HTMLタグを <form> のタグの中に追加することになります。

<input type="hidden" name="tpl" value="/include/htmx/realestate.html">

さらに hx-push-url="true" を指定し、再度「kubun=マンション」で検索すると

https://example.com/realestate/include/htmx/realestate.html/field/kubun/マンション/

表示されたページの内容には問題はありませんが、上記の URL でブラウザをリロードすると「404 Not Found」エラーが発生してしまいます。これを防ぐために、URLの履歴を更新する前に不要なパスを削除する JavaScript を追加することで対応することができました。

addEventListener('htmx:beforeHistoryUpdate', function (event) {
  const proposedUrl = event.detail.history.path;
  const customUrl = proposedUrl.replace(/\/include\/htmx\/.*\.html/, '');
  event.detail.history.path = customUrl;
});

この JavaScript処理により、/include/htmx/****.html の部分を取り除くことができ、hx-push-url属性を問題なく使用できるようになります。この設定は、a-blog cmshx-post を行う際に「使用するテンプレートファイルを /include/htmx ディレクトリに保管する」ことで効果を発揮します。

htmx 実行後の a-blog cms の JavaScript を実行

htmx による DOM の更新後に a-blog cms の JavaScript を再度実行するためには、次のコードが必要です。これにより、更新された要素に対して必要な JavaScript が適用されます。

addEventListener('htmx:afterSwap', function (event) {
  ACMS.Dispatch(event.target);
});

htmx@blogテーマの解説

a-blog cmsにおけるテンプレート設計では、通常「トップページ」「一覧ページ」「詳細ページ」の3種類のページテンプレートを指定しますが、今回のhtmx@blogテーマでは、すべてのページが共通のテンプレートファイル _entry.html を使用する設定になっています。

htmx の実行についての確認

サブカラムに a-blog cms のロゴが出ている時には、CMS でページ全体を生成し、htmx update! と表示している時には Ajax で部分的に更新しています。また、タイトルタグも cms: と htmx: をタイトルテキストの前に付加しています。



テンプレートファイルの構造

themes/htmx@blog/_entry.html

htmxと通常のCMSのテンプレートを共通化するための工夫として、_entry.html内で、次のように multi_swap オプションをオフに設定し、entry-body.htmlをインクルードしています。

@include("/include/htmx/entry-body.html", {"multi_swap": "off"})

これは、htmxのAjax機能を使用して複数のコンテンツ領域を同時に更新する機能を無効にする宣言です。

themes/htmx@blog/include/htmx/entry-body.html

このファイルは、htmxによるデータ取得の基本となります。以下のモジュールが含まれていますが、multi_swapがoffの場合、一部モジュールは表示されません。

<!-- BEGIN_MODULE Entry_Body -->
(略)
<!-- END_MODULE Entry_Body -->

<!-- BEGIN_IF [{{multi_swap}}/neq/off] -->

 <!-- BEGIN_MODULE Topicpath -->
 (略)
 <!-- END_MODULE Topicpath -->

 <!-- BEGIN_MODULE Ogp -->
 <title>htmx:{title}</title>
 <!-- END_MODULE Ogp -->

<!-- END_IF -->

リンクのカスタマイズ

元々の <a href="{url}"> タグを次のように変更して、htmx での動的コンテンツ更新を実装しています。

<a href="{url}"
hx-ext="ajax-header"
hx-get="{url}/tpl/include/htmx/entry-body.html"
hx-push-url="{url}"
hx-swap="innerHTML"
hx-target="#main-contents">

この設定により、クリックされた URL に基づいて、entry-body.html の内容だけを動的に更新し、主要なコンテンツエリアを書き換えます。hx-push-url は、適切なURL管理を保つため、{url}を直接指定しています。


赤枠の部分のリンク :hx は htmx が動作するリンクになっています。

htmx@site テーマの解説

htmx@site テーマでは、ブログテーマとは異なり、ページ更新のアプローチがより動的です。初回アクセス時には CMS がページ全体を生成しますが、その後のページ遷移では htmx を用いた更新を活用します。特にカテゴリーが変わる際には、CMS によって新たなカテゴリーのページ全体を再表示させます。一方で、同じカテゴリー内でのページ間の遷移は、htmxを使って部分的にコンテンツを更新する設定になっており、これによりユーザー体験がスムーズに保たれます。

htmx の実行についての確認

HOME ではサブカラムが無い 1カラムレイアウトになっていますので、グローバルメニューに a-blog cmshtmx の表示をしています。



a-blog cmsのテンプレート構造とカスタマイズ方法


a-blog cms では、カテゴリーごとに異なるレイアウトを実現するために、テーマディレクトリ内にカテゴリーコード名のディレクトリを設け、一覧ページ用の index.html と詳細ページ用の _entry.html を配置します。これにより、各カテゴリーに合わせたデザインや機能を独立して管理できるため、サイト全体の一貫性を保ちつつ、細かなカスタマイズが容易になります。

物件情報の検索(realestate)

物件情報カテゴリーでは、hx-post を利用してフォームから送信されたデータを URL 形式に変換し、その結果を表示する仕組みを採用しています。また、標準のページャー機能を htmx を使った Ajax 読み込み形式にカスタマイズし、よりスムーズなページ遷移を実現しています。


お問い合わせフォーム(contact)

a-blog cms の標準フォーム機能を利用して、確認画面や送信完了画面への遷移も Ajax を介して行われます。現在は確認画面に遷移した際にページ上部に自動スクロールしないため、ユーザーが何が起こったかを理解しにくいという課題があります。これを解消し、より良いユーザー体験を提供するために、次期アップデートで改善を図る予定です。


htmx と a-blog cms の効率的な組み合わせ

このシリーズを通じて、htmxa-blog cms を組み合わせることによる大きな利点を探求しました。htmx を使用すると、複雑な JavaScript コーディングをせずに、Ajax による動的な Webページの更新が可能になります。これにより開発手間が減少し、スムーズで反応性の高いウェブサイトを簡単に構築できます。

一方、a-blog cms はバックエンド処理の簡略化に寄与し、PHP のコーディングがほとんどまたは全く不要になるという利点があります。これは、htmx とのシナジーにより、開発者が面倒なバックエンドの設定を心配することなく、フロントエンドの UI/UX に集中できる環境を提供します。

この組み合わせにより、開発者にも最終的なユーザーにもより良い Web体験が提供されます。htmxa-blog cms を利用することで、私たちはより迅速かつ効率的にプロジェクトを進めることができ、技術的な障壁を低減しながら革新的なソリューションを実現できるようになります。

興味のある方は、ablogcms.ioで実装済みのテーマを自由に見ることができ、さらにはそれらをカスタマイズすることも可能です。このサイトでは、htmxa-blog cms を活用した具体的な例を直接体験し、自身のプロジェクトにどのように応用できるかを探ることができます。

この探求が他の開発者たちにインスピレーションを与え、新たな可能性へと導くことを願っています。


承認申請画面でデフォルト承認者を設定できるようにするカスタマイズ

今回のカスタマイズのゴールは、採用情報の投稿者Jが特定の編集者Hに承認依頼を行うことを便利にする、ミスを減らすことができるようにすることを考えてカスタマイズを進めていく事にします。


今回のサイトの構成

システムとしては a-blog cms プロフェッショナル版 を利用します。

ルートブログや子ブログに架空のダミーデータでユーザーを用意しています。実際には、もっと多くの人が登録されている場合もありますが、それぞれ 管理者・編集者・投稿者 の権限のユーザーを用意しました。

ルートブログ / bid=1



お知らせ / news / bid=2



採用情報 / recruit / bid=3



標準的な承認画面


標準的には、全員(編集者, 管理者)が選択された状態になっております。以下に実際の 選択UI を触れるようにしています。

今回の業務フローとして、承認者は 杉本さん(投稿者J)が、上司である村瀬さん(編集者H)に依頼したいところが、5人に対して承認依頼のメールを送ってしまう事になります。

具体的なカスタマイズ目標

ユーザーのカスタムフィールドでデフォルトの承認依頼をしたい人を設定できるようにする をメインの目標とします。加えて部署名も表示できるようにし、もし、上司である村瀬さん(編集者H)が不在の際に、同じ部署の承認可能な方が誰かも分かるようにします。


各ユーザーの情報を設定できるようにする

ユーザー情報にカスタムフィールドの設定することができるようにします。

  1. 承認したい人を選択できる SELECT UI
  2. 部署名を設定できるような INPUT UI

themes/*利用しているテーマ名*/admin/user/field.html を編集します。

admin/user/field.html

<table class="acms-admin-table-admin-edit">
  <tr>
    <th>部署名</th>
    <td>
      <input type="text" name="division" value="{division}" class="acms-admin-form-width-mini" />
      <input type="hidden" name="field[]" value="division" />
    </td>
  </tr>
  <tr>
    <th>承認ユーザー</th>
    <td>
    <select name="approval_user" class="acms-admin-form-width-mini">
    <option value=""></option>
    <!-- BEGIN_MODULE User_Search id="approval_user_list" -->
    <!-- BEGIN user:loop -->
    <option value="{id}" \{approval_user:selected#{id}\}>{name}</option>
    <!-- END user:loop -->
    <!-- END_MODULE User_Search -->
    </select>
    <input type="hidden" name="field[]" value="approval_user" />
    </td>
  </tr>
</table>

承認ユーザーを選択肢を表示させるために bid=1 のモジュールID 設定に User_Search モジュール id="approval_user_list" をグローバル化して設定します。


条件設定については運用次第ではありますが、他のブログのユーザーが表示された方がいい場合には、bid=1 を指定し、階層の設定を「下階層のブログも含める ( descendant-or-self )」を設定ください。
同一ブログのユーザーのみの場合には、bid を指定しないようにすることで子ブログ内のユーザーのみをリスト表示が可能です。

ログインユーザーの情報をどこでも利用できるようにする

a-blog cms の情報をいつでも、どこでも利用できるようにする際には、グローバル変数という変数に値を持たせることで管理できるようにします。例えば、%{NOW_DATE} のようにテンプレート書くと今日の日付を表示ができるようなものになります。

今回はログインしている際に、ユーザーのカスタムフィールド approval_user をグローバル変数化し %{APPROVAL_USER} で、テンプレートのどこでも利用することを可能にします。

extension/acms/hook.php

public function extendsGlobalVars(&$globalVars)
{

    if ( SUID ) {
        $field = loadUserField(SUID);
        $globalVars->set('APPROVAL_USER', $field->get('approval_user'));
    }

}

config.server.php

hook.php の記述を有効にするには、config.server.phpHOOK_ENABLE1 に設定を変更する必要があります。

define('HOOK_ENABLE', 1);

承認画面のカスタマイズ

標準的な承認画面 のところで表示していた画面の URL は
http://localhost/recruit/entry-52.html/tpl/ajax/revision-preview.html?rvid=4
のようになっていました。

http://localhost/recruit/entry-52.html のページの情報を
/tpl/ajax/revision-preview.html でテンプレートを置き換えて表示させています。

/themes/system/ajax/revision-preview.html が対象のテンプレートになりますが、このテンプレートファイルをご利用中のテーマにコピーしてカスタマイズするようにしてください。

ajax/revision-preview.html

<!-- BEGIN_MODULE Approval_NextUsergroup -->
<div class="acms-admin-margin-top-small">
  <span class="acms-admin-label acms-admin-clear"><!--T-->次の承認者<!--/T--></span>
</div>
<select name="receiver" id="input-nextGroup"
  class="acms-admin-revision-sidebar-select js-select2 acms-admin-margin-top-small"><!-- BEGIN group:loop -->
  <option value="{nextGroup}:0"><!--T-->全員<!--/T-->({nextGroupName})</option>
  <!-- END group:loop --><!-- BEGIN user:loop -->
  <option value="{nextGroup}:{user_id}" 
  <!-- BEGIN_IF [%{APPROVAL_USER}/eq/{user_id}] -->
   selected="selected"
  <!-- END_IF --> 
  >{user_name} <!-- BEGIN division:veil -->({division})<!-- END division:veil --></option><!-- END user:loop -->
</select>
<input type="hidden" name="approval[]" value="receiver" />
<input type="hidden" name="current_group" value="{currentGroup}" />
<!-- END_MODULE Approval_NextUsergroup -->

オマケ : ユーザー管理の一覧にも部署名を表示

ユーザーの管理画面の URL は http://localhost/bid/3/admin/user_index/ のようになっていました。その場合には themes/system/admin/user/index.html に元のテンプレートがありますので、ご自身のテーマの同階層にファイルをコピーしてカスタマイズしてください。

admin/user/index.html

<div class="acms-admin-summary-body">
	<strong>{name}</strong> / {code}<br>{mail} 
</div>

が名前やメールアドレスを表示させているところになりますので、ここに上記で追加したカスタムフィールド divisionapproval_user を追加します。

approval_user が数字で分かりにくいですが、今回は設定があることだけをお伝えする事とし、id を文字列にする方法については別の機会で紹介させていただきます。

<div class="acms-admin-summary-body">
	<strong>{name}</strong> / {code}
	<!-- BEGIN division:veil -->/ {division}<!-- END division:veil -->
	<!-- BEGIN approval_user:veil --> ({approval_user})<!-- END approval_user:veil --><br>{mail} 
</div>

<!-- BEGIN division:veil -->〜<!-- END division:veil --> で囲まれている点を補足しておきます。これは {division} に情報が何も編集されない時には囲まれている部分を表示させないという記述になります。値が無い時に / や () だけ表示されないようにしています。

最後に

今回は、プロフェショナル版での承認機能についてのカスタマイズについて紹介させていただきました。 普段、使えない機能となっておりますが、MYPAGE の開発ライセンス から試しに使ってみたいドメインを設定することで、購入することなく試すことが可能です。

標準的な機能として用意されていないものであっても、今回のようにカスタマイズでしっかり希望の運用ルールに近づけることも出来ます。もし、こうしたいがカスタマイズで難しい場合にはご相談ください。

定期開催のイベントサイトを作る際のブログ設定

イベントサイトを作り、今後のアーカイブとしてイベントサイトを残していくための、オススメのブログ設定について紹介します。



弊社で行っている contents.nagoya というイベントを例に紹介していきますが、こちらは 2018年、2019年、2020年とイベントページがあり、これから 2025年版のコンテンツを用意していきます。

ポイント1:ルートブログは利用しません

bid:1 のブログには、コードネームに cms と設定しています。管理ユーザーは bid:1 に作ることになりますが、そのユーザーの設定で「どこでもログイン」というチェックする設定がありますので、そのチェックをつけておくことで、どの子ブログのイベントにもログインが可能になりますので、チェックをしておいてください。



ポイント2:開催中のイベントのブログコードを空に

子ブログのブログコードを空にすることで、その子ブログをルートブログとして扱う事ができるようになります。



これで、今後新しいイベントを開催するたびに、子ブログを作成し、アーカイブしていく子ブログをブログコードを設定していくことで、他の設定を変更することなく過去のイベントとして表示できるようになります。

必ず bid:1 のルートブログのブログコードを空にするという必要がない。 というのを頭の片隅に記憶しておいてください。何かの時に役に立つのではないでしょうか。