Foros del Web » Programando para Internet » PHP »

Mostrar 10 enlaces internos de una lista aleatoriamente

Estas en el tema de Mostrar 10 enlaces internos de una lista aleatoriamente en el foro de PHP en Foros del Web. Hola que tal, Queria hacer como una nube de tags, pero que en vez de tags, me mostrára 10 resultados de una lista de links ...
  #1 (permalink)  
Antiguo 21/10/2008, 16:59
Avatar de dforo  
Fecha de Ingreso: septiembre-2008
Ubicación: Barcino
Mensajes: 525
Antigüedad: 15 años, 6 meses
Puntos: 18
Mostrar 10 enlaces internos de una lista aleatoriamente

Hola que tal,

Queria hacer como una nube de tags, pero que en vez de tags, me mostrára 10 resultados de una lista de links internos de mi web que pondria en una instrucción en un codigo PHP o Javascript (eso no lo se) inscrustado en XHTML, para que cada vez que cargase la pagina en una nueva visita o actualización desde el navegador, la lista de enlaces muestre nuevos links aleatoriamente, siempre dentro de esa lista de por ejemplo 40 url seleccionadas previamente y listadas en algun archivo.

Como puedo conseguir esto?, es muy dificil?, no tengo practicamente idea de PHP ni de Javascript, existe algún metodo mas sencillo sin utilizar estos lenguajes?

Saludos y gracias
  #2 (permalink)  
Antiguo 21/10/2008, 17:33
 
Fecha de Ingreso: mayo-2006
Mensajes: 178
Antigüedad: 17 años, 11 meses
Puntos: 7
Respuesta: Mostrar 10 enlaces internos de una lista aleatoriamente

Rapidamente se me ocurre tener un array donde cada posicion sea cada uno de estos links, entonces los podes imprimir por pantalla aleatoriamente e ir cambiandole el tamaño a los textos. no deberia ser demasiado complejo.
  #3 (permalink)  
Antiguo 21/10/2008, 17:52
Avatar de dforo  
Fecha de Ingreso: septiembre-2008
Ubicación: Barcino
Mensajes: 525
Antigüedad: 15 años, 6 meses
Puntos: 18
Respuesta: Mostrar 10 enlaces internos de una lista aleatoriamente

Gracias por la respuesta, es buena opción visual lo que dices del tamaño de los enlaces, pero, podrias comentarme un poco mas acerca del array?, es PHP verdad?, puedo meterlo en un div y que valíde? o ya me puedo olvidar de que llegue a validar como XHTML?

Gracias y saludos :)
  #4 (permalink)  
Antiguo 21/10/2008, 17:59
 
Fecha de Ingreso: mayo-2006
Mensajes: 178
Antigüedad: 17 años, 11 meses
Puntos: 7
Respuesta: Mostrar 10 enlaces internos de una lista aleatoriamente

Si, seria php, pero la opcion de javascript es igualmente válida. Claro que lo podes poner en un DIV, el codigo de php se procesa en el server y para el browser el solo texto.

Me gusto la idea y me lo puse a hacer. Aca te dejo algo de código, le faltan detalles como los estilos y demas pero casi esta.

Código PHP:
<?php

//-- LINKS POSIBLES
$links[] = 'Clarin.com';
$links[] = 'infobae.com';
$links[] = 'forosdelweb.com';
$links[] = 'maestrosdelweb.com';
$links[] = 'desarrolloweb.com';
$links[] = 'datafull';
$links[] = 'Mamoot Media';
$links[] = 'Matriz Energética';
$links[] = 'Oscar Pereno';
$links[] = 'Yroshka';

//-- POSIBLES TAMAÑOS DE FUENTES (PODRIAN SER ESTILOS CSS)
$estilos[] = 10;
$estilos[] = 8;
$estilos[] = 31;
$estilos[] = 3;
$estilos[] = 80;
$estilos[] = 100;
$estilos[] = 23;
$estilos[] = 37;
$estilos[] = 1;
$estilos[] = 59;
$estilos[] = 180;
$estilos[] = 39;
$estilos[] = 6;
$estilos[] = 19;
$estilos[] = 44;
$estilos[] = 23;
$estilos[] = 37;
$estilos[] = 1;
$estilos[] = 59;

//-- DESACOMODO EL ARRAY DE LINKS
shuffle($links);

//-- VARIABLE PARA GUARDARME LA NUBE
$nube "";

//-- RECORRO EL ARRAY GUARDANDO LOS LINKS EN LA VARIABLE
for($x 0$x count($links); $x++){

    
$nube .= '<font size="'.$estilos[rand(0count($estilos) - 1)].'">'.$links[$x].'</font>, ';
}

//-- ESCRIBO LA NUBE
echo rtrim($nube', ');
?>
Si queres verlo andando: http://www.mamootmedia.com/temp/nube.php
  #5 (permalink)  
Antiguo 21/10/2008, 18:05
Avatar de dforo  
Fecha de Ingreso: septiembre-2008
Ubicación: Barcino
Mensajes: 525
Antigüedad: 15 años, 6 meses
Puntos: 18
Respuesta: Mostrar 10 enlaces internos de una lista aleatoriamente

Que eficacia y generosidad :), muchisimas gracias amigo ;), pues lo probaré y te diré que tal me fué, primero visitaré tu enlace y me fijo para ver si me aclaro de como colocarlo.

Saludos y hasta pronto, gracias mil
  #6 (permalink)  
Antiguo 21/10/2008, 18:07
 
Fecha de Ingreso: mayo-2006
Mensajes: 178
Antigüedad: 17 años, 11 meses
Puntos: 7
Respuesta: Mostrar 10 enlaces internos de una lista aleatoriamente

De nada, si tenes algun otro problema aca estoy.
  #7 (permalink)  
Antiguo 22/10/2008, 01:38
 
Fecha de Ingreso: junio-2005
Mensajes: 343
Antigüedad: 18 años, 10 meses
Puntos: 10
Respuesta: Mostrar 10 enlaces internos de una lista aleatoriamente

Solo veo un problema (más bien es por la optimización) en la línea siguiente:

for($x = 0; $x < count($links); $x++){

yo haría lo siguiente:

$numLinks = count($links);
for($x = 0; $x < $numLinks; $x++){

De este modo consigues que cada vez que hay un nuevo link, no haga una re-evaluación de count($links) osea que vuelva a canviar su tamaño.

No se si me he explicado bien, entendeis lo que quiero decir ??
  #8 (permalink)  
Antiguo 22/10/2008, 04:30
 
Fecha de Ingreso: mayo-2006
Mensajes: 178
Antigüedad: 17 años, 11 meses
Puntos: 7
Respuesta: Mostrar 10 enlaces internos de una lista aleatoriamente

Hasta donde yo tenía entendido

esto

Código PHP:
for($x 0$x count($links); $x++){ 
era lo mismo que esto

Código PHP:
$numLinks count($links);
for(
$x 0$x $numLinks$x++){ 
No entiendo cual es al diferencia.
  #9 (permalink)  
Antiguo 22/10/2008, 04:35
 
Fecha de Ingreso: junio-2005
Mensajes: 343
Antigüedad: 18 años, 10 meses
Puntos: 10
Respuesta: Mostrar 10 enlaces internos de una lista aleatoriamente

La diferencia es que cada vez que $x canvie su valor, se realiza la funcion count($links), de la otra forma, no se vuelve a realizar la función y el script tardará menos.

No es excesivamente importante pero por ejemplo:

$links tiene 10.000.000 elementos en el array.

Cada vez que pasa por el for, tiene que hacer 10.000.000 de veces la función count(), de la otra forma lo hace solo una vez.

Entiendes ahora lo que queria decir ??

Esta claro que funciona igual, pero desde el punto de vista optimo no es correcto.

A mi entender siempre claro. Puede haber alguién que proponga otras alternativas.
  #10 (permalink)  
Antiguo 22/10/2008, 04:56
Avatar de Legoltaz  
Fecha de Ingreso: agosto-2008
Mensajes: 325
Antigüedad: 15 años, 8 meses
Puntos: 6
Respuesta: Mostrar 10 enlaces internos de una lista aleatoriamente

Pues se me ocurre esto:

Código PHP:
Ver original
  1. <?php
  2. require('conexion.php');
  3. $consulta1 = mysql_query("SELECT id_url FROM tu_tabla",$link) or die(mysql_error());
  4. $filas = mysql_num_rows($consulta1);
  5. $aleatorio = rand(1,$filas);
  6. $consulta2 = mysql_query("SELECT * FROM tu_tabla WHERE id_url = '".$aleatorio."' LIMIT 10",$link) or die(mysql_error());
  7. ?>
  #11 (permalink)  
Antiguo 22/10/2008, 05:39
Avatar de dforo  
Fecha de Ingreso: septiembre-2008
Ubicación: Barcino
Mensajes: 525
Antigüedad: 15 años, 6 meses
Puntos: 18
Respuesta: Mostrar 10 enlaces internos de una lista aleatoriamente

Bufff, ahora si que me he liado pero bien jeje, esto del PHP se me hace complicado, en fin, ahora me pongo a investigar con los datos que me facilitais ;)...porque seria PHP solo o PHP y Mysql?, lo digo por este ultimo codigo que ha pegado Legoltaz si que juraria que está recurriendo a la base de datos para dar los resultados..., tengo la posibilidad de usar tambien Mysql asi que no se que puede resultar mas sencillo o si merece la pena complicarlo un poco y hacerlo mas "robusto" con el uso de la base de datos?, pero por ahora probaré tal cual ;)

Saludos y gracias de nuevo, me alegro que haya suscitado un poco de debate sano , os tendré informados
  #12 (permalink)  
Antiguo 22/10/2008, 09:47
 
Fecha de Ingreso: junio-2005
Mensajes: 343
Antigüedad: 18 años, 10 meses
Puntos: 10
Respuesta: Mostrar 10 enlaces internos de una lista aleatoriamente

Yo no utilizaria lo último que han puesto, además:

Código PHP:
<?phprequire('conexion.php');$consulta1 mysql_query("SELECT id_url FROM tu_tabla",$link) or die(mysql_error());// Esto habría seleccionado todos los valores de la tabla
$filas mysql_num_rows($consulta1);// esto contaria cuantos valores hay en la tabla
$aleatorio rand(1,$filas);// esto obtendria un número que va de 1 al número de filas
$consulta2 mysql_query("SELECT * FROM tu_tabla WHERE id_url = '".$aleatorio."' LIMIT 10",$link) or die(mysql_error());// esta consulta que ha hecho es la cagada. me explico más abajo?>
Explicación (a mi parecer):

Inserto 10 registros.
Elimino 4 registros.
Inserto 4 registros.

Entonces ID del último registro: 14
Fila que hay 10

La consulta que tu has hecho solo buscara registros cuya ID este entre 1 y 10.

¿Y los otros 4 que he insertado después?

Nunca saldrían.

Además al hacer el id_url = ALGUN VALOR LIMIT 10

Esto es absurdo según parece, no va ha haber 10 con el mismo ID, eso solo recuperaría 1.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:07.