【问题标题】:calling template from the other template从另一个模板调用模板
【发布时间】:2012-07-05 18:48:00
【问题描述】:

我正在使用 Catalyst MVC 框架为数据库创建网页。我不是这样的全职程序员。但我知道 perl 和 java 的基础知识。我是生物学家。我已经编写了一个包含表格的模板文件(view.tt)。我需要将此表的内容链接到另一个写在另一个模板文件中的表。我无法链接这两个模板(因为我无法正确生成 url)。任何人都可以帮助或指导我解决此问题。

第二个模板文件的代码如下:

<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>

嗨,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)=@_;
         my @plets = $c->model('GeneDB::genewhs')->search({
         Analysistypename => @plet,
 });
         $c->stash->{plets}=\@plets;
         $c->stash->{template}='gene/sample.tt';

 }

如果问题不清楚,请告诉我...我有义务解决它..

提前谢谢..

【问题讨论】:

    标签: perl catalyst template-toolkit


    【解决方案1】:

    可以在当前正在处理的模板中简单地PROCESSINCLUDE 另一个模板,但这不允许用户交互。我认为您的目标是在汇总表和第二个表之间建立一个“实时”链接,第二个表在从第一个表中进行一些选择后加载结果?从您的问题中还没有完全清楚。

    但如果我理解正确,您将需要做(至少)两件事之一:

    1. 将所有结果加载到一系列表中,并为每个表添加 ID 和 CSS 类以指示其类型。使用 jQuery(或类似的)隐藏所有并基于单击汇总表显示相关表。如果结果量不是很大,这将起作用,这意味着您不需要掌握 AJAX。 (您也可以将所有结果放在一个表中,并使用 CSS 类来识别类型。)
    2. 编写一个 Catalyst Action 来接收识别要返回的结果所需的任何参数,并将它们作为 JSON 数组返回。调用函数负责表格的布局。除非您对 jQuery、AJAX 和 Javascript 非常熟悉,或者所有结果的数量都令人望而却步,否则我不建议您这样做。

    说了#2,看起来你已经把所有的结果都藏起来了。它们是如何联系起来的还不太清楚。 (我不禁认为这些数据应该在 Catalyst 端进行标准化,而不是在模板端使用 plots 数组进行解码。)因此,假设您使用选项 #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%">
    

    ...所以点击功能可以链接到下级表。

    希望这些代码 sn-ps 将推动您朝着正确的方向前进。 plotsgene.whs 之间的关系不太清楚,我怕给你更多。

    【讨论】:

    • 您好,Ret,非常感谢,抱歉回复晚了。正如您所理解的那样,我的目标是在汇总表和加载结果的第二个表之间建立一个“实时”链接。我以某种方式通过另一种方式链接了模板。我必须在第一个模板中超链接到第二个模板。
    猜你喜欢
    • 1970-01-01
    • 2013-03-25
    • 1970-01-01
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多