2012-07-05 3 views
1

나는 데이터베이스를위한 웹 페이지를 만들기 위해 Catalyst MVC 프레임 워크를 만들고있다. 나는 풀 타임 프로그래머가 아니다. 하지만 나는 펄과 자바의 기초를 알고있다. 나는 생물 학자이다. 테이블이있는 템플릿 파일 (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> 

안녕하세요, 고맙습니다. 답장을 보내 주셔서 대단히 죄송합니다. 당신이 내 목표를 이해 했으므로 요약 테이블과 결과가로드 된 두 번째 테이블 사이에 '라이브'링크가있는 것입니다. 어떻게 든 템플릿을 다른 방법으로 연결했습니다. 첫 번째 템플릿에서 두 번째 템플릿으로 하이퍼 링크해야했습니다. 내 하이퍼 링크는 이와 비슷한 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

PROCESS 또는 INCLUDE 현재 처리중인 템플릿 중 하나만 가능하지만 사용자 상호 작용은 허용되지 않습니다. 나는 당신의 목표가 요약 테이블과 첫 번째 테이블에서 몇 가지 선택에 따라 결과가로드 된 두 번째 테이블 사이에 '라이브'링크를 갖는 것입니다. 귀하의 질문에서 완전히 명확하지 않습니다.

그러나 내가 제대로 이해한다면, 당신은 중 하나를 수행해야합니다 (적어도) 두 가지 : 일련의 테이블에

  1. 로드 ALL 결과, 각 테이블에 ID와 CSS 클래스를 추가 유형을 나타냅니다. jQuery (또는 유사)를 사용하여 모두 숨기고 요약 테이블을 클릭하여 관련 테이블을 표시하십시오. 결과 볼륨이 그렇게 크지 않으면 AJAX를 사용할 필요가 없다는 것을 의미합니다. (모든 결과를 단일 테이블에 넣고 CSS 클래스를 사용하여 유형을 식별 할 수도 있습니다.)
  2. 반환 할 결과를 식별하는 데 필요한 매개 변수를받는 Catalyst 액션 작성 및 JSON 배열로 반환 . 호출 함수는 테이블 레이아웃을 담당합니다. jQuery, AJAX 및 Javascript를 사용하는 것이 일반적이지 않거나 모든 결과의 양이 많은 경우를 제외하고는 권장하지 않습니다.

# 2로되어있어 이미 어쨌든 모든 결과가 숨겨져있는 것처럼 보입니다. 그들이 어떻게 연결되어 있는지는 덜 명확합니다. (나는이 데이터가 템플릿 측의 플롯 배열로 디코드되지 않고 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 사이의 관계는 내가 너에게 훨씬 더 많은 것을 줄만큼 충분하지 못하다. 나는 두렵다.

+0

안녕하세요, 감사합니다. 답장을 보내 주셔서 대단히 죄송합니다. 당신이 내 목표를 이해 했으므로 요약 테이블과 결과가로드 된 두 번째 테이블 사이에 '라이브'링크가있는 것입니다. 어떻게 든 템플릿을 다른 방법으로 연결했습니다. 첫 번째 템플릿에서 두 번째 템플릿으로 하이퍼 링크해야했습니다. – user1462804