来自外部文件的PHP变量?

时间:2013-02-20 23:49:19

标签: php facebook variables if-statement joomla-k2

*编辑/完成解决方案/工作代码

所以,这是我的一个朋友帮我提出的。

以下是我在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);
?>

原来,有一个简单的原因它无法运行...... JavaScript似乎无法处理PHP!

所以“do_stuff.php”(之前名为sendmail.php)从未使用echo JURI :: base();执行。

尽管如此。 var = $ this-&gt; item ...也试图从PHP变量中获取数据,这些数据无法正常工作。因此,要解决那些放入隐藏输入形式的变量的值,以通过getObjectById检索它们。

就像我的朋友所说的那样,不知道这是否是最优雅或最复杂的解决方案......但它可以解决这个问题并填补它的目的。

然而,如果某人有更好的“正确”方法来实现这一目标,我会全力以赴:)

谢谢@jack的帮助!还有其他人在将来为这个主题做出贡献。

- 原始发布 -

还在学习PHP和Joomla和K2。一直坐在upp上几天试图找出当我使用fb:comments进行评论时,我可以让特定作者收到电子邮件。

到目前为止一直很好...... FB.event.subscribe comment.create acting without action from user

现在,唯一缺少的是对变量“$ item-&gt; author-&gt; name”的推荐。因为这可以在我正在调用sendmail.php的原始文件(item.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);
?>

我不知道如何让$ item-&gt; author-&gt;名称起作用。因为我需要确保它以某种方式检查以查看名称是什么(因为它在生成的页面上显示我必须能够以某种方式使用它)来指定要发送到哪个电子邮件。

我不知道是否已经问过这个问题,但我甚至不知道该搜索什么让我从这里开始。我无法想象这将难以解决(如果你只知道你需要改变什么)。 :)

1 个答案:

答案 0 :(得分:3)

您可以尝试将作者姓名作为参数传递给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特定方式来实现这一目标。

编辑:这是使用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);
?>

这是未经测试的,但应该给你一个想法。由于您使用Joomla,您还应该查看Joomla的com_mailto组件,它可能会或可能不会更容易。您可以使用&#34;通过ajax&#34;将参数传递给外部PHP脚本来搜索更多信息。或类似的东西。

另外,这里是jQuery ajax

的参考