0

*編集/完成したソリューション/作業コード

だから、これは私の友人が私が思いついたものです。

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-> item ...も、機能していないPHP変数からデータを取得しようとしていました。したがって、これらの変数の値が非表示の入力フォームに配置され、getObjectByIdを介してそれらを取得することに対抗します。

私の友人が述べたように、これが最もエレガントな解決策なのか洗練された解決策なのかわかりません...しかし、それはトリックを実行し、その目的を果たします。

しかし、誰かがこれを達成するためのより良い「正しい」方法を持っているなら、私はすべての耳です:)

助けてくれてありがとう@jack!そして、将来この主題に貢献する他の誰か。

-元の投稿-

PHPとJoomlaとK2についてまだ学んでいます。fb:commentsを使用してコメントが作成されたときに、特定の作成者に電子メールを受信させる方法を理解しようと、何日も座っていました。

これまでのところ良い... FB.event.subscribecomment.createユーザーからのアクションなしで行動する

現在、欠落しているのは、変数「$ item->author->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->author->nameを機能させる方法がわかりません。名前が何であるかを確認する必要があるため(生成されたページに表示されているため、何らかの方法で使用できる必要があります)、送信先の電子メールを指定します。

これがすでに尋ねられているかどうかはわかりませんが、ここで始めるために何を検索すればよいかさえわかりません。これを解決するのが難しいとは想像できません(何を変更する必要があるかを知っているだけの場合)。:)

4

1 に答える 1

3

ajax呼び出しのパラメーターとして作成者名を渡してみることができます。これらの線に沿った何か:

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

authorName次に、sendmailスクリプトで、渡されたパラメーターにアクセスできるはずです...

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。簡単な場合とそうでない場合があります。「ajaxを介して外部PHPスクリプトにパラメーターを渡す」などの方法で詳細情報を検索できます。

また、jQueryajaxのリファレンスもあります

于 2013-02-21T00:28:49.983 に答える