Opisano i objaśniono tu, jak zarządzać zasobami używanymi przez składnik.
Do zasobów należą składniki (w tym niestandardowe), o których Oracle Content Management musi wiedzieć, aby móc zarządzać cyklem ich życia.
Folder zawartości Oracle Content Management
Każdy tworzony w Oracle Content Management serwis jest wyposażany we własny folder content
zawartości. Jest to folder ukryty, który zazwyczaj nie jest wyświetlany. Gdy serwis jest publikowany, w systemie plików są publikowane wszystkie pliki zawarte w folderze content
.
Na przykład, jeśli przy użyciu składnika "obraz" zostanie wybrany obraz, Oracle Content Management sporządzi kopię tego wybranego obrazu i umieści ją w folderze zawartości. Używany URL zawsze wskazuje skopiowaną wersję obrazu, tak że jeśli obraz oryginalny zostanie usunięty, serwis nadal będzie poprawnie działał. Dotyczy to także innych składników udostępnianych przez Oracle Content Management, takich jak "galeria", "siatka galerii", "dokument", "pasek społecznościowy", "pobieranie plików", a także obrazów tła dla gniazd i grup składników.
Składnik niestandardowy, aby móc uczestniczyć w cyklu życia zasobu, musi poinformować Oracle Content Management o wszelkich zasobach, którymi usługa ma zarządzać w jego imieniu. Ponieważ wiąże się to ze sporządzeniem kopii zasobu, składnik niestandardowy musi także wybrać zasób — używając zestawów API z Oracle Content Management API — tak aby było wiadomo, jak nim zarządzać.
Zarządzanie adresami URL
URL zasobu zmienia się w zależności od pewnych kryteriów.
URL składnika, używany w trybie wykonawczym, różni się od adresu URL, używanego dla składnika przez konstruktor serwisów
Jeśli zostanie skopiowana strona, Oracle Content Management również sporządzi kopię wszystkich zasobów z folderu zawartości, do których występują odwołania, tak że nigdy nie ma dwóch składników wskazujących ten sam zasób w folderze zawartości
Jeśli na stronę zostanie przeciągnięta grupa składników (składnik componentGroup), zostaną sporządzone kopie wszystkich zasobów, do których odwołuje się którykolwiek zasób zawarty w grupie składników
Ponadto, mimo że względny URL może być odpowiedni dla składnika lokalnego, dla składników odległych jest wymagany w pełni kwalifikowany URL każdego zasobu, którym Oracle Content Management ma zarządzać, dzięki czemu zawartość ramki iFrame zasobu może być renderowana z użyciem pełnego adresu URL.
Ponieważ nie można zakładać, że adres URL będzie statyczny, trzeba odwołania do ID utrzymywać w swoim kodzie i pobierać URL zasobu tylko wtedy, gdy zasób ten będzie renderowany.
Zarządzanie zasobami
Dostępne są następujące Sites SDK API do zarządzania zasobami:
SitesSDK.getProperty('componentAssets', callback);
Uzyskuje tablicę bieżących zasobów
Każdy wpis zasobu składa się z następujących elementów:
id: Unikatowy ID zasobu.
title: Metadane tytułu Oracle Content Management.
description: Metadane opisu Oracle Content Management.
fileName: Oryginalna nazwa wybranego pliku. Przydatne do wyświetlenia w panelu "Ustawienia" dla składnika niestandardowego (dzięki temu użytkownicy będą wiedzieć, który plik wybrali). Nie jest to nazwa pliku skopiowanego do folderu zawartości.
source: URL (z obsługą makr) zasobu. Wartość ta będzie się zmieniać i dlatego składnik nie powinien się do niej odwoływać, ale musi zostać zapisana jako część zasoby.
url: W pełni kwalifikowany URL zasobu, oparty na kontekście, w którym wywołano getProperty()
.
SitesSDK.setProperty('componentAssets', [assets]);
Należy wywołać, aby zapisać wszystkie zasoby, którymi Oracle Content Management ma zarządzać w imieniu bieżącego użytkownika.
Jeśli ta metoda nie zostanie wywołana, to nie zostanie zapisany żaden zasób.
Wszelkie zasoby, których nie ma w tej tablicy, zostaną usunięte podczas publikowania serwisu.
Parametr assets
ma postać tablicy zasobów w tym samym formacie, w jakim uzyskano je za pomocą metody getProperty
— tablica ta jest także zwracana przez selektor plików (filePicker
).
Uwaga:
Nie jest składowana żadna wartośćurl
. Jest ona dynamicznie tworzona, gdy wystąpi pytanie o zasoby.SitesSDK.filePicker(options, callback);
API do wywołania selektora plików umożliwiającego wybranie listy zasobów.
Przy pomyślnym wyborze zasobów jest uaktywniane wywołanie zwrotne przekazujące ich tablicę.
W tym momencie nic nie jest zapisywane; to składnik decyduje o wywołaniu metody setProperty('componentAssets', [assets]);
w celu zapisania elementów z tego wyboru w połączeniu z innymi zasobami, które mają zostać zapisane.
Przykład wyboru zasobu
Pokazano tu, jak wybrać zasób, składować jego ID oraz ponownie pobrać faktyczne wartości ze składowanych zasobów.
Edytować plik settings.html
.
Zmienić obiekt "template", tak aby zawierał blok 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>
Zmienić viewModel, dodając obiekt "observable" służący do przechowywania ID wybranego zasobu.
self.imageID = ko.observable();
Zmienić viewModel, tak aby wybór zasobu odbywał się przez wywołanie selektora plików i była wyświetlana nazwa wybranego zasobu.
// // 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);
Zaktualizować viewModel, tak aby przed uzyskaniem customSettingsData
były najpierw uzyskiwane zasoby. Kod ten wywoła także self.imageName
, gdy obiekt "observable" self.ImageID()
ulegnie zmianie.
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; }); });
Na koniec zmodyfikować funkcję save
, tak aby został zapisany imageID
, oraz zaktualizować componentAssets
o listę zasobów, do których występują odwołania.
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);
Sprawdzanie wyników dla wyboru zasobu
Aby konstruktor serwisów mógł pobrać zmiany do składnika, odświeżyć stronę serwisu.
Przełączyć stronę do trybu edycji.
Przeciągnąć składnik na stronę.
Wyświetlić panel "Ustawienia".
Nacisnąć przycisk Wybierz obraz.
Wyszukać (lub wysłać) obraz, a następnie go wybrać.
Warto zwrócić uwagę, że zostaje składowana nazwa wybranego obrazu.
Zamknąć panel "Ustawienia".
Wyświetlić ponownie panel "Ustawienia".
Nazwa obrazu jest ponownie odzwierciedlana.
Przykład renderowania zasobu
Pokazano tu, jak pobierać zasoby i renderować je w składniku, oraz dynamicznie aktualizować składnik, gdy zostaną zmienione wartości w panelu "Ustawienia".
Uwaga:
Mimo że jest to przykład odnoszący się do składnika lokalnego, zawartego w ramce wstawkowej na stronie, to jednak podobny kod będzie działał dla składników renderowanych miejscowo na stronie.Edytować plik render.html
.
Zmienić obiekt "template", tak aby zawierał zasób.
<!-- ko if: imageURL --> <div style="flex-shrink:0;"> <img data-bind="attr: {style: imageStyle, id: 'imageId', src: imageURL, alt: '', title: ''}, click: imageClicked" /> </div> <!-- /ko -->
W modelu widoku (viewModel) utworzyć dwa obiekty "observable" w celu uzyskania wartości imageID
z customSetttingsData
oraz przechowywania adresu imageURL
uzyskanego ze składowanej listy zasobów.
self.imageID = ko.observable(); self.imageURL = ko.observable();
Zaktualizować viewModel, tak aby — gdy zmieni się imageID
— pobierał URL odpowiadającego mu zasobu "obraz".
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; } } }); });
Zaktualizować viewModel, tak aby uzyskiwał ID z customSettingsData
.
Sprawdzanie wyników dla renderowania zasobu
Aby konstruktor serwisów mógł pobrać zmiany do składnika, odświeżyć stronę serwisu.
Przełączyć stronę do trybu edycji.
Przeciągnąć składnik na stronę.
Wyświetlić panel "Ustawienia".
Nacisnąć przycisk Wybierz obraz.
Wyszukać (lub wysłać) obraz, a następnie go wybrać.
Warto zwrócić uwagę, że zostaje składowana nazwa wybranego obrazu.
Zamknąć panel "Ustawienia".
W tym momencie powinniśmy w składniku widzieć wyrenderowany wybrany obraz.
Kontynuacja: Samouczek — przegląd.