Posts aleatorios en el index

  • Autor Autor Gaston Riera
  • Fecha de inicio Fecha de inicio

Gaston Riera

1
Pi
SEO
Verificado
Verificación en dos pasos activada
Verificado por Whatsapp
¡Ha verificado su Paypal!
¡Excelente comerciante!
Suscripción a IA
Hola a todos!,
En vistas de que siempre esta todo tan monopolizado por wordpress, he buscado en 10 paginas de google y en otras tantas del foro para crear la funcion de que se publiquen entradas aleatorias en el index.
Como ya sabran, tengo un sitio nuevo y me interesa darle caña: Portadas de Facebook - Portadas para Facebook

Es un script comprado y de programacion propia en PHP. Personalmente le he editado muchas partes del codigo para que las cosas se muestren como yo quiero. Aunque no se como hacer para que haya posts aleatorios.
Aqui les dejo el archivo index.php

PHP:
<div class="left"><?php include('left-bar.php');?></div><!--end left-->
<div class="center">
<div class="box-titles">Todas las portadas</div>
<!---//////////////////////////-->
<?php
// How many adjacent pages should be shown on each side?
	$adjacents = 5;
	
	$query = "select COUNT(*) as num from covers order by id  desc";
	$total_pages = mysql_fetch_array(mysql_query($query));
	$total_pages = $total_pages['num'];
	
	$limit = 6; 								//how many items to show per page
	$page = $_GET['page'];
	 
	if($page) 
		$start = ($page - 1) * $limit; 			//first item to display on this page
	else
		$start = 0;								//if no page var is given, set start to 0
 	/* Get data. */
	$sql = "select * from covers order by id  desc LIMIT $start, $limit";
	 
	$result = mysql_query($sql);
	
	/* Setup page vars for display. */
	if ($page == 0) $page = 1;					//if no page var is given, default to 1.
	$prev = $page - 1;							//previous page is page - 1
	$next = $page + 1;							//next page is page + 1
	$lastpage = ceil($total_pages/$limit);		//lastpage is = total pages / items per page, rounded up.
	$lpm1 = $lastpage - 1;						//last page minus 1
	
	$pagination = "";
	if($lastpage > 1)
	{	
		$pagination .= "<div class=\"pagination\">";
		//previous button
		if ($page > 1) 
			$pagination.= "<a href=\"todas_las_portadas-$prev.html\">« previous</a>";
		else
			$pagination.= "<span class=\"disabled\">« previous</span>";	
		
		//pages	
		if ($lastpage < 7 + ($adjacents * 2))	//not enough pages to bother breaking it up
		{	
			for ($counter = 1; $counter <= $lastpage; $counter++)
			{
				if ($counter == $page)
					$pagination.= "<span class=\"current\">$counter</span>";
				else
					$pagination.= "<a href=\"todas_las_portadas-$counter.html\">$counter</a>";					
			}
		}
		elseif($lastpage > 5 + ($adjacents * 2))	//enough pages to hide some
		{
			//close to beginning; only hide later pages
			if($page < 1 + ($adjacents * 2))		
			{
				for ($counter = 1; $counter < 4 + ($adjacents * 2); $counter++)
				{
					if ($counter == $page)
						$pagination.= "<span class=\"current\">$counter</span>";
					else
						$pagination.= "<a href=\"todas_las_portadas-$counter.html\">$counter</a>";					
				}
				$pagination.= "...";
				$pagination.= "<a href=\"todas_las_portadas-$lpm1.html\">$lpm1</a>";
				$pagination.= "<a href=\"todas_las_portadas-$lastpage.html\">$lastpage</a>";		
			}
			//in middle; hide some front and some back
			elseif($lastpage - ($adjacents * 2) > $page && $page > ($adjacents * 2))
			{
				$pagination.= "<a href=\"todas_las_portadas-1.html\">1</a>";
				$pagination.= "<a href=\"todas_las_portadas-2.html\">2</a>";
				$pagination.= "...";
				for ($counter = $page - $adjacents; $counter <= $page + $adjacents; $counter++)
				{
					if ($counter == $page)
						$pagination.= "<span class=\"current\">$counter</span>";
					else
						$pagination.= "<a href=\"todas_las_portadas-$counter.html\">$counter</a>";					
				}
				$pagination.= "...";
				$pagination.= "<a href=\"todas_las_portadas-$lpm1.html\">$lpm1</a>";
				$pagination.= "<a href=\"todas_las_portadas-$lastpage.html\">$lastpage</a>";		
			}
			//close to end; only hide early pages
			else
			{
				$pagination.= "<a href=\"todas_las_portadas-1.html\">1</a>";
				$pagination.= "<a href=\"todas_las_portadas-2.html\">2</a>";
				$pagination.= "...";
				for ($counter = $lastpage - (2 + ($adjacents * 2)); $counter <= $lastpage; $counter++)
				{
					if ($counter == $page)
						$pagination.= "<span class=\"current\">$counter</span>";
					else
						$pagination.= "<a href=\"todas_las_portadas-$counter.html\">$counter</a>";					
				}
			}
		}
		
		//next button
		if ($page < $counter - 1) 
			$pagination.= "<a href=\"todas_las_portadas-$next.html\">Siguiente »</a>";
		else
			$pagination.= "<span class=\"disabled\">Siguiente »</span>";
		$pagination.= "</div>\n";		
	}
	
	$q=mysql_query("select * from covers order by id desc limit $start,$limit");

	$numr=mysql_num_rows($q);
	if ($numr==0)
	{
	echo '<div class="msg"><span class="big">No se encontraron Portadas para esta busqueda.</span> <br/>Vuelve a intentarlo mas tarde.</div>';
	}
	while($row=mysql_fetch_assoc($q)){
$cname = $row['title'];
$clink = preg_replace("![^a-z0-9]+!i", "-", $cname);
$clink = strtolower($clink);
?>
<!--///////////-->
<div class="cover-box">
<div class="cover-title"><div class="t-bg"><a class="fbctitle" href="portada-<?php echo $row['id'];?>-<?php echo $clink;?>.html"><?php echo $row['title'];?></a></div><div class="t-socail"><div class="fb-like" data-href="http://<?php echo $settings['siteurl'];?>/portada-<?php echo $row['id'];?>-<?php echo $clink;?>.html" data-send="false" data-layout="button_count" data-width="100" data-show-faces="false"></div></div></div>
<div class="fbcover"><a href="portada-<?php echo $row['id'];?>-<?php echo $clink;?>.html"><img src="uploads/<?php echo $row['picture'];?>" width="580" height="215" alt="<?php echo $row['title'];?> Facebook Timeline Cover">
<div class="click">&nbsp;</div>
</a></div>
</div><!--end cover box-->
<!--///////////-->
<?php } ?>
<div class="small-ads"><?php echo $adrow['ad2'];?></div>
<div class="pagediv"><?php echo $pagination;?></div>

En fin, alguna idea?

La ultima parte del codigo es lo que compone la imagen flotante de "Agregar portada a tu Perfil"

Muchas gracias a todos los que respondan.
saludos
 
En la consulta SQL tienes que indicarle que en vez de por ID ordene los resultado al azar mediante la palabra reservada rand.
 
En la consulta SQL tienes que indicarle que en vez de por ID ordene los resultado al azar mediante la palabra reservada rand.

Y exactamente que parte del codigo cambio?
Intente con cambiar el id por rand y no funciono... Es mas me dejaba vacio el index...

Enviado desde mi GT-I9100
 
Te recomiendo dejarlo de mas nuevo a mas antiguo ahora quieres random despues querras regresar a normal, me paso pero solo es una sugerencia.
 
Te recomiendo dejarlo de mas nuevo a mas antiguo ahora quieres random despues querras regresar a normal, me paso pero solo es una sugerencia.

Lo que pasa es que estoy pensando en subir unas 1000 imagenes, y siempre las ultimas paginas seran las rezagadas. Y eso casualmente es lo que no quiero. Quiero darle vitalidad al index...
 
Excelente, mil gracias.
Aunque no entendi el fin del articulo que me indicaste.

Se trata de que optimiza el consumo de procesador?

Lo que comenta el artículo es que el order by rand consume bastante recursos del servidor y no es buena idea utilizarlo mucho 🙂
 
Lo que comenta el artículo es que el order by rand consume bastante recursos del servidor y no es buena idea utilizarlo mucho 🙂
Estoy de acuerdo con que consume bastantes recursos.
Por esa razon es que decidi no colocarlo en el index (QUe es donde recibe el 90% de las visitas), sino dentro de los post individuales, asi el usuario, al entrar a ver una imagen, tiene la opcion de ver otras y que estas sean random 🙂

Insito, gracias. De momento me ha servido para lo que buscaba 🙂
 
Solo como dato anexo: Para sitios de más de 750 post, un random es ametrallar al procesador...
 
no entendi mucho es php o wordpress xD
Ya que si es wordpress con que te busques un plugin de random post
Si es php propio con que uses rand() y especificas con where que tipo de contenido especifico se tendria que poner 😛
 
Solo como dato anexo: Para sitios de más de 750 post, un random es ametrallar al procesador...

Muy buen dato che.
Aunque de momento solo tengo 200 posts y unas 200 visitas diarias... creo que ya si crece mucho en visitas y los posts skn muchos optimizare mejor todo

Enviado desde mi GT-I9100

---------- Post agregado el 26-may-2013 hora: 13:36 ----------

no entendi mucho es php o wordpress xD
Ya que si es wordpress con que te busques un plugin de random post
Si es php propio con que uses rand() y especificas con where que tipo de contenido especifico se tendria que poner 😛

Es PHP che. Aunq hay alguna forma de controlar que la búsqueda sea solo entre la ultimos 10-20 posts subidos?

Enviado desde mi GT-I9100
 
si solo tienes que poner
LIMIT 20 o LIMIT 10 :encouragement:

Dijamos algo asi seria la webea 😛
rand() Where Categoria='Accion' LIMIT 10

asi soolo sale contenido aleatorio de la categoria accion con limite de 10 post :encouragement:
 
si solo tienes que poner
LIMIT 20 o LIMIT 10 :encouragement:

Dijamos algo asi seria la webea 😛
rand() Where Categoria='Accion' LIMIT 10

asi soolo sale contenido aleatorio de la categoria accion con limite de 10 post :encouragement:

Como decía Doctor PC, con muchos registros esto tardaría mucho y cargaría el procesador, yo sacaría los 10 registros a partir de un numero aleatorio o, si no hay ID inexistentes entre el primero y el último, generáría 10 números aleatorios y sacaría los registros con dichos ID. Ejemplos:

Sacando 10 registros a partir de 1 aleatorio:
PHP:
<?php
// Guardamos en una variable el numero de registros existentes
$conex = mysqli_connect(....);
$consulta = mysqli_fetch_array(mysqli_query($conex,"SELECT count(*) FROM tabla;"), MYSQLI_NUM);
$total = $consulta[0];

// Sacamos el numero aleatorio entre 0 y el total menos 1 (porque empieza en 0) menos 10 (porque cojeremos 10 registros)
$naleatorio = rand(0,$total-1-10);

// la consulta final queda en
$consulta = mysqli_fetch_array(mysqli_query($conex,"SELECT * FROM tabla LIMIT $naleatorio,10;"));
?>

Sacando los 10 registros que coinciden con 10 números aleatorios:
PHP:
<?php
// Guardamos en una variable el id máximo entre los registros de la tabla
$conex = mysqli_connect(....);
$consulta = mysqli_fetch_array(mysqli_query($conex,"SELECT MAX(id) FROM tabla;"), MYSQLI_NUM);
$ultimo = $consulta[0];

// Obtenemos los 10 números aleatorios entre 0 o 1 (depende de cómo empiecen nuestros id) y el máximo
$numeros = array();

for (int i=0; i<10; i++) {
    $numeros[] = rand(0, $ultimo);
}

$listaid = implode(',', $numeros);

// Y obtenemos los registros con la consulta final
$consulta = mysqli_fetch_array(mysqli_query($conex,"SELECT * FROM tabla WHERE id IN ($listaid)"));
?>

Esta última forma le pasa lo que comenté antes, que si se ha eliminado algún registro y coincide que se genera ese ID con el rand, saldrán menos registros en vez de los 10... pero esto quizás se puede solucionar generando más números aleatorios por si ocurriera esto.

Si me equivoco en algo corregirme 😉

Un saludo! 😀
 
Última edición:
me interesa, gracias
 
justo antes de comentar suelo leer, :witless:
la solucion que iba a dar ya la dio [MENTION=29830]gamarro[/MENTION] , pero la segunda opcion, es generar con php una serie aleatoria de nros que luego iras a comprobar si existen en tu tabla, y si dicho ID no existe (el rando genero un nro que no es id en tu tabla), no importa, no se rompera nada 😉