una - Variable de PHP desde un archivo externo?
recibir variables get php (1)
* EDITAR / SOLUCIÓN ACABADA / CÓDIGO DE TRABAJO
Entonces, esto es lo que un amigo mío me ayudó a pensar.
Aquí está la parte que uso en mi archivo 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>
Y este es el 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 = "[email protected]";
//header
$headers = "From:" . $from;
//send the email
mail($to,$subject,$message,$headers);
?>
Resulta que había una razón simple por la que no funcionaba ... ¡JavaScript no parece manejar PHP!
Así que el "do_stuff.php" (antes llamado sendmail.php) nunca se ejecutó con el echo JURI :: base () ;.
Incluso entonces sin embargo. El elemento var = $ this-> ... también intentaba obtener datos de variables de PHP que no funcionaban. Entonces, para combatir eso, los valores de esas variables se ponen en formularios de entrada ocultos para recuperarlos a través de getObjectById.
Como dijo mi amigo, no sé si esta es la solución más elegante o sofisticada ... pero hace el truco y llena su propósito.
Sin embargo, si alguien tiene una forma mejor y más "correcta" de lograr esto, soy todo oídos :)
Gracias @jack por tu ayuda! Y a cualquier otra persona que contribuya a este tema en el futuro.
- POST ORIGINAL -
Todavía estoy aprendiendo sobre PHP y Joomla y K2. He estado sentado durante varios días tratando de descubrir cómo puedo lograr que determinados autores reciban correos electrónicos cuando los comentarios se hacen usando fb: comments.
Hasta ahora todo bien ... FB.event.subscribe comment.create actuando sin acción del usuario
Ahora, lo único que falta son los referens a la variable "$ item-> author-> name". Como esto se puede usar en el archivo original (item.php) donde llamo para 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>
y este es el archivo "sendmail.php"
<?php
if ($item->author->name == "Firstname1 Lastname1"){
$to = "[email protected]";
}else if ($item->author->name == "Firstname2 Lastname2"){
$to = "[email protected]";
};
$subject = "New comment";
$message = "A new comments has been made.";
$from = "[email protected]";
$headers = "From:" . $from;
mail($to,$subject,$message,$headers);
?>
No sé cómo puedo hacer que el $ item-> author-> name funcione. Como necesito asegurarme de que de alguna manera compruebo para ver cuál es el nombre (ya que se muestra en la página generada, tengo que poder usarlo de alguna manera) para especificar qué correo electrónico debo enviar a.
No tengo idea si esto ya se ha preguntado, pero ni siquiera sé qué buscar para comenzar aquí. No puedo imaginar que esto sea difícil de resolver (si solo sabes lo que necesitas cambiar). :)
Puedes intentar pasar el nombre del autor como parámetro en tu llamada ajax. Algo en esta línea:
FB.Event.subscribe(''comment.create'', function (response) {
var name = $item->author->name;
$.get(''<?php echo JURI::base(); ?>sendmail.php''), new {''authorName'': name};
});
Luego, en su script de sendmail, debería poder acceder al parámetro authorName
pasado ...
if (authorName == "Firstname1 Lastname1"){...
También podría usar $ .post para enviar el parámetro al script de sendmail.
Nota: Esto no se ha probado y está guardado en la memoria, pero con suerte lo orientará en la dirección correcta. También ha pasado un tiempo desde la última vez que trabajé con Joomla, y es probable que haya una mejor manera específica de hacerlo para Joomla.
EDITAR: aquí hay un ejemplo del uso de POST para pasar la variable al script de 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,
});
});
... y en tu archivo sendmail.php:
<?php
//creating an $author variable and populating it from $_POST
$author = $_POST[''authorName''];
if ($author == "Firstname1 Lastname1"){
$to = "[email protected]";
}else if ($author == "Firstname2 Lastname2"){
$to = "[email protected]";
};
$subject = "New comment";
$message = "A new comments has been made.";
$from = "[email protected]";
$headers = "From:" . $from;
mail($to,$subject,$message,$headers);
?>
De nuevo, esto no se ha probado, pero debería darle una idea. Dado que estás usando Joomla, también debes buscar en el componente com_mailto
de Joomla, puede o no ser más fácil. Puede buscar más información con "pasar el parámetro al script PHP externo a través de ajax" o algo similar.
Además, aquí hay una referencia para jQuery ajax