此步驟描述並說明如何管理元件所使用的資產。
資產包括 Oracle Content Management 已知並能管理資產生命週期的元件與自訂元件。
Oracle Content Management 內容資料夾
您在 Oracle Content Management 建立的每個網站都隨附於自己的 content
資料夾。您通常看不到這個隱藏資料夾。當網站發布時,所有 content
資料夾中的檔案也會發布至檔案系統中。
例如,當您使用「影像」元件選取影像時,Oracle Content Management 會複製選取的影像,並將其放在內容資料夾。您的 URL 會一律指向此影像的複製版本,因此即便您刪除原始影像,網站也不會中斷。這同樣適用於 Oracle Content Management 提供的其他元件:圖庫、圖庫格線、文件、社群列、檔案下載,以及槽位和 componentGroups 的背景影像。
若要將自訂元件加入到此資產生命週期中,自訂元件必須告知 Oracle Content Management 希望服務代表管理的任何資產。因為這涉及複製資產,因此自訂元件還必須使用 Oracle Content Management API 選取資產,我們才知道如何進行管理。
管理 URL
資產的 URL 會根據一些條件而變更。
元件的程式實際執行 URL 與該元件的網站產生器 URL 不同
如果您複製一個頁面,Oracle Content Management 也會複製內容資料夾中所有參照的資產,這樣就不會有兩個元件指向內容資料夾中相同的資產
將 componentGroup 拖放到頁面上會為 componentGroup 中元件所參照的任何資產產生新的複本
此外,雖然相對 URL 可能適用於本機元件,但是遠端元件仍需要您想要 Oracle Content Management 代表管理的任何資產完整 URL,這樣遠端元件才能使用完整 URL 呈現其內嵌框架內容。
因為無法倚賴 URL 保持靜態,因此必須在程式碼中保留資產的 ID 參照,並在要呈現資產時擷取資產的 URL。
管理資產
這些 Sites SDK API 適用於管理資產。
SitesSDK.getProperty('componentAssets', callback);
這會取得目前資產的陣列
每個資產項目包含:
id:資產的唯一 ID。
title:Oracle Content Management 標題描述資料。
description:Oracle Content Management 描述性描述資料。
fileName:所選檔案的原始名稱。在自訂元件的「設定值」面板中顯示時很有用,讓使用者知道他們選取的是哪一個檔案。這不是複製到內容資料夾的檔案名稱。
source:啟用巨集的資產 URL。這個值會隨時間變更,因此您的元件不應該參考這個值,但必須儲存為資產的一部分。
url:根據呼叫 getPropert()
相關資訊環境的資產完整 URL。
SitesSDK.setProperty('componentAssets', [assets]);
呼叫此函數以儲存所有想要讓 Oracle Content Management 代替您管理的資產。
如果您未呼叫此函數,則不會儲存任何資產。
當網站發布後,任何不在此陣列的資產都將被刪除。
資產
參數是一個資產陣列,其格式與 getProperty
傳回的相同,filePicker
也會傳回同樣的格式。
註:
未儲存任何url
值。該值會在您要求資產時動態建立。SitesSDK.filePicker(options, callback);
會啟動檔案選擇器以選取資產清單的 API。
它會在成功選擇傳入所選資產陣列的資產時呼叫回呼。
此時不會儲存任何項目,並由元件呼叫 setProperty('componentAssets', [assets]);
以儲存與任何其他要儲存之資產結合的選擇項目。
選取資產的範例
本節會顯示如何從儲存的資產選取資產、儲存其 ID,以及重新擷取實際值。
編輯 settings.html
檔案。
變更樣板物件以包含 Image selection
。
<div> <!-- Image selection --> <label id="imageLabel" for="imageAsset" class="settings-heading" data-bind="text: 'Image'"></label> <input id="imageAsset" data-bind="value: imageName" readonly class="settings-text-box"> <button id="imageSelect" type="button" class="selectbutton" data-bind="click: showFilePicker">Select Image</button> </div>
變更 viewModel 以新增可監測項目來儲存所選資產的 ID。
self.imageID = ko.observable();
透過啟動檔案選擇器及顯示所選資產的名稱,變更 viewModel 以管理資產的選擇。
// // handle component assets // self.assets = [] // bring up a file picker to select the assets self.showFilePicker = function () { // select an image SitesSDK.filePicker({ 'multiSelect': false, 'supportedFileExtensions': ['jpg', 'png'] }, function (result) { if (result.length === 1) { // update the array of assets self.assets = result; // update the image in customSettingsData self.imageID(result[0].id); } }); }; // update the display name based on the assets self.imageName = ko.computed(function () { var imageName = '', imageID = self.imageID(); for (var i = 0; i < self.assets.length; i++) { if (self.assets[i].id === imageID) { imageName = self.assets[i].fileName; break; } } return imageName }, self);
更新 viewModel,以便在取得 customSettingsData
之前,先擷取資產。此程式碼也會在 self.ImageID()
可監測項目變更時,呼叫 self.imageName
。
SitesSDK.getProperty('componentAssets', function (assets) { self.assets = assets; SitesSDK.getProperty('customSettingsData', function (data) { //update observable self.imageWidth(data.imageWidth); self.imageID(data.imageID); self.titleText(data.titleText); self.userText(data.userText); // note that viewModel is initialized and can start saving data self.initialized(true); self.saveData = true; }); });
最後,更新 save
函數以儲存 imageID
,並確定使用參照資產清單更新 componentAssets
。
self.save = ko.computed(function () { var saveconfig = { 'imageWidth': isNaN(self.imageWidth()) ? self.imageWidth() : self.imageWidth() + 'px', 'imageID': self.imageID(), 'titleText': self.titleText(), 'userText': self.userText() }; // store the selected asset and update custom settings if (self.saveData) { SitesSDK.setProperty('componentAssets', self.assets); SitesSDK.setProperty('customSettingsData', saveconfig); } }, self);
檢查所選資產的結果
重新整理網站中的頁面,讓網站產生器能夠取得元件的變更。
將頁面切換為「編輯」模式
將您的元件拖放到頁面上。
啟動「設定值」面板。
按一下選取影像按鈕。
瀏覽 (或上傳) 並選取影像。
請注意,影像名稱已儲存,會顯示所選影像。
關閉「設定值」面板。
再次啟動「設定值」面板。
請注意,將再次反映影像的名稱。
呈現資產的範例
本節會顯示如何擷取資產並在元件中呈現,以及每當設定值面板中的值發生變更時,元件也能動態更新。
註:
雖然這裡顯示的是在頁面上內嵌框架中的本機元件範例,類似的程式碼也適用於在頁面中以內嵌方式呈現的元件。編輯 render.html
檔案。
更新樣板以包含您的資產。
<!-- ko if: imageURL --> <div style="flex-shrink:0;"> <img data-bind="attr: {style: imageStyle, id: 'imageId', src: imageURL, alt: '', title: ''}, click: imageClicked" /> </div> <!-- /ko -->
在 viewModel 建立兩個可監測項目以從 customSetttingsData
取得 imageID
,並儲存從儲存的資產清單擷取的 imageURL
。
self.imageID = ko.observable(); self.imageURL = ko.observable();
更新 viewModel,以便在每次 imageID
發生變更時,都會取得對應的影像資產 URL。
self.imageID.subscribe(function (imageID) { // whenever the image changes get the updated referenced asset SitesSDK.getProperty('componentAssets', function (assets) { for (var i = 0; i < assets.length; i++) { if (assets[i].id === imageID) { self.imageURL(assets[i].url); break; } } }); });
更新 viewModel 以從 customSettingsData
擷取 ID。
檢查呈現資產的結果
重新整理網站中的頁面,讓網站產生器能夠取得元件的變更。
將頁面切換為「編輯」模式
將您的元件拖放到頁面上。
啟動「設定值」面板。
按一下選取影像按鈕。
瀏覽 (或上傳) 並選取影像。
請注意,影像名稱已儲存,會顯示所選影像。
關閉「設定值」面板。
此時您應該會看到所選影像呈現在元件中。
繼續進行教學課程複習。