web-dev-qa-db-ja.com

Joomla-JavascriptでラップされたPHP + $ this。

これが私が持っているスクリプトです。ページ表示後にロードしようとしています。 PHP JavaScriptからのコードを実行しようとしています。必要なのは、テキストボックスコントロールでフォームを送信したユーザーのメールアドレスを取得することです。

var originator_email = document.getElementById("jform_sendto_first_step");
 originator_email.value = "<?php  echo JFactory::getUser($this->item->created_by)->get('email'); ?>"

これは私が持っているエラーです。 オブジェクトコンテキストにないときに$ thisを使用 bla bla bla。これを行う適切な方法は何ですか?

コードを含めようとしました:

<?php  echo JFactory::getUser($this->item->created_by)->get('email'); ?>

ページに直接入力すると、結果は画面に問題なくスローされます。

3
Oleg Agadjanyan

Lodderが言うように、(ブラウザーで実行される).jsファイルがPHP-サーバーで実行される)を実行することは期待できません。

これを回避する最も簡単な方法は、サーバー側でJavaScriptコードをエコーすることです。テンプレートのindex.phpに、セクションのどこかに次の行を追加します。

<script type="text/javascript">
<?php  echo JoomlaEmail = "' . JFactory::getUser($this->item->created_by)->get('email') . "';"; ?>
</script>

PHPがテンプレートファイルを実行すると、次のようにブラウザに出力されます。

<script type="text/javascript">
JoomlaEmail = "[email protected]";
</script>

これで、元のJavaScriptコードで次のことができるはずです。

var originator_email = document.getElementById("jform_sendto_first_step");
originator_email.value = JoomlaEmail;

この方法で物事を行うと、Javascriptsグローバル名前空間を汚染しますが、これは実際に行われたことではありませんが、このメソッドを使用して、PHPファイルにカプセル化されたJSコードを書き出すことができるはずです。関数内。

<script type="text/javascript">
(function () {
    var originator_email = document.getElementById("jform_sendto_first_step");
    originator_email.value = "<?php  echo JFactory::getUser($this->item->created_by)->get('email'); ?>"
})();
</script>
2
Rob Clayburn