Wix Blocks チュートリアル:カウントダウンウィジェットを作成する
テンプレートに含まれるもの
- カウントダウンウィジェット。デザインを完成させ、機能とプロパティをコーディングする必要があります。
- 完成させ、カウントダウンウィジェットに追加する必要がある登録ウィジェット。
- ウィジェットの機能を実装するために使用できるパブリックユーティリティ。
- メール通知の機能を実装するために使用できるバックエンドコード。
ステップ 1 | ウィジェットのデザインを完成させる
- テンプレートを開きます。
- 「ウィジェットとデザイン」下の「Countdown(カウントダウン)」をクリックします。
- 「要素を追加」 をクリックします。
- 「テキスト」を選択します。「48px タイトル」ボックスをウィジェットにドラッグアンドドロップします。
- 「テキストを編集」をクリックし、テキストを「SS(秒)」に変更します。
- 「要素設定パネル」 を使用して、テキストの色を白に変更し、テキストを中央揃えにします
- テキストボックスを選択し、 を使用して SECONDS ラベルの上にあるグリッドの四角に移動します。
- を使用してサイズを変更します。
ステップ 2 | ウィジェットの API プロパティを追加・定義する
- endDate:カウントダウンがゼロになる終了日を定義します。このプロパティを使用すると、サイト制作者は終了日を変更して、ウィジェットをサイトに合わせてカスタマイズすることができます。
- emailId:ユーザーが通知に登録した際に送信されるメールメッセージを決定します。
ウィジェット要素に ID をつける
- テキストボックスをクリックします。
- 「プロパティ・イベント」パネル でテキストボックスに ID をつけます。この例では、ID は「
secondsTxt
」です。他の要素にはすでに ID が割り当てられていることに注意してください。
「endDate」と「emailId」プロパティを定義する
- API パネル で「新しいプロパティを追加する」をクリックします。
- プロパティ名に「
endDate
」と入力します。 - プロパティタイプを選択します。この場合は「日時」(日付は米国の形式 mm/dd/yyyy で表示されます)を選択します。
- デフォルト値を選択します(サイト制作者は、エディタにウィジェットをインストールする際に変更できます)。
- 「プロパティ」にマウスオーバーし、 アイコンをクリックします。
- トリガーメール用に別のプロパティを作成し、「
emailId
」という名前を付けます。これはデフォルト値のない「テキスト」タイプのプロパティです。
ステップ 3 | コードを追加してウィジェットを機能させる
ユーティリティをインポートする
- 「公開・バックエンド」メニュー をクリックします。
- 「公開」下で「dateUtils.js」を選択します。コードパネルでファイルが開きます。
新しい関数を考慮してコードを変更する
カウントダウンウィジェットがカウントを更新するように、関数 updateTime()
を作成します。新しい関数は次のようになります:
1$widget.onPropsChanged(function () {
2});
3 function updateTime() {
4 const {days, hours, minutes, seconds} = getRemainingTime (new Date($widget.props.endDate));
5 $w('#daysTxt').text = days.toString();
6 $w('#hoursTxt').text = hours.toString();
7 $w('#minutesTxt').text = minutes.toString();
8 $w('#secondsTxt').text = seconds.toString();
9 }
また、ウィジェットが残り時間を更新する間隔も設定する必要があります。
これを行うには、onReady()
関数内に次のコードを追加します。これにより、ウィジェットは毎秒更新されます。
1$w.onReady(function () {
2 updateTime();
3 if (wixWindow.viewMode !== "Editor") {
4 setInterval(updateTime, 1000);
5 }
6});
ウィジェットをプレビューして API プロパティをテストする
- 「プレビュー」をクリックします。ウィジェットは終了日まで毎秒カウントダウンします。
- 「API プロパティのテスト」をクリックします。以前に設定したデフォルト値のパネルが表示されます。
- 日付を変更して、ウィジェットが応答し、新しい日付までカウントダウンするかどうかを確認します。
ステップ 4 | カスタムパネルを作成・コーディングする
カスタムパネルを作成する
- 「パネル」タブをクリックします。
- 「パネルを作成」をクリックします。
- パネルに名前を付けます。この例では「My settings」です。
- 「パネルを作成」をクリックします。
- 「パーツを追加」をクリックします。
- 「テキスト入力」を選択します。これは終了日に設定されます。
- 「プロパティ・イベント」 をクリックして、テキスト入力に
endDateInput
という ID をつけます。 - テキスト要素を選択し、「設定」をクリックします。
- 「フィールド名」に「終了日」という名前を追加します。
- 「デフォルトテキスト」のテキストを削除します。
- プレースホルダテキストを「終了日」に設定します。
- セクション区切り線を追加します。
- 「設定」をクリックします。「セクションタイトル」にタイトルを追加します。この例では「トリガーメール」です。
- 別の「テキスト入力」を追加します。テキスト入力に
emailIdInput
という ID をつけます。 - テキスト要素を選択し、「設定」をクリックします。
- 「フィールド名」に「メール ID」と入力します。
- 「デフォルトテキスト」のテキストを削除します。
- プレースホルダテキストを「メール ID」に設定します。
カスタムパネルにコードを追加する
パネル要素がウィジェットを操作し、エディタでアクションを実行できるようにするには、コードで Velo wix-widget
モジュールを使用します。
ウィジェット API を使用するには、wix-widget
モジュールから wixWidget
をインポートしてください。
onReady()
関数の前に次のコードを挿入します。
1import wixWidget from 'wix-widget';
値が変更されたときにウィジェットを更新するには、onChange
イベントを登録する必要があります。また、いくつかの非同期関数を使用するため、onReady ()
関数に async
を追加する必要があります。
onReady()
関数は次のようになります:
1$w.onReady(async function () {
2 const { endDate, emailId } = await wixWidget.getProps();
3 $w('#endDateInput').value = endDate;
4 $w('#emailIdInput').value = emailId;
5
6 $w('#endDateInput').onChange(e => {
7 wixWidget.setProps({ endDate: e.target.value });
8 });
9
10 $w('#emailIdInput').onChange(e => {
11 wixWidget.setProps({ emailId: e.target.value });
12 });
13});
ステップ 5 | ウィジェットを設定する
ウィジェットのフローティングアクションバーにカスタムパネルを追加する
- トップバーで「設定」をクリックします。
- カウントダウンウィジェットを選択します。フローティングアクションバーが表示されます。
- 「設定」をクリックします。
- 「アクションボタンの設定」 をクリックすると「メインアクション設定」パネルが表示されます。
- ドロップダウンリストから「My Settings」を選択して、カスタムパネルを選択します。
ステップ 6 | 2つ目の(内部)ウィジェットを追加して登録ロジックを実装する
登録ウィジェットをカウントダウンウィジェットに追加する
- 「デザイン」タブで、カウントダウンウィジェットを選択します。
- 「その他のアクション」 をクリックして「ウィジェットを追加」を選択します。
- 「Registration(登録)」を選択します。内部ウィジェットは、カウントダウンウィジェットの中央に表示されます。
- カウントダウンウィジェットの下部に合わせて、内部ウィジェットをドラッグして引き延ばします。
- 「プロパティ・イベント」 で ID を
registration
に変更します。
メインウィジェットのコードに登録ロジックを実装する
プリインストールされたユーティリティである contactUtils.js
を使用して、メイン(カウントダウン)ウィジェットにユーザー登録用のコードを実装します。wix-crm
API を使用して連絡先をコレクションに接続します。
このコードは、情報をコレクションに転送します。後でコレクションを作成するときに使うユーティリティを使用します。コードには getSubscriptionsCollectionName()
が表示されます。
- 新しい非同期関数を作成します。
onSubmit
と呼びます。create contact ユーティリティを使用します。
コードは次のようになります:
1 async function onSubmit({ email }) {
2 const contact = await createContact(email);
3 wixData.insert(getSubscriptionsCollectionName(), {
4 endDate: new Date($widget.props.endDate),
5 emailId: $widget.props.emailId,
6 contactId: contact.contactId
7 });
8 }
9
onSubmit イベントに登録する
onReady()
で、updateTime()
関数の後に、次のコードを追加します:
1$w('#registration').onSubmit(onSubmit);
ステップ 7 | アプリをビルドして名前空間を設定する
最初のビルド
- 「作成」をクリックします。
- アプリの名前空間を入力し、「次へ」をクリックします。
- 「メジャーバージョン」を選択し、「作成」をクリックします。
- 「バージョン 1.0 が作成されました」というメッセージが表示されます。「閉じる」をクリックして、アプリの作成を続行します。
ステップ 8 | ウィジェットにコレクションを追加する
テンプレートには、「公開・バックエンド」下の「collectionUtils.js」に、getSubscriptionsCollectionName()
というユーティリティがプリインストールされています。これは、コレクションの完全な名前を構築するため、コードで参照するたびに完全なアプリの名前空間を追加する必要はありません。
コレクションユーティリティを設定する
- 「公開・バックエンド」下で「collectionUtils.js」をクリックします。
- アプリの名前空間を追加します。
1
2const NAMESPACE = '@mywixaccount/my-app-namespace';
3
4export function getSubscriptionsCollectionName() {
5 return `${NAMESPACE}/subscriptions`;
6}
コレクションを作成する
- 「データベース」をクリックします。
- 「+コレクションを作成」をクリックします。
- コレクションにわかりやすい名前を付けます。この例では、「Subscriptions」とします。
- 「作成」をクリックします。
コレクションにフィールドを追加する
- をクリックして、コレクションにフィールドを追加します。
- 「フィールドタイプ」ドロップダウンメニューから「日付」を選択します。
- 「フィールド名」に「endDate」と入力します。これが、ユーザーが登録できる最後の日付になります。
- 「保存」をクリックします。
- 次に、「テキスト」フィールドタイプを追加し、トリガーメール用に「emailId」という名前を付けます。
- さらに別の「テキスト」フィールドタイプを追加し、「contactId」という名前を付けます。登録済みユーザーの連絡先情報が保存されます。
- 次に、「ブーリアン型」フィールドタイプを作成し、「notified」という名前を付けます。これにより、購読者に一度だけ通知が送信されます。
コレクションの権限を設定する
- 「データベース」メニューで、コレクションの「その他のアクション」 をクリックします。
- 「権限・プライバシー」を選択します。
- 「はコンテンツの追加が可能」ドロップダウンを選択します。
- 「すべてのユーザー」を選択します。
- 「保存」をクリックします。
ステップ 9 | Wix エディタでサイトにアプリをインストールする
- アプリをビルドしたら、ウェブサイトを開きます。
- 「アプリ」 をクリックします。
- 「カスタムアプリ」をクリックします。すべてのアプリの一覧が表示されます。
- 「利用可能なアプリ」リストからアプリを選択します。
- 「アプリをインストール」をクリックします。
- 「追加」 をクリックします。
- 「マイウィジェット」を選択します。
- ウィジェットをダブルクリックしてサイトに追加します。
メール ID を設定する
- トップバーの「サイト」メニューから「ダッシュボード」を開きます。
- 「デベロッパツール」の「トリガーメール」に移動します。
- 「今すぐはじめる」をクリックします。
- 件名を入力します。
- エディタツールを使用してメールをデザインします。
- 「保存して公開」をクリックします。
- 送信者の詳細(「送信者名」、「返信先アドレス」)を追加し、「保存」をクリックします。
- 「閉じる」をクリックします。
- もう一度「保存して公開」をクリックします。登録した人に送信されるようにデザインしたメールにリンクする識別コードを受け取ります。
- このコードをカスタムパネルの「メール ID」に入力します。
Wix エディタのバックエンドコードを使用して購読者に通知する
通知関数を呼び出す
- Wix エディタの「公開・バックエンド」の「バックエンド」下で「+Web モジュールを追加」をクリックします。
- これに
backend.jsw
と名前を付けます。 - サイトのコードセクション「backend.jsw」下にバックエンド関数をインポートします。
コードは次のようになります:
1import { notify } 'myWixId/my-application-name-backend';
次に、サイトのコードセクション内の「backend.jsw」に invokeNotify
エクスポート関数を作成します。
コードは次のようになります:
1export function invokeNotify() {
2 return notify ();
3}
- 「バックエンド」で「追加」 をクリックします。
- 「スケジュール済みジョブ」 をクリックします。サイトのコードセクションの「jobs.config」下に次のコードを追加します。この例では、通知関数は毎時10分に呼び出されます。
1{
2 "jobs": [{
3 "functionLocation": "/backend.jsw",
4 "functionName": "invokeNotify",
5 "description": "",
6 "executionConfig": {
7 "cronExpression": "10 * * * *"
8 }
9 }]
10}
ステップ 10 | アプリをテストする
- サイトを公開します。
- 登録してメール通知を受信します。
- エディタに戻り、コレクションを確認します。
- 新規購読者がいることを確認できます。通知メールが送信されると、「notified」フィールドにもチェックマークが表示されます。