2012-07-05 135 views
1

我正在爲Catalyst MVC框架創建數據庫的網頁。我不是全職程序員。但是我知道perl和java的基本知識。我是一名生物學家。我寫了一個有表格的模板文件(view.tt)。我需要將此表的內容鏈接到另一個表中,該表另外再寫入一個模板文件。我無法鏈接這兩個模板(因爲我無法正確生成網址)。任何人都可以幫助或指導我解決此問題。從另一個模板調用模板

以下代碼是用於第二模板文件:

<h4>Analyses Table</h4> 

<table id="analysis_table" width="90%"> 

<thead> 

<tr> 
    <th align="center" valign="center">Dataset</th> 
    <th align="center" valign="center">Tissue</th> 
    <th align="center" valign="center">Expression</th> 
    <th align="center" valign="center">Analysis</th> 
</tr> 

</thead> 
<tbody> 
[% FOREACH result IN plets -%] 
    [% IF result.analysistypename == 'Cancer' -%] 

    [% matches = result.datasetname.match('(\w+) (\w+)') %] 
    <tr> 
    <td align="left" valign="top">[% result.datasetname %]</td> 
    <td align="left" valign="top">[% result.expression %]</td> 
    <td align="left" valign="top">[% result.datatype %]</td> 
    <td align="left" valign="top">[% result.generankpercentile %]</td> 
    </tr> 
    [% END -%] 
[% END -%] 

</tbody> 

<tfoot> 

<tr> 
    <th align="center" valign="center">Dataset</th> 
    <th align="center" valign="center">Tissue</th> 
    <th align="center" valign="center">Expression</th> 
    <th align="center" valign="center">Analysis</th> 
</tr> 

</tfoot> 

</table> 

下面的代碼段是在具有表我的第一模板被超鏈接(view.tt)

<h4>Analyses Summary table</h4> 

<table id="score_table" width="50%"> 

<thead> 

<tr> 
<th align="centre" valign="centre"> Analysis Type</th> 
<th align="centre" valign="centre">Score</th> 
</tr> 

</thead> 

<tbody> 

[% FOREACH score IN gene.whs -%] 

[% plots = [ ['Cancer', score.cancer_vs_normal_over, score.cancer_vs_normal_under], 
['Bladder cancer', score.bladder_cancer_over, score.bladder_cancer_under], 
['Brain and CNS cancer', score.brain_and_cns_cancer_over, score.brain_and_cns_cancer_under], 
['Breast Cancer', score.breast_cancer_over, score.breast_cancer_under], 
['Cervical Cancer', score.cervical_cancer_over, score.cervical_cancer_under], 
['Colorectal cancer', score.colorectal_cancer_over, score.colorectal_cancer_under], 
] 
%] 


[% FOREACH plot IN plots %] 
<tr> 
<td> [% pl0t.0 %]</td> 
<td> [% pl0t.1 %] </td> 
<td> [% pl0t.2 %] </td> 
<td> [% (pl0t.1 + 5)/(plot.2 + 5) | format('%5.2f') %] </td> 
</tr> 
[% END %] 

[% END %] 

</tbody> 

<tfoot> 
<tr> 
<th align="centre" valign="centre"> Analysis Type</th> 
<th align="centre" valign="centre">Score</th> 
</tr> 
</tfoot> 

</table> 

Hi Ret,非常感謝,並且對於遲到的回覆感到抱歉。正如你所理解的,我的目標是在彙總表和第二個加載了結果的表之間建立一個「實時」鏈接。我以某種方式以另一種方式鏈接模板。我必須在第一個模板中超鏈接到第二個模板。我的超鏈接在foreach循環中,看起來像這樣。

[% FOREACH plot IN plots %] 
    <tr> 
    <td><a href="[% c.uri_for(c.controller('gene').action_for('sample'))%]/[% plot.0 %]>[% plot.0 %]</a></td> 
    <td> [% pl0t.1 %] </td> 
    <td> [% pl0t.2 %] </td> 
    <td> [% (pl0t.1 + 5)/(plot.2 + 5) | format('%5.2f') %] </td> 
    </tr> 
    [% END %] 

此行正確鏈接到第二個模板(sample.tt)。第二個模板包含一系列表格。當在第一個表上單擊超鏈接時,應該顯示與該鏈接對應的表。我已成功鏈接模板。我在控制器(gene.pm)中創建了一個子例程,用於鏈接模板。我在實現自己的目標方面遇到了問題。第二個模板(sample.tt)中的html部分運行正常,但模板工具箱不起作用。我能夠看到url中的變化,但在頁面中沒有反映出來。

下面是第二個模板子程序:

sub sample :Path('sample'):Args(1) { 
     my($self,$c,$plot)[email protected]_; 
     my @plets = $c->model('GeneDB::genewhs')->search({ 
     Analysistypename => @plet, 
}); 
     $c->stash->{plets}=\@plets; 
     $c->stash->{template}='gene/sample.tt'; 

} 

如果萬一的問題是不明確的,請讓我知道...我將不得不清除它..

謝謝提前...

回答

0

在當前正在處理的模板中可以簡單地使用PROCESSINCLUDE,但這不允許用戶交互。我認爲你的目標是在總結表和第二張表格之間有一個「實時」鏈接,並在第一個表格中選擇結果後加載結果。你的問題並不完全清楚。

但是,如果我理解正確的話,你需要做的一個(至少)兩兩件事:

  1. 加載所有的成果轉化爲一系列表,並添加ID和CSS類每個表以表明其類型。使用jQuery(或類似的)來隱藏所有內容,並根據點擊摘要表來顯示相關的表格。如果結果數量不是那麼好,這意味着你不需要處理AJAX。 (您也可以將所有結果放在一個表中,並使用CSS類來識別類型。)
  2. 編寫一個Catalyst Action,它接收所需的任何參數以標識要返回的結果,並將它們作爲JSON數組返回。調用函數負責表格的佈局。我不會推薦這個,除非你對jQuery,AJAX和Javascript一般都很熟悉,或者所有結果的數量都是令人望而卻步的。

說了#2,看起來你已經把所有的結果藏起來了。他們如何鏈接不太清楚。 (我不禁想到這個數據應該在Catalyst端進行標準化,而不是在模板端用plot數組進行解碼。)所以,假設你選擇了#1選項,你需要這樣的東西:

[%- 
    #add a 'key' field with no spaces suitable for jQuery as the last element 
    plots = [ 
     ['Cancer', score.cancer_vs_normal_over, score.cancer_vs_normal_under, 'cancer'], 
     ['Bladder cancer', score.bladder_cancer_over, score.bladder_cancer_under, 'bladder-cancer' ], 
-%] 

[% FOREACH plot IN plots %] 
<tr> 
<td class="linktoresults" rel="#[%plot.3%]"> [% plot.0 %]</td> 
... 
[% END %] 

[%- FOREACH ... # It's just not clear how plots relate to gene.whs 
    SET rel = ... # how this result links back to the plot array from earlier. 
    PROCESS "secondarytable.tt"; 
    END; 
-%] 

<script src="jquery.js"></script> 
<script> 
    $(document).ready(function({ 
     $(".linktoresults").click(function({ 
      id = $(this).attr('rel'); 
      $(".analysis_table").hide(); // hide all tables 
      $(id).show(); // show the relevant one for this item 
     }); 
    }); 
</script> 

而且你secondarytable.tt模板需要有:

<table class="analysis_table" id="[%rel%]" width="90%"> 

...這樣的點擊功能可以鏈接到下級表。

希望這些代碼片段能爲您帶來正確的方向。恐怕,plotsgene.whs之間的關係還不夠清楚,因爲我不能給你更多。

+0

嗨Ret,非常感謝,很抱歉,遲到的答覆。正如你所理解的,我的目標是在彙總表和第二個加載了結果的表之間建立一個「實時」鏈接。我以某種方式以另一種方式鏈接模板。我必須在第一個模板中超鏈接到第二個模板。 – user1462804 2012-07-14 05:17:47

相關問題