當前為10.0版本文檔,更多實例內容將在最新幫助文檔中展現,點選跳轉至 最新版幫助文檔

HTML 通過 iframe 嵌套多張模板并設置聯動

1. 概述

1.1 問題描述

爲了實現主子表聯動,将頁面分成 3 個區域,分别對應三張不同的報表:

一張主報表:zhu.cpt 和 2 張子報表:zi1.cpt 和 zi2.cpt,互相之間通過超級鏈接,實現子報表的動态改變值的效果如下圖所示:

123.gif

1.2 實現思路

通過 HTML 嵌套多個 frame,首先在主表的 frame 上展示主表,然後在主表加載完觸發加載結束事件,調用 HTML 中定義的 JS 方法,給表 2 賦動态地址 src,表 3 則在表 2 基礎上觸發加載結束事件調用 JS,動态給表 3 賦 src。

2. 操作步驟

2.1 制作 HTML 頁面

\webapps\webroot\help\page_demo文件夾中新建一個 HTML 頁面 frame.html,在 HTML 中定義 frameset 标簽,組織多個窗口,通過 frame 設置特定的窗口區域,通過 JS 判斷對不同窗口區域設置不同模板地址,詳細代碼如下:

<HTML>
<HEAD>
<TITLE>New Document</TITLE>
<script type="text/javascript"> 
//在主模板加載結束事件觸發zhu(classno)方法,并把classno傳到html
function zhu(classno) {
var classno = classno;
//把獲取參數classno賦值給表2模板
var zi1 = "/webroot/decision/view/report?viewlet=zi1.cpt&op=write&__showtoolbar__=false&classno=" + classno;
document.getElementById("zi1").src = zi1;
   }
   //主模板和表2模板加載完觸發aa(stuno)方法
   function aa(stuno) {
   var stuno = stuno;
   //如果stuno爲空的時候,則表3窗口賦值爲空,不爲空則動态給表3模板設置url
   if(stuno == 'null')
   {
var reportURL = "";
document.getElementById("zi2").src = reportURL;
   return false;
   }else{
var reportURL = "/webroot/decision/view/report?viewlet=zi2.cpt&op=write&__showtoolbar__=false&stuno=" + stuno;
document.getElementById("zi2").src = reportURL;
   }
   }
 
</script>
<base target="browserframe" />
</HEAD>
<frameset rows="40%,60%">
<frame id="reportFrame" name="reportFrame"
src="/webroot/decision/view/report?viewlet=zhu.cpt&op=write">
</frame>
<frameset name="zi" cols="35%,65%">
<frame id="zi1" name="zi1" title="zi1" src="">
<frame id="zi2" src="">
</frameset>
</frameset>
<body>
</body>
</HTML>
顯示代碼

2.2 zhu.cpt 設計

1)模板設計

新建工作薄,添加數據集 ds1,SQL 語句爲SELECT * FROM STSCORE,如下圖所示:

image.png

将數據集中的,classno 字段拖曳至 B2 單元格中,如下圖所示:

image.png

2)超級鏈接

在主表點擊超級鏈接傳值到子表,右擊 B2 單元格,超級鏈接>網頁鏈接,UR L地址則是輸入本身模板地址:/webroot/decision/view/report?viewlet=zhu.cpt,鏈接打開於選擇當前窗口,參數則把點擊的值傳到子模板中,classno=B2,如果不希望模板分頁,則可添加參數 op=write,設置如下圖所示:

image.png

3)加載結束事件

因爲不希望分頁,則在填報預覽下添加加載結束事件,根據個人情況而定是否顯示工具欄,在加載結束事件中添加參數 classno=$classno,在公式中使用$classno則可動态獲取到點擊超級鏈接的值;

在三個窗口都顯示值的情況下,又點擊了主表中超級鏈接,這時就需要清空表 3 中的數據,所以添加參數 stuno=null,傳到 HTML 進行判斷,清空表 3 數據。

image.png

在 JS 中判斷是否第一次訪問主模板,不是則加載完觸發 HTML 中定義 JS 方法,代碼如下:

if(classno != 'null'){
var zhu = parent.window;
zhu.zhu(classno);
zhu.aa(stuno);
}

設置的效果如下圖所示:

image.png

最終保存模板爲 zhu.cpt

2.3 zi1.cpt 設計

1)模板設計

新建工作薄,添加數據集 ds1,SQL 語句爲SELECT * FROM STSCORE,如下圖所示:

image.png

根據表樣中的字段将數據集中的字段拖曳至相應單元格中,設置B3單元格的左父格爲A2。

image.png

通過主表傳遞參數$classno,對表 2 進行過濾,進而展示數據,雙擊 A2 單元格,選擇過濾,添加條件:CLASSNO 等於 $classno,如下圖:

image.png

2)超級鏈接

跟主表設置基本相同,添加超級鏈接-網頁鏈接,URL 地址則是輸入本身模板地址:/webroot/decision/view/report?viewlet=zi1.cpt,鏈接打開於選擇當前窗口,并把參數傳值給本身和表 3 模板中,設置如下:

image.png

3)加載結束事件

只要控制表三模板即可,添加參數stuno=$stuno,在 JS 中判斷 stuno 不爲空的情況下觸發 HTML 中的方法,動态把 URL 地址賦值給表 3 模塊,JS 代碼如下:

if(stuno != 'null'){
var zhu = parent.window;
zhu.aa(stuno);
}

設置的效果如下圖所示:
image.png

最終保存模板爲 zi1.cpt

2.4 zi2.cpt 設計

1)模板設計

新建工作薄,添加數據集 ds1,SQL 語句爲:SELECT * FROM STSCORE,如下圖所示:

image.png

根據表樣中的字段将數據集中的字段拖曳至相應單元格中,只需通過zi1.cpt 傳遞過來的$stuno參數進行過濾即可,雙擊 B3 單元格,選擇過濾,添加條件:STUDENTNO等於$stuno如下圖:

image.png

最終保存模板爲 zi2.cpt
到這裏模板設置已完成,啓動内置服務器,訪問 HTML,在浏覽器中輸入
http://localhost:8075/webroot/help/page_demo/frame.html即可查看效果。

3. 附件下載

點擊下載文檔中涉及到的附件資源:Enclosure.zip

附件列表


主題: 原簡體文檔
  • 有幫助
  • 沒幫助
  • 只是瀏覽

文 檔回 饋

滑鼠選中內容,快速回饋問題

滑鼠選中存在疑惑的內容,即可快速回饋問題,我們將會跟進處理。

不再提示

10s後關閉

反饋已提交

網絡繁忙