. Recomendar Sitio con PHP

Tengo un problema con el script de "Recomender v1.2", el cual sirve para recomendar sitios...
Lo que sucede es que el script permite poner una dirección fija para que los visitantes recomienden ( la dirección podría ser el HomePage del Web )... Pero yo quiero usar este método en un blog, y que por lo tanto puedan enviar la dirección del post que deseen...
En el blog que utilizo ( B2Evolution), hay una etiqueta que es esta: "<?php $Item->permalink() ?>" que en la red, se transforma al link estático del post...
Y en el Script para recomendar, me pide que ponga la dirección de la web que quiero que se recomiende, de esta manera:
//Direccion de tu web.
$web = "www.direcciondetuweb.com";
Yo pensé en poner la etiqueta del PermaLink, pero creo que va a traer inconvenientes, ya que lo que quiero hacer es poner un link/boton/imagen en el blog, que al clikearlo, se abre una PopUp en la que tienes el formulario para recomendar el sitio, pero quizás abriéndose en un POPUP, no tome la dirección de la etiqueta ( <? Php $Item->permalink()?> )
Datos:
Aqui te dejo la dirección para descargarse el Script del "Recomender v1.2" : http://www.phpadictos.com/descargas/index.php?action=file&id=3
Y esta es la dirección del Blog: http://www.hepatitisc2000.com/blog
Respuesta
1
Lo primero, no he conseguido entrar en el Blog (http://www.hepatitisc2000.com/blog).
Por lo que he podido ver, Recomender inserta un formulario en la página que quieres recomendar, por lo tanto, si ahí usas <? php $Item->permalink()?> Obtendrás un enlace a esa página. Pero no quieres un enlace sino el nombre de esa página, o de ese post en concreto. Busca una función en B2Evolution que te escriba sólo esa dirección. Quizá puedas usar permalink() pero primero tienes que convertir ese texto con alguna función como por ejemplo htmlentities(). Aunque no hayas entendido esto, sigue leyendo.
Luego modificas el archivo recomender.php para añadirle la siguiente línea:
<?php
echo "<input type=hidden name=web value='". htmlentities($Item->permalink(), ENT_QUOTES) ."'>";
?>
No se si va a funcionar exactamente tal cual está porque desconozco como funciona permalink(). Lo que intento hacer es usar el texto que forma el enlace que crea esa función para convertir los caracteres extraños como puedan ser comillas y etiquetas html, y luego pasarle toda esa cadena de texto como la dirección que quieres recomendar.
Luego en eniado.php en vez de usar una dirección fija, usa $web = $_POST['web']; Esto coge el valor del campo oculto del formulario que acabas de crear y lo asigna a la variable $web.
Es la primera idea que se ha ocurrido tras revisr un poco los scripts.
En resumen: crea un campo oculto en el formulario de recomendación que contenga la dirección que quieres recomendar. Y usa esa dirección en el mail que se envía.
Hola, tengo un problema al insertar la linea que me decís, en el archivo recomender.php, me dice que esa linea da un error...
Quizá la este insertando mal..
La dirección que te di por si deseas entrar al blog, es correcta, pero en todo caso intenta con esta dirección: http://www.hepatitisc2000.com.ar/blog/index.php
A continuación te dejo parte del código de una de las páginas PHP que tiene el blog, donde parece indicar como genera los Permalinks
/**
* generate permalink for item
*
* {@internal Item::gen_permalink(-)}}
*
* @todo archives modes in clean mode
*
* @param string 'urltitle', 'pid', 'archive#id' or 'archive#title'
* @param string url to use
*/
function gen_permalink( $mode = '', $blogurl = '', $force_single = false )
{
global $DB, $BlogCache, $cacheweekly, $Settings;
if( empty( $mode ) )
$mode = $Settings->get( 'permalink_type' );
if( $force_single && (strpos( $mode, 'archive' ) !== false) )
{ // Comments cannot be displayed in archive mode
$mode = 'pid';
}
if( empty( $blogurl ) )
{
$current_Blog = $BlogCache->get_by_ID( $this->blog_ID );
$blogurl = $current_Blog->gen_blogurl();
}
$post_date = $this->issue_date;
switch( $mode )
{
case 'archive#id':
// Link to an archive page:
$dest_type = $Settings->get('archive_mode');
$anchor = $this->ID;
$urltail = 'p'.$this->ID;
break;
case 'archive#title':
// Link to an archive page:
$dest_type = $Settings->get('archive_mode');
$anchor = preg_replace('/[^a-zA-Z0-9_.-]/', '_', $this->title );
$urltail = 'p'.$this->ID;
break;
case 'pid':
// Link to individual post:
$dest_type = 'postbypost';
$urlparam = 'p='.$this->ID;
$urltail = 'p'.$this->ID;
break;
case 'urltitle':
default:
// Link to individual post:
$dest_type = 'postbypost';
if( !empty( $this->urltitle ) )
{
$urlparam = 'title='.$this->urltitle;
$urltail = $this->urltitle;
}
else
{
$urlparam = 'p='.$this->ID;
$urltail = 'p'.$this->ID;
}
}
if( ! $Settings->get('links_extrapath') )
{ // We reference by Query: Dirty but explicit permalinks
switch( $dest_type )
{
case 'monthly':
$permalink = url_add_param( $blogurl, 'm='.substr($post_date,0,4).substr($post_date,5,2) ).'#'.$anchor;
break;
case 'weekly':
if((!isset($cacheweekly)) || (empty($cacheweekly[$post_date])))
{
$cacheweekly[$post_date] = $DB->get_var( "SELECT WEEK('".$post_date."')" );
}
$permalink = url_add_param( $blogurl, 'm='.substr($post_date,0,4).'&w='.$cacheweekly[$post_date] ).'#'.$anchor;
break;
case 'daily':
$permalink = url_add_param( $blogurl, 'm='.substr($post_date,0,4).substr($post_date,5,2).substr($post_date,8,2) ).'#'.$anchor;
break;
case 'postbypost':
default:
$permalink = url_add_param( $blogurl, $urlparam.'&more=1&c=1&tb=1&pb=1' );
break;
}
}
else
{ // We reference by path (CLEAN permalinks!)
switch( $dest_type )
{
case 'monthly':
$permalink = url_add_tail( $blogurl, mysql2date("/Y/m", $post_date) ).'#'.$anchor;
break;
case 'weekly':
if((!isset($cacheweekly)) || (empty($cacheweekly[$post_date])))
{
$cacheweekly[$post_date] = $DB->get_var( "SELECT WEEK('".$post_date."')" );
}
$permalink = url_add_tail( $blogurl, mysql2date("/Y/", $post_date).'w'.$cacheweekly[$post_date] ).'#'.$anchor;
break;
case 'daily':
$permalink = url_add_tail( $blogurl, mysql2date("/Y/m/d", $post_date) ).'#'.$anchor;
break;
case 'postbypost':
default:
// This is THE CLEANEST available: RECOMMENDED!
$permalink = url_add_tail( $blogurl, mysql2date("/Y/m/d/", $post_date).$urltail );
break;
}
}
return $permalink;
}
/**
* Template function: display anchor for permalinks to refer to
*
* {@internal Item::anchor(-) }}
*
* @todo archives modes in clean mode
*
* @param string 'id' or 'title'
*/
function anchor( $mode = '' )
{
global $Settings;
if( empty( $mode ) )
$mode = $Settings->get( 'permalink_type' );
switch( $mode )
{
case 'archive#title': // permalink_type
case 'title': // explicit choice
$title = preg_replace( '/[^a-zA-Z0-9_.-]/', '_', $this->title );
echo '<a name="'.$title.'"></a>';
break;
case 'archive#id': // permalink_type
case 'id': // explicit choice
echo '<a name="'.$this->ID.'"></a>';
break;
case 'pid': // permalink type where we need no ID
case 'urltitle': // permalink type where we need no ID
default:
}
}
Si no funciona es por la forma de obtener el nombre de la página.
Abre el archivo Recomender.php, y colócate justo encima de la siguiente línea:
<input type="submit" value="Recomendar!" name="enviar" style="background-color: #FFFFFF; color: #000000; border: 1 solid #000000">
Ahora inserta ahí la siguiente línea:
<?php
echo "<input type=hidden name=web value='http://{$_SERVER['HTTP_HOST']}{$_SERVER['PHP_SELF']}'>";
?>
Y en el archivo enviado.php haces el cambio que habíamos comentado anteriormente:
$web = $_POST['web'];
Con esto debería ser suficiente. Pruébalo y coméntame el resultado.
Por cierto, ahora si que he podido entrar en la web con la nueva dirección. Si no pongo index.php no entra.
Hola, ya hice lo que me pedías, aunque no se si esta bien pero esta linea:
<?php
echo "<input type=hidden name=web value='http://{$_SERVER['HTTP_HOST']}{$_SERVER['PHP_SELF']}'>";
?>
La pegue a continuación de la que me habías indicado:
<input type="submit" value="Recomendar!" name="enviar" style="background-color: #FFFFFF; color: #000000; border: 1 solid #000000">
Y con esto lo que sucede es que no me llega ningún email...
Si entras al blog, podes ver que arriba de cada post hay un texto que dice "RECOMENDAR!" si haces clic podes ver, se abre un POPUP y te pide los datos, al hacer clic en enviar, parece estar todo bien, pero no llega ningún email...
Esta costando más de lo que me había parecido en un principio, pero va saliendo.
Antes me despisté por la forma en que se inserta el archivo recomender.php, y he visto que cuando abres el popup de tu página para recomendar, coge la dirección de la página de ese popup. Por tanto la solución anterior en parte no sirve.
Tienes que modificar la página donde abres ese popup. No se cómo lo abres, pero seguro que tienes algún sitio donde pones "recomender.php" para indicar que el popup debe cargar esa página. Pues tienes que sustituir "recomender.php" por
"recomender.php?
<?php
echo "http://{$_SERVER['HTTP_HOST']}{$_SERVER['PHP_SELF']}?{$_SERVER['QUERY_STRING']}";
?>
"
Con esto pasas el nombre de la página en la que está el enlace de recomendar al formulario. Luego en el formulario, en recomender.php, en vez de poner lo que dije antes, tienes que poner:
<?php echo "<input type='hidden' name='web' value='{$_SERVER['QUERY_STRING']}'>"; ?>
Te quedaría algo como:
<?php echo "<input type='hidden' name='web' value='{$_SERVER['QUERY_STRING']}'>"; ?>
<input type="submit" value="Recomendar!" name="enviar" style="background-color: #FFFFFF; color: #000000; border: 1 solid #000000">
Y el archivo enviar.php esta bien como te había dicho, la variable $web debe ser:
$web = $_POST['web'];
Las pruebas que he estado haciendo me han funcionado y envían correctamente el e-mail con la dirección correcta. Pruébalo.
Esta vez creo que es la definitiva, pero pruébalo y si algo no sale sigo con ello.
Estoy encantado de ayudarte en todo lo que pueda.
Lo malo de poner código aquí es que no respeta los espacios ni las tabulaciones. Eso puede estar produciendo el error. Si antes te funcionaba mandar emails, ahora te debería funcionar también, por lo que no creo que sea algo del servidor.
Te voy a poner aquí la página que estoy usando yo como prueba, que en tu web correspondería a cualquiera de las página con un enlace 'Recomendar':
<html>
<title> Abrir ventana para recomendar </title>
<head>
<script language="JavaScript">
<!--
var miVentana;
function AbrirVentana() {
miVentana = window.open("recomender.php?<?php
if ($_SERVER['QUERY_STRING'] != NULL ) {
echo "http://{$_SERVER['HTTP_HOST']}{$_SERVER['PHP_SELF']}?{$_SERVER['QUERY_STRING']}";
} else {
echo "http://{$_SERVER['HTTP_HOST']}{$_SERVER['PHP_SELF']}";
}
?>", 'Miventana', 'top=250, left=100, width=800, height=250, resizable=0');
}
-->
</script>
</head>
<body>
<a href="javascript:AbrirVentana();">Recomendar este sitio</a>
</body>
</html>
Algo importante: cuando ejecuto window. Open, ¿justo entre recomender.php? Y <?php cuida que no haya espacios. ¿Lo mismo al finalizar el código php con la etiqueta? >.
He puesto una sentencia if para corregir un pequeño aspecto que se me había pasado: cuando la página no tiene parámetros, como por ejemplo http://pagina.php lo que se está recomendando es http://pagina.php/? (con una interrogación al final). El condicional if que he puesto lo soluciona sin poner la interrogación.
El archivo recomender.php sigue tal cual te puse. Y el archivo enviar.php también.
Prueba la página que te he puesto aquí arriba, junto con los archivos recomender.php y enviar.php modificados como te dije. No deberías tener ningún problema.
Una vez que te funcione eso, adapta la función para crear el popup de recomendación a tu web, al código que ya tienes tu.
Hola nuevamente, antes que nada te quiero agradecer por toda tu ayuda, realmente lo agradezco, ya que le he preguntado a más de 20 expertos, y sos el único que me respondió...
Bueno, hice lo que me pediste, ¿pero sigue sin querer enviar el mail... será algo del servidor?... ¿están bien los datos de "envía.php"?...
Disculpa que no te conteste antes, es que no estuve disponible estos días... veré que sucede con lo que me dices, y luego te cuento
Gracias
Saludos
Hola, tarde en contestar, porque quise hacer todas las pruebas que se me ocurrieran antes de comentarte lo que sucede...
Primero copie el código que me dabas ( solo el script ) y lo coloque en el blog... pero me daba un error de JavaScript...
Después copie integro el código que me dabas... he hice una nueva web con todo el código que me dabas... pero me daba un error de Java Script también...
Y por ultimo adapte el código Script que me dabas con el que yo ya tenia... y esta vez no me dio error, pero sigue sin enviar el mail... El script me queda de la siguiente forma...
Por un lado esto:
<Script Language=JavaScript Type="Text/JavaScript">
function PopWidnow(url_pop)
{
var PopWidth=400;
var PopHeight=400;
var PopLeft=100;
var PopTop=100;
DyroBiz=window.open(url_pop,'DyroBiz','toolbar=no,status=no,menubar=no,location=no,directories=no,resizable=no,scrollbars=no,width='+PopWidth+',height='+PopHeight+',top='+PopTop+',left='+PopLeft);
}
</Script>
Y este es el Link:
<a href="javascript:PopWidnow('http://www.hepatitisc2000.com.ar/PRUEBAS/recomender.php?<?php if ($_SERVER['QUERY_STRING'] != NULL ) { echo "http://{$_SERVER['HTTP_HOST']}{$_SERVER['PHP_SELF']}?{$_SERVER['QUERY_STRING']}"; } else { echo "http://{$_SERVER['HTTP_HOST']}{$_SERVER['PHP_SELF']}"; } ?> ')" alt="Pop Window"><font color="#990000" size="1" face="Arial"><strong>RECOMENDAR
! </strong></font></a>
El problema no está ahí. He probado tu código y funciona perfectamente. Por tanto si no se envían correos es por otra causa.
Asegúrate que los archivos recomendar.php y enviado.php son correctos.
En recomendar.php debes tener algo parecido a lo siguiente: <td width="57%" bgcolor="#00CC99" height="50">   
<?php echo "<input type='hidden' name='web' value='{$_SERVER['QUERY_STRING']}'>"; ?>
<input type="submit" value="Recomendar!" name="enviar" style="background-color: #FFFFFF; color: #000000; border: 1 solid #000000">
Ahí tienes tres líneas, la de arriba y la de abajo ya están en el original, solo tienes que añadir la del medio.
El archivo enviado.php la única línea que he cambiado ha sido:
$web = "http://www.tuweb.com/";
por:
$web = $_POST['web'];
Y así todo me funciona correctamente.
Ahora ya sí descartamos problema del código.
Haz la prueba de enviar un correo muy sencillo con la función mail. Lo más sencillo que puedas. De esta forma compruebas que no sea problema del servidor.
Hola, ya realice lo que me pediste.. y seguía sin funcionar... hable con mi servidor... y no entiendo bien porque motivos, pero dijo que era preferible hacer que los datos se envíen por un archivo ( que el creo en recién ), escrito en python.
Y en estos momentos están terminando de configurar todo para que funcione...
Te agradezco toda tu ayuda, y si no te molesta, en algún momento voy a volver a contactarme porque tengo otros problemas con el blog...
Desde ya muchísimas gracias
Matias

1 respuesta más de otro experto

Respuesta
1
Lamentablemente no pude ingresar a la dirección del Blog que me escribiste. Al parecer hay un error. Por el momento no he trabajado con el B2Evolution, sin embargo creo que respecto a tu problema, si envías el link como parámetro al PopUp seguramente te lo va a tomar. Imagino que el array $item se inicializa en algún lado, es importante que la función que lo inicializa este incluida en el script en donde vas a usar la etiqueta $item->permalink(). Lo que devuelve ese array mandalo directamente como parámetro al PopUp. Por Ejemplo:
<?php
$MiWeb=$item->peramlink()
?>
<a href="javaScript:window.open('recomendarPopUp.php?miweb=$MiWeb')">
Ahí podes usar el script de recomendación que te bajaste.
Hola, ya realice lo que me pediste.. y seguía sin funcionar... hable con mi servidor... y no entiendo bien porque motivos, pero dijo que era preferible hacer que los datos se envíen por un archivo ( que el creo en recién ), escrito en python.
Y en estos momentos están terminando de configurar todo para que funcione...
Te agradezco toda tu ayuda, y si no te molesta, en algún momento voy a volver a contactarme porque tengo otros problemas con el blog...
Desde ya muchas gracias

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas