動的コンテンツとは、固定または静的なものではなく、ユーザーの操作に応じて変化するWebサイトのコンテンツです。Webサイトを毎回更新することなく、サードパーティーのサービスから取得したデータを表示できます。
たとえば、Zoho SitesとZoho Creatorのような2つの異なるアプリを連携して、Webサイトに動的コンテンツを表示できます。
Webサイトに動的コンテンツを挿入する手順
Webサイトの編集画面の左上にある[+]アイコンをクリックします。
ドロップダウンから[アプリ]をクリックします。
選択肢から[動的コンテンツ]を選択します。
表示する[動的コンテンツ]を目的の場所にドラッグ&ドロップします。
[編集]をクリックします。続いて、動的コンテンツ一覧ページが表示され、適切な動的コンテンツを選択できます。
対象の動的コンテンツをクリックし、既存のコードを編集するか、カスタムコードを記述します。ビュー、関数、スタイルシートを編集できます。
HTML
CSS
JavaScript
Delugeスクリプト - 25以上のZohoアプリを連携するZohoのスクリプト言語
Face - Zoho Sites向けに設計されたテンプレート言語
動的コンテンツの4つのコンポーネント
関数
以下は、Zoho Creatorに保存されているレコードを取得する「fetchPartners」という名前の関数です。
//START
records = zoho.creator.getRecords('David','partners','Partner_View');
return records;
//END
説明:
criteria = 'ID=='.concat(id);
records = zoho.creator.getRecords('David', 'partners', 'Partner_View', criteria);
record = records.get(0);
return record;
//END
ビュー
動的コンテンツの各インスタンスにはメインビューファイルがあり、利用可能なビューが読み込まれます。
ビュー:main
{% partners = functions.execute('fetchPartners') %}
<div>
<center><h3>Partners</h3></center>
</div>
<divdc-container='partner-area'>
{% for partner in partners %}
<div>
<h2 style='cursor: pointer'dc-param-id='{{ partner.ID }}'dc-bind-click='true'dc-view='partner'dc-target='partner-area'>
{{ partner.name }}
</h2>
<p>{{ partner.email }}</p>
</div>
{% endfor %}
</div>
説明:
|
属性 |
説明 |
|
dc-container |
DC表示を読み込むコンテナーを定義します。値は英数字で、 一意である必要があります。 |
|
dc-bind-click |
HTML要素にクリックイベントを関連付けます。値には「true」または コールバック関数の名前を指定します。 |
|
dc-view |
HTML要素がクリックされたときに使用する DC表示名を定義します。dc-bind-click = 'true'の場合は必須です。 |
|
dc-target |
dc-viewで定義したDC表示を 読み込むコンテナーを定義します。値には、 いずれかのdc-containerを指定します。 |
|
dc-param-<param-name-placeholder> |
DC表示に送信する必要があるパラメーターを定義します。複数指定でき、すべてのdc-param属性がDC表示に送信されます。 たとえば、dc-param-pid='123'には、DC表示で次のようにアクセスできます。 request_object.parameters.pid |
表示:partner
{% partner_id = request_object.parameters.id %}
{% partner_details = functions.execute('fetchPartnerDetails', partner_id) %}
<div>
<h2>{{ partner_details.name }}</h2>
<p>{{ partner_details.phone }}</p>
<img alt='{{ partner_details.name }}' src='{{ partner_details.image }}'/>
<div style='cursor: pointer'dc-view='main'dc-target='partner-area'>
back
</div>
</div>
説明:
DC表示の関数
{% records = functions.execute('fetchPartners') %}
例:
{% records = functions.execute('fetchPartners',param1,param2, ..) %}
動的コンテンツの表示で使用できるオブジェクトと関数は次のとおりです。
|
プロパティ |
説明 |
|
display_name |
ログイン中のユーザーの名前 |
|
email_address |
ログイン中のユーザーのメールアドレス |
|
groups |
ユーザーが所属するポータルグループの 表示名の一覧 |
例:
{% if user %}
{'display_name':'{{ user.display_name }}','email_address':'{{ user.email_address }}'}
{% endif %}
Object: request_object
表示のキャッシュが有効な場合、request_objectの値に基づくリクエストは機能しません。
|
プロパティ |
説明 |
|
domain_name |
リクエストのドメイン部分 |
|
uri |
リクエストのURIパス |
|
parameters |
パラメーターのコレクション |
|
headers |
リクエストヘッダーのコレクション |
|
cookies |
クッキーのコレクション |
例:
{% partner_id = request_object.parameters.id %}
動的コンテンツ内の関数を呼び出すために使用します。
例:
{% assign variable_name = functions.execute('dc_function_name', param1, param2, ...) %}
{% response_object.setStatus(status_code) %}
{% response_object.setCookie(cookie_name, cookie_value, path, max_age) %}
JAVASCRIPT
JavaScriptで使用できるAPIメソッドは次のとおりです。
|
メソッド |
説明 |
|
$DX.get |
DCビューにHTTP GETリクエストを送信します。 リクエストオブジェクトを引数として受け取ります。次の表を参照してください。 |
|
$DX.post |
DCビューにHTTP POSTリクエストを送信します。リクエストオブジェクトを引数として受け取ります。 次の表を参照してください。 |
|
プロパティ |
説明 |
|
url |
ビューのURL |
|
params |
ビューに送信するパラメーター(JSON オブジェクト形式) |
|
handler |
応答が正常に返されると、このコールバック関数が呼び出されます。 XMLHttpRequestが「this」の参照として使用されます。 |
|
headers |
リクエストヘッダーのコレクション |
|
args |
JSONオブジェクトとしてハンドラーに送信する引数 |
main.jsで「init」関数を上書きし、ビューの読み込みを処理する例を次に示します。
define( function() {
function showPartner(options){
$DX.get({
url: '/dcapp/' + options.dc_name + '/partner',
params : options.params,
handler: function (){
options.target.innerHTML = this.responseText
}
}
);
}
function init(context, params){
var dc_name = context.getAttribute('data-dc-name');
//the attribute data-dc-name of the root DC element has the DC name
var dc_home_page = context.getAttribute('data-home-page') ||
'main';
//the attribute data-dc-name has the default view name
$DX.get({
url: '/dcapp/' + dc_name + '/' + dc_home_page ,// No I18N
handler: function (){
context.innerHTML = this.responseText
}
}
);
}
return {
showPartner : showPartner,
init : init
}
})
$DX.get({
url: '/dcapp/' + <dc_name> + '/function/' + <dc_function_name >,
handler: function (){
//code to handle function get
}Fetching form data from Zoho Sites