PHP-переменная из внешнего файла?

* РЕДАКТИРОВАТЬ / ЗАВЕРШЕНО РЕШЕНИЕ / РАБОЧИЙ КОД

Так вот, мой друг помог мне придумать.

Вот часть, которую я использую в файле K2 "items.php":

<div class="fb-comments" data-href="<?php echo JURI::current(); ?>" data-num-posts="8" notify="true" data-width="580"></div> <input id="authname" style="display: none;" type="text" value="<?php echo $this->item->author->name; ?>" /> <input id="authmail" style="display: none;" type="text" value="<?php echo $this->item->author->email; ?>" /> <input id="link" style="display: none;" type="text" value="<?php echo JURI::current(); ?>" /> <script> window.fbAsyncInit = function() { FB.Event.subscribe('comment.create', function (response) { var commentQuery = FB.Data.query("SELECT text, fromid FROM comment WHERE post_fbid='" + response.commentID + "' AND object_id IN (SELECT comments_fbid FROM link_stat WHERE url='" + response.href + "')"); var userQuery = FB.Data.query("SELECT name FROM user WHERE uid in (select fromid from {0})", commentQuery); FB.Data.waitOn([commentQuery, userQuery], function () { var commentRow = commentQuery.value[0]; var userRow = userQuery.value[0]; console.log(userRow.name + " (id: " + commentRow.fromid + ") posted the comment: " + commentRow.text); trackcomments(response['commentID'], response['href'], 'create', commentRow.text, userRow.name, commentRow.fromid); }); }); }; function trackcomments(_commentid, _address, _action, _commentMessage, _userName, _userId) { var authname = document.getElementById('authname').value; var authmail = document.getElementById('authmail').value; var link = document.getElementById('link').value; $.ajax({ type: 'POST', url: 'http://mydomain.com/dostuff.php', data: {'commentMessage': _commentMessage, 'userName': _userName, 'authname': authname, 'authmail': authmail, 'link': link}, cache: false }); }; </script> 

И это do_stuff.php:

 <?php //Handle some weird letters and stuff setlocale(LC_TIME, 'swedish'); //creating an $author variable and populating it from $_POST $author = $_POST['authname']; $authoremail = $_POST['authmail']; $link = $_POST['link']; $commentMessage = $_POST['commentMessage']; $userName = $_POST['userName']; $date = strftime('%A %e %b %Y %H.%M', time()); //getting author email $to = $authoremail; //subject of email $subject = "New comment posted on mydmomain.com"; //email content $message = "On $date $userName wrote\n\n$commentMessage\n\non your entry $link#comments\n\nUse the above link to answer on the comment."; //who the mail is from $from = "admin@mydomain.com"; //header $headers = "From:" . $from; //send the email mail($to,$subject,$message,$headers); ?> при <?php //Handle some weird letters and stuff setlocale(LC_TIME, 'swedish'); //creating an $author variable and populating it from $_POST $author = $_POST['authname']; $authoremail = $_POST['authmail']; $link = $_POST['link']; $commentMessage = $_POST['commentMessage']; $userName = $_POST['userName']; $date = strftime('%A %e %b %Y %H.%M', time()); //getting author email $to = $authoremail; //subject of email $subject = "New comment posted on mydmomain.com"; //email content $message = "On $date $userName wrote\n\n$commentMessage\n\non your entry $link#comments\n\nUse the above link to answer on the comment."; //who the mail is from $from = "admin@mydomain.com"; //header $headers = "From:" . $from; //send the email mail($to,$subject,$message,$headers); ?> 

Оказывается, была простая причина, по которой он не работал … JavaScript, похоже, не обрабатывает PHP!

Таким образом, «do_stuff.php» (ранее названный sendmail.php) никогда не выполнялся с эхом JURI :: base () ;.

Даже тогда. Параметр var = $ this-> … также пытался получить данные из переменных PHP, которые не работали. Таким образом, чтобы бороться с тем, что значения этих переменных помещаются в скрытые формы ввода, чтобы получить их через getObjectById.

Как сказал мой друг, не знаю, является ли это самым изящным или сложным решением … но оно делает трюк и наполняет его целью.

Однако, если у кого-то есть более «правильный» способ достижения этого, я все уши 🙂

Спасибо @jack за вашу помощь! И кто-то еще вносит свой вклад в эту тему в будущем.

– ОРИГИНАЛЬНАЯ ПОЧТА –

Все еще узнаем о PHP и Joomla и K2. В течение нескольких дней я сидел upp, пытаясь выяснить, как я могу предложить конкретным авторам письма, когда комментарии сделаны с помощью fb: comments.

Пока что так хорошо … FB.event.subscribe comment.create действует без действий от пользователя

Теперь единственное, чего не хватает, это ссылка на переменную «$ item-> author-> name». Поскольку это можно использовать в исходном файле (item.php), где я вызываю sendmail.php

 <script> window.fbAsyncInit = function() { /* All the events registered */ FB.Event.subscribe('comment.create', function (response) { $.get('<?php echo JURI::base(); ?>sendmail.php'); }); }; </script> 

и это файл «sendmail.php»

 <?php if ($item->author->name == "Firstname1 Lastname1"){ $to = "author1@mydomain.com"; }else if ($item->author->name == "Firstname2 Lastname2"){ $to = "author2@mydomain.com"; }; $subject = "New comment"; $message = "A new comments has been made."; $from = "admin@mydomain.com"; $headers = "From:" . $from; mail($to,$subject,$message,$headers); ?> при <?php if ($item->author->name == "Firstname1 Lastname1"){ $to = "author1@mydomain.com"; }else if ($item->author->name == "Firstname2 Lastname2"){ $to = "author2@mydomain.com"; }; $subject = "New comment"; $message = "A new comments has been made."; $from = "admin@mydomain.com"; $headers = "From:" . $from; mail($to,$subject,$message,$headers); ?> 

Я не знаю, как я могу получить имя $ item-> author->. Поскольку мне нужно убедиться, что он каким-то образом проверяет, что такое имя (поскольку оно отображается на сгенерированной странице, я должен как-то его использовать), чтобы указать, какое письмо отправить TO.

Я понятия не имею, было ли это уже задано, но я даже не знаю, что искать, чтобы начать меня здесь. Я не могу представить, что это было бы трудно решить (если вы только знаете, что вам нужно изменить). 🙂

Вы можете попробовать передать имя автора в качестве параметра в своем вызове ajax. Что-то в этом роде:

 FB.Event.subscribe('comment.create', function (response) { var name = $item->author->name; $.get('<?php echo JURI::base(); ?>sendmail.php'), new {'authorName': name}; }); 

Затем в вашем скрипте sendmail вы сможете получить доступ к переданному параметру authorName

 if (authorName == "Firstname1 Lastname1"){... 

Вы также можете использовать $ .post для отправки параметра скрипту sendmail.

Примечание. Это не проверено и из памяти, но, надеюсь, оно укажет вам в правильном направлении. Прошло некоторое время с тех пор, как я в последний раз работал с Joomla, и, скорее всего, это лучший способ для Joomla для этого.

EDIT: вот пример использования POST для передачи переменной скрипту sendmail:

 FB.Event.subscribe('comment.create', function (response) { var name = $item->author->name; $.ajax({ type: "POST", url:'<?php echo JURI::base(); ?>sendmail.php'), data: authorName, cache: false, }); }); 

… и в вашем файле sendmail.php:

 <?php //creating an $author variable and populating it from $_POST $author = $_POST['authorName']; if ($author == "Firstname1 Lastname1"){ $to = "author1@mydomain.com"; }else if ($author == "Firstname2 Lastname2"){ $to = "author2@mydomain.com"; }; $subject = "New comment"; $message = "A new comments has been made."; $from = "admin@mydomain.com"; $headers = "From:" . $from; mail($to,$subject,$message,$headers); ?> при <?php //creating an $author variable and populating it from $_POST $author = $_POST['authorName']; if ($author == "Firstname1 Lastname1"){ $to = "author1@mydomain.com"; }else if ($author == "Firstname2 Lastname2"){ $to = "author2@mydomain.com"; }; $subject = "New comment"; $message = "A new comments has been made."; $from = "admin@mydomain.com"; $headers = "From:" . $from; mail($to,$subject,$message,$headers); ?> 

Опять же это непроверено, но должно дать вам представление. Поскольку вы используете Joomla, вы также должны com_mailto компонент com_mailto Joomla, это может быть или не быть проще. Вы можете искать дополнительную информацию с параметром «pass» для внешнего скрипта PHP через ajax »или что-то в этом роде.

Кроме того, вот ссылка для jQuery ajax