質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Smarty

Smartyは、PHPアプリケーションで使用されるテンプレートエンジンです。

Q&A

解決済

1回答

2050閲覧

smartyのテンプレートにおけるjQueryの利用

dcf

総合スコア20

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Smarty

Smartyは、PHPアプリケーションで使用されるテンプレートエンジンです。

0グッド

1クリップ

投稿2019/06/03 10:30

編集2019/06/04 04:46

前提・実現したいこと

Smartyのtplファイルに記述したJavascriptのコードを機能させたいです

発生している問題・エラーメッセージ

javascriptが動作しません
全く同じコードを一つのファイル内に記述した際には問題なく動作していましたが、smaryでPHPとhtmlに分離したところ動作しなくなってしまいました
また、エラーログを確認したところ

File does not exist:絶対パス

のようなエラーログが確認されました

該当のソースコード

javascript以外の部分は今回関係ないので記述しておりません
簡易掲示板の削除ボタンを押すと、警告メッセージが出るというコードです

tpl

1{* Smarty *} 2<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 3<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"> 4<head> 5 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 6 <title>仮</title> 7</head> 8<body> 9 10 <script language="JavaScript" type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"> 11 12 $(function () { 13 $('#submit').submit(function () { 14 return confirm("本当に削除してもよろしいですか?"); 15 }); 16 }) 17 18 </script> 19 20</body> 21</html>

Smarty導入部分は以下のようなコードになっています

PHP

1define('SMARTY_DIR', '絶対パス'); 2require_once(SMARTY_DIR . 'Smarty.class.php'); 3$smarty = new SmartyBC(); 4$smarty->php_handling = Smarty::PHP_ALLOW;

また、ブラウザから表示させた該当部分のコードは以下の通りです

イメージ説明

試したこと

smartyの公式サイト等で{literal}{/literal}で囲むという方法を発見し、試しましたが解決しませんでした。具体的には以下の2通りで試しましたが、いずれも機能しませんでした。

tpl

1<script language="JavaScript" type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"> 2 {literal} 3 $(function () { 4 $('#submit').submit(function () { 5 return confirm("本当に削除してもよろしいですか?"); 6 }); 7 }) 8 {/literal} 9</script>

tpl

1{literal} 2<script language="JavaScript" type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"> 3 $(function () { 4 $('#submit').submit(function () { 5 return confirm("本当に削除してもよろしいですか?"); 6 }); 7 }) 8</script> 9{/literal}

補足情報(FW/ツールのバージョンなど)

バージョンは
PHP 5.2.4
smarty 3.1.33

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/06/03 12:17

PHP5.2というのが非常に危険なにおいがしますが、リテラルはどのように入れられたのでしょうか。
dcf

2019/06/03 12:35

{literal} <script language="JavaScript" type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"> $(function () { $('#submit').submit(function () { return confirm("本当に削除してもよろしいですか?"); }); }) </script> {/literal} や <script language="JavaScript" type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"> {literal} $(function () { $('#submit').submit(function () { return confirm("本当に削除してもよろしいですか?"); }); }) {/literal} </script> のように用いましたが、いずれも機能しませんでした 課題として課されているため、phpのバージョンは変更できない前提としてお願い致します
m.ts10806

2019/06/03 12:41

質問は編集できるので適宜ご対応いただければと。 特にコードは、コメント欄ではマークダウン使えませんので。 あと念のためPHPでSmarty呼び出しているところも記載いただけたらと。 ※さすがにPHPが古すぎてこちらでは試せませんが・・ またエラーログご確認ください。Smarty動いてなかったらPHPのエラーログ出ているはずなので
tetsunosuke

2019/06/04 01:10

出ているメッセージは本当に File does not exist:絶対パス ですか? File does not exist:絶対パスSmarty.class.php とかではないですか? 画面には何も出ていないのでしょうか?それとも、HTMLは出ているがJSが動かないという話なのでしょうか。 画面に何も出ていないのであれば ini_set('display_errors', "1"); をコードに加えたりして、エラーの詳細が見えるようにすると良いと思います。
dcf

2019/06/04 01:55

File does not exist:実行したphpファイルのあるディレクトリへの絶対パス/0  refer:実行したphpファイルのURL となっています HTMLもPHPも正常に動作していてjQueryのコードの部分のみが動作していないという状態です
tetsunosuke

2019/06/04 02:34

なるほど となると、画面に表示されているHTMLのソース(テンプレートではなくPHPが出力したソース)をご提示いただくとわかるかもしれません。また、JavaScriptのエラーは出ていないですか? ちなみにSmarty3では、 { については前後に空白があればliteralを使わなくても良いそうです https://www.smarty.net/docs/ja/language.function.literal.tpl
dcf

2019/06/04 04:48

エラーログにはJavaScriptのエラーは出ていませんでした また、{ の前後に空白を入れてみましたが、動作はしませんでした
tetsunosuke

2019/06/04 05:11

なるほど。 提示されているコードにformがないようですが、submitイベントはどのようにして発生するのでしょうか。 確かにJavaScriptは適切にテンプレートから処理されているように見えますね。 submit を click に変えたりして、発火するイベントを適切にすれば動作は確認できると思います。 $(function () {  alert("確かに動いている"); // console.logでももちろん良い  $('#submit').submit(function () {   // 省略  }): }); こうしてみても、JavaScriptが実行されているかどうかは判別できそうですね。
dcf

2019/06/04 05:33

<h1>削除用フォーム</h1> <form action="phpのファイル名" method="post"> <div>削除番号</div> <input type="text" name="deletenumber"><br></br> <div>パスワード</div> <input type ="password" name="deletepass" ><br></br> <input type="submit" name="btn2" value="削除する"> </form> このようなフォームのボタンを押したとき(Enterキーでも同様)にアラートが表示されるようになっています Smartyを用いる前の段階では全く同じコードにも関わらず実行できていてたため、submitやclickの問題は無いと考えられます また、提示していただいたコードは今までjavascriptを記述していた部分に置換すればよろしいでしょうか?
tetsunosuke

2019/06/04 05:35

提示したのはそうです。 同じコードで実行できていたんですか・・・?おかしいですね・・・。 $('#submit').submit と書いてあって動くということは、id="submit" という記述があるはずなのですが...
guest

回答1

0

自己解決

tpl

1<h1>削除用フォーム</h1> 2 <form action="phpファイル名" method="post" onsubmit="check()"> 3 <div>削除番号</div> 4 <input type="text" name="deletenumber"><br></br> 5 <div>パスワード</div> 6 <input type ="password" name="deletepass" ><br></br> 7 <input type="submit" name="btn2" value="削除する"> 8 </form> 9 10<script language="JavaScript" type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> 11 <script> 12 function check() { 13 return confirm("本当に削除してもよろしいですか?"); 14 } 15</script>

このようにformにonsubmitを追加することによって無事に動作させることが出来ました
アドバイスしていただいた皆様、ありがとうございました

投稿2019/06/04 06:24

dcf

総合スコア20

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問