2013-05-31 13 views
5

質問を詳しく説明しましょう。私はPHPとsmartyを使用しています。 私はquery-stringから値op=backを得ています。しかし、これはPHPファイルが実行されるたびに起こることはないので、op=backが値であれば、特定のリンク上でクリックイベントを開始する必要があります。今Smartyのファイルからのコードスニペットは、以下のようにされてクエリ文字列で受け取った値に応じてjQueryコードを実行する方法は?

<?php 
    include_once("includes/teacher-application-header.php"); 

    prepare_request(); 
    $request = empty($_GET) ? $_POST : $_GET ; 
    $op = $request['op']; 

    $objTeachClassSub = new TeacherClassesSubjects(); 

    global $teacher_profile_from_session; 

    $teacher_id = $teacher_profile_from_session['TEACHER_ID']; 

    $teacher_classes_subjects = $objTeachClassSub->GetClassSubjectMappingsbyTeacherId($teacher_id); 

$smarty->assign('teacher_classes_subjects', $teacher_classes_subjects); 

    $smarty->assign("op",$op);   
    $smarty->display("teacher-details.tpl");  
?> 

:今、私が達成したいものを上記のスマートでjQueryのコードを書くことです

{literal} 
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
<script type="text/javascript"> 
</script> 
{/literal} 
<table width="100%" border="0" align="center" cellpadding="0" cellspacing="0" > 
    <tr> 
     <td align="left" valign="top"> 
      <h3>Teacher Details</h3> 
     </td> 
    </tr> 
</table> 
<table width="99%" border="0" cellpadding="0" cellspacing="0" class="manage_box" > 
    <tr> 
     <td> 
      <table cellpadding="0" cellspacing="0" border="1" width="100%"> 
     <tr> 
      <td width="25%"> 
      {if $teacher_classes_subjects} 
       {foreach from=$teacher_classes_subjects item="classes_subjects"} 
       <b><a href="#" id="{$classes_subjects.class_id}">{$classes_subjects.class_name}</a></b><br /> 
       {if $classes_subjects.class_subjects} 
       <div id="class_subjects_{$classes_subjects.class_id}"> 
        {foreach from=$classes_subjects.class_subjects item="class_subjects"} 
         <i><a id ="back" href="chapter_details.php?class_id={$classes_subjects.class_id}&cs_map_id={$class_subjects.cs_map_id}">{$class_subjects.subject_name}</a></i><br /> 
        {/foreach} 
       </div> 
       <br /> 
       {/if} 
       {/foreach} 
      {/if} 
      </td> 
      <td width="75%"> 
      {if $chapter_details} 
      <ul> 
      {foreach from=$chapter_details item=chapter} 
      <li><a href="chapter_details.php?op=get_chapter_theory&chapter_id={$chapter.chapter_id}&class_id={$class_id}&cs_map_id={$cs_map_id}&chapter_title={$chapter.chapter_title}">{$chapter.chapter_title}</a></li> 
      {/foreach} 
      </ul> 
      {/if} 

      {include file=$file_to_show} 
      </td> aly what is 
     </tr> 
     </table> 
     </td> 
    <td align="left" id="subject_container" valign="top"> 
    </td> 
    <td align="left" id="chapter_container" valign="top"> 
    </td> 
    </tr> 
</table> 

私のPHPはファイルのコードスニペットを以下に示します。 op値が返された場合に実行されるテンプレートファイル(つまり、{op==back})。 op=backクリックイベントには、次のリンクに火を取得する必要があるときに期待されている実際に何 は次のとおりです。

<a id ="back" href="chapter_details.php?class_id={$classes_subjects.class_id}&cs_map_id={$class_subjects.cs_map_id}">{$class_subjects.subject_name}</a> 

誰もがこの機能を実現する方法を私に説明できますか?前もって感謝します。

答えて

1

あなたはopは==バックあなただけの何かをエコーする前に、これを行うことを忘れないでください

if(isset($_GET['op']) && $_GET['op'] == 'back'){ 
     header('location: yourpath/youurl.php'); 
} 

あなたの中にPHPコードを、それをリダイレクトする必要があるときに、特定のサイトへ移動します。

あなたはjQueryを使用している場合は、このオプションは単にドキュメント準備および$(「#バック」)トリガー(「クリック」)との条件付きでスクリプトを印刷する設定されているクリックをトリガしたい場合:

を。あなたがe.preventDefaultのようなものを使用していない限り、ブラウザを行いますそのリンクをクリックする
//$go = (isset($_GET['op']) && $_GET['op'] == 'back'); 
{if $go} 
<script> 
    $(document).ready(function(){ 
     $('#back').trigger('click'); 
    }); 
</script> 
{/if} 

EDIT

は、別のページになりました()。あなたがしていない場合は、私が提案した最初のソリューションを使用することをお勧めします。 クライアントにリダイレクトする要求が必要な場合は、何らかの理由でリダイレクトしてください。そうしないと、別の解決方法が使用されます。

は、それが

+0

リンク上でクリックイベントを発生させたいだけですが、どのURLにもリダイレクトしたくありません。リンクをクリックすると、リンクをクリックすると、クエリ文字列の形で値が渡されます。だからあなたのソリューションはこの問題にはあまり適していないようです。これ以外の良いアイデアはありますか? – PHPLover

0

は、私はあなたがヘッダ

<?php 
    if($_GET['op'] == "back"){ 
     ?> 
    <script> 
     $(document).ready(function(){ 
      $('#back').trigger('click'); 
     }); 
    </script> 
     <?php 
     } 
?> 

に入れた場合、これは動作するはずと思いますが、あなたのページがロードされた後、あなたがこれを行う必要がある場合completlyあなたはjQueryのでタイマーを設定し、これを実行することができ役に立てば幸い後でJqueryスクリプトが1秒になる可能性があります

+0

または関数を作成し、その関数をボディロードで呼び出します – Kam

1

あなたの最良の選択肢は、テンプレートの隠れたhtml入力に設定することです。ドキュメントのJavaスクリプトでhtml入力の値を確認してからhrefを変更してくださいあなたのリンクの属性

0

pure JSで関数を作成して、パラメータのクエリ文字列値を取得し、それを使用してリンククリックを発生させるかどうかを決定できます。

このような何か:

function getQueryStringParameter(name) { 

    var match = RegExp('[?&]' + name + '=([^&]*)').exec(window.location.search); 
    return match && decodeURIComponent(match[1].replace(/\+/g, ' ')); 
} 

var n = getQueryStringParameter('op'); 
if(n == 'back'){ 
    $('#back').trigger('click'); 
} 

はそれが役に立てば幸い。

関連する問題