ตัวอย่างที่ผ่านมาได้แสดงองค์ประกอบในระบบที่แสดงแบบอินไลน์ในเพจ นอกจากนี้ คุณยังสามารถเลือกแสดงองค์ประกอบในเฟรมแบบอินไลน์ได้
ตัวอย่างเช่น คุณอาจเลือกแสดงองค์ประกอบในเฟรมแบบอินไลน์ หากองค์ประกอบของคุณมีสิทธิ์การอัปเดตเพจที่จำกัด ซึ่งคุณต้องสร้างเพจใหม่เมื่อมีการเปลี่ยนแปลงคุณสมบัติ นอกจากนี้ องค์ประกอบระยะไกลจะแสดงผลในเฟรมแบบอินไลน์เสมอ
ตัวอย่างต่างๆ ในส่วนนี้นำมาจากไฟล์ที่สร้างให้กับคุณ เมื่อคุณเลือกตัวเลือก สร้างองค์ประกอบที่แสดงผลใน iframe ขณะสร้างองค์ประกอบในระบบ อย่างไรก็ตาม คุณสามารถใช้ชุดไฟล์เหล่านี้และโฮสต์ไว้บนเซิร์ฟเวอร์ระยะไกล เพื่อให้สามารถใช้ไฟล์ต่างๆ กับองค์ประกอบระยะไกลได้อย่างทั่วถึง
ความคล้ายคลึงกันระหว่างองค์ประกอบของเฟรมแบบอินไลน์และเฟรมที่ไม่ใช่แบบอินไลน์
แผงข้อมูลการตั้งค่า
เนื่องจากมีแผงข้อมูลการตั้งค่าอยู่ในเพจในเฟรมแบบอินไลน์ตลอดเวลา รหัสสำหรับแผงข้อมูลการตั้งค่าจะไม่เปลี่ยนแปลงไปโดยไม่คำนึงว่าองค์ประกอบจะใช้เฟรมแบบอินไลน์หรือไม่ คุณจะสร้างรหัสแผงข้อมูลการตั้งค่าเดียวกันสำหรับการใช้ทั้งสองกรณี
API ของ Sites SDK
SDK API เหมือนกันสำหรับการใช้ทั้งสองกรณี คุณจะใช้รหัสเดียวกันในการแสดงทริกเกอร์ รับข้อมูลการดำเนินการ รวมถึงเรียกและตั้งค่าคุณสมบัติต่างๆ ขณะที่คุณสมบัติบางรายการอาจไม่สามารถใช้ได้กับในกรณีทั้งสอง (ตัวอย่างเช่น คุณไม่สามารถตั้งค่าคุณสมบัติ "height" สำหรับองค์ประกอบที่ไม่ได้ใช้เฟรมแบบอินไลน์) API ยังคงเหมือนเดิม ดังนั้น คุณจึงสามารถคัดลอกรหัสระหว่างประเภทองค์ประกอบทั้งสอง และรหัสตัวอย่างที่กล่าวถึงในบทแนะนำนี้จะใช้ได้สำหรับทั้งสองกรณี
ความแตกต่างระหว่างองค์ประกอบของเฟรมแบบอินไลน์และเฟรมที่ไม่ใช่แบบอินไลน์
โครงสร้างไฟล์และการอ้างอิง
<component name>
assets
css
app-styles.css
js
jquery.mn.js
knockout.mn.js
sites.min.js
render.html
settings.html
appinfo.json
_folder_icon.jpgไฟล์เหล่านี้ได้รับการสร้างขึ้นเพื่อช่วยให้คุณสามารถรันองค์ประกอบของคุณในเฟรมแบบอินไลน์บนเพจได้ทันที ความแตกต่างหลักระหว่างโครงสร้างนี้และโครงสร้างขององค์ประกอบในระบบมาตรฐาน ได้แก่
การอ้างอิง JavaScript ดังนี้
คุณได้รับสำเนาที่สมบูรณ์ของไฟล์เหล่านี้เพื่อให้องค์ประกอบของคุณรัน ไฟล์เหล่านี้จำเป็นสำหรับองค์ประกอบของเฟรมแบบอินไลน์ตัวอย่างที่ใช้รัน คุณสามารถเพิ่มหรือย้ายเนื้อหาของไดเรคทอรีนี้ออกได้ตามความต้องการของคุณ
เนื่องจากข้อมูลทั้งหมดภายใต้ไดเรคทอรี assets สำหรับองค์ประกอบของคุณถูกดันไปยังไซต์ส่วนกลางเมื่อเผยแพร่องค์ประกอบแล้ว ข้อมูลทั้งหมดในไดเรคทอรี js จะสามารถใช้ได้ทั้งในตัวสร้างไซต์และขณะรันไทม์
หมายเหตุ: ไฟล์เหล่านี้ได้รับการสร้างขึ้นเพื่อให้ง่ายต่อการใช้งาน คุณควรให้ความสำคัญที่การรวมไฟล์เหล่านี้ในธีมหรือในตำแหน่งส่วนกลางอื่นๆ แทนการสร้างเวอร์ชันแยกของไฟล์เหล่านี้สำหรับองค์ประกอบของเฟรมแบบอินไลน์ของคุณแต่ละรายการ
render.html:
นี่คือเอกสาร HTML แบบเต็มที่ตรงข้ามกับไฟล์ render.js สำหรับองค์ประกอบมาตรฐานซึ่งเป็นโมดูล AMD
การจัดการ "ความสูง" ขององค์ประกอบ
ปัญหาหนึ่งของการใช้เฟรมแบบอินไลน์คือ การจัดการความสูงของเฟรมแบบอินไลน์ หากคุณดำเนินการไม่ถูกต้อง คุณจะเห็นแถบเลื่อนต่างๆ ปรากฏขึ้นสำหรับองค์ประกอบบนเพจ ซึ่งคุณอาจต้องการหรือไม่ต้องการก้ได้
ในการจัดการความสูงของเฟรมแบบอินไลน์ องค์ประกอบต้องให้ข้อมูลเพจเกี่ยวกับความสูงของเฟรมแบบอินไลน์ที่ต้องการ ด้วยองค์ประกอบระยะไกล คุณอาจกำลังประสบกับปัญหาข้ามโดเมน ดังนั้น คุณจึงต้องใช้การรับส่งข้อความของ Sites SDK เพื่อขอให้เพจตั้งค่าเฟรมแบบอินไลน์ให้มีความสูงที่ต้องการ หลังจากที่องค์ประกอบแสดงบนเพจแล้ว ซึ่งกระบวนการนี้สามารถทำได้โดยการใช้ API SitesSDK.setProperty('height', {value}) (โปรดดูSDK สำหรับ Oracle Content and Experience)
ตัวอย่าง สร้างฟังก์ชัน setHeight และแฮนด์เลอร์การเชื่อมโยงที่กำหนดเองเพื่อเรียกฟังก์ชัน เมื่อองค์ประกอบแสดงบนเพจ
อัปเดตฟังก์ชันความสูง ดังนี้
// set the height of the iFrame for this App
self.setHeight = function () {
// use the default calculation or supply your own height value as a second parameter
SitesSDK.setProperty('height');
};แฮนด์เลอร์การเชื่อมโยงที่กำหนดเองของ Knockout ที่ใช้เรียก setHeight เมื่อใดก็ตามที่แสดงองค์ประกอบบนเพจ หรือคุณสมบัติเปลี่ยนแปลงไป ดังนี้
ko.bindingHandlers.sampleAppSetAppHeight = {
update: function (element, valueAccessor, allBindings, viewModel, bindingContext) {
// create dependencies on any observables so this handler is called whenever it changes
var imageWidth = viewModel.imageWidth(),
imageUrl = viewModel.imageUrl(),
titleText = viewModel.titleText(),
userText = viewModel.userText();
// re-size the iFrame in the Sites page now the template has rendered
// Note: If you still see scrollbars in the iframe after this, it is likely that CSS styling in your app is the issue
viewModel.setHeight();
}
};การอัปเดตเทมเพลทเพื่อเรียกแฮนด์เลอร์การเชื่อมโยง ดังนี้
<div data-bind="sampleAppSetAppHeight: true"></div>
ทริกเกอร์และการรีจิสเตอร์การดำเนินการ
ขณะที่ทริกเกอร์/การรีจิสเตอร์การดำเนินการสำหรับองค์ประกอบที่ไม่อยู่ในเฟรมแบบอินไลน์อยู่ในไฟล์ appinfo.json แต่สำหรับองค์ประกอบของเฟรมแบบอินไลน์ องค์ประกอบจะมีหน้าที่แสดงข้อมูลนี้ การดำเนินการนี้สามารถทำได้โดยการใช้ API รายการดังนี้
SitesSDK.subscribe('GET_ACTIONS', self.getAppActions);
SitesSDK.subscribe('GET_TRIGGERS', self.getAppTriggers);
นี่คือตัวอย่างของการใช้ API เหล่านี้
// Register TRIGGERS meta-data
SampleAppViewModel.prototype.getAppTriggers = function (args) {
var triggers = [{
"triggerName": "imageClicked",
"triggerDescription": "Image clicked",
"triggerPayload": [{
"name": "payloadData",
"displayName": "Trigger Payload Data"
}]
}];
return triggers;
};
// Register ACTIONS meta-data
SampleAppViewModel.prototype.getAppActions = function (args) {
var actions = [{
"actionName": "setImageWidth",
"actionDescription": "Update the image width",
"actionPayload": [{
"name": "imageWidth",
"description": "Image Width in pixels",
"type": {
"ojComponent": {
"component": "ojInputText"
}
},
"value": ""
}]
}];
return actions;
};
เข้าใช้สไตล์ของธีม
เนื่องจากองค์ประกอบแสดงอยู่ในเฟรมแบบอินไลน์ จึงไม่มีสิทธิ์เข้าใช้สไตล์ที่สามารถใช้ได้ในธีม Sites SDK มี API ที่ใช้ดึงข้อมูลสไตล์เหล่านี้ เพื่อให้สามารถใช้สไตล์ได้กับอีลิเมนต์ภายในเฟรมแบบอินไลน์
โปรดดูคำอธิบายเพิ่มเติมเกี่ยวกับหัวข้อนี้ที่ ขั้นตอนที่ 14: ใช้สไตล์ที่กำหนดเองเมื่อองค์ประกอบแสดงอยู่ในเฟรมแบบอินไลน์
HTTPS แบบผสมเทียบกับโปรโตคอล HTTP
เนื่องจาก Oracle Content Management ใช้โปรโตคอล HTTPS ทรัพยากรทั้งหมดที่อ้างอิงภายในเพจจะต้องใช้ HTTPS ด้วยเช่นกัน ทรัพยากรต่างๆ ได้แก่ ไฟล์ .html หลักที่จะแสดงอยู่ในเฟรมแบบอินไลน์ พร้อมด้วยไฟล์ต่างๆ ทั้งหมดที่อ้างอิงอยู่
ข้อกำหนดของทรัพยากรนี้มีผลใช้กับองค์ประกอบระยะไกลส่วนใหญ่ อย่างไรก็ตาม คุณต้องคำนึงถึงข้อจำกัดนี้ด้วย ทรัพยากรสำหรับองค์ประกอบในระบบที่ใช้เฟรมแบบอินไลน์ได้รับการระบุให้โดยเซิร์ฟเวอร์ Oracle Content Management ดังนั้น องค์ประกอบเหล่านี้จึงใช้โปรโตคอลที่ตรงกันอยู่แล้ว
ดำเนินการต่อไปยัง ขั้นตอนที่ 14: ใช้สไตล์ที่กำหนดเองเมื่อองค์ประกอบแสดงอยู่ในเฟรมแบบอินไลน์