1

データベース用の Web ページを作成するために、Catalyst MVC フレームワークに取り組んでいます。私はフルタイムのプログラマーではありません。しかし、私は perl と java の基本を知っています。私は生物学者です。テーブルを持つテンプレートファイル(view.tt)を作成しました。このテーブルの内容を、もう 1 つのテンプレート ファイルに記述されている別のテーブルにリンクする必要があります。これら 2 つのテンプレートをリンクできません (URL を正しく生成できないため)。この問題を解決するために誰かが私を助けたり導いたりできますか?

次のコードは、2 番目のテンプレート ファイルのコードです。

<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、どうもありがとう、返信が遅くなってすみません。あなたが理解しているように、私の目的は、集計テーブルと結果がロードされた 2 番目のテーブルとの間に「ライブ」リンクを作成することです。どういうわけか、別の方法でテンプレートをリンクしました。最初のテンプレートを 2 番目のテンプレートにハイパーリンクする必要がありました。私のハイパーリンクは、このような 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 %]

この行は、2 番目のテンプレート (sample.tt) に正しくリンクしています。2 番目のテンプレートには、一連のテーブルが含まれています。最初のテーブルでハイパーリンクをクリックすると、そのリンクに対応するテーブルが表示されます。テンプレートのリンクに成功しました。テンプレートをリンクする目的でも、コントローラー (gene.pm) にサブルーチンを作成しました。私は自分の目標を達成する上で問題に直面しています。2 番目のテンプレート (sample.tt) の html 部分は正常に機能していますが、テンプレート ツールキットは機能していません。URL の変更は確認できますが、ページには反映されません。

以下は、2 番目のテンプレートのサブルーチンです。

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

 }

質問が明確でない場合は、お知らせください...私はそれを明確にする義務があります..

前もって感謝します..

4

1 に答える 1

0

現在処理中のテンプレートに別のテンプレートを追加することは可能ですが、ユーザーの操作はできませPROCESSん。INCLUDEあなたの目的は、要約テーブルと、最初のテーブルからの選択に続いて結果がロードされた 2 番目のテーブルとの間に「ライブ」リンクを作成することだと思いますか? あなたの質問からは完全には明らかではありません。

しかし、私の理解が正しければ、(少なくとも) 2 つのことのいずれかを行う必要があります。

  1. すべての結果を一連のテーブルにロードし、ID と CSS クラスを各テーブルに追加して、そのタイプを示します。jQuery (または同様のもの) を使用して、すべてを非表示にし、集計テーブルをクリックして関連するテーブルを表示します。これは、結果のボリュームがそれほど多くない場合に機能し、AJAX を理解する必要がないことを意味します。(すべての結果を 1 つのテーブルにまとめ、CSS クラスを使用して型を識別することもできます。)
  2. 返される結果を識別するために必要なパラメーターを受け取り、それらを JSON 配列として返す Catalyst アクションを記述します。呼び出し関数は、テーブルのレイアウトを担当します。jQuery、AJAX、Javascript 全般に慣れている場合、またはすべての結果のボリュームが法外な場合を除き、これはお勧めしません。

#2と言いましたが、とにかくすべての結果がすでに隠されているようです。それらがどのようにリンクされているかはあまり明確ではありません。(このデータは、テンプレート側で plots 配列を使用してデコードするのではなく、Catalyst 側で正規化する必要があると思わずにはいられません。) したがって、オプション #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これ以上説明できるほど明確ではありません。

于 2012-07-06T08:27:28.640 に答える