- Desde
- 6 Sep 2008
- Mensajes
- 959
Tutorial hecho a solicitud en este tema
Enlace eliminado
Objetivo: hacer una pagina propia (indice.php) que reciba parametros por URL (indice.php?cat=peliculas&por=tema&letra=N&orden=asc) para mostrar un listado de todos los temas de varios foros a la vez, para de esa forma crear un listado general
¿Como Funciona?: Básicamente es mostrar un listado al igual que Enlace eliminado, pero usando los parametros de la URL armar una consulta SQL que cumpla con nuestros requisitos
Requerimientos:
Enlace eliminado
-------------------------------------------------------------------
El Archivo PHP:
El contenigo del Archivo PHP tiene que ser el siguiente, lo he comentado lo más que he podido
NUEVA VERSION 1.1
Enlace eliminado
Enlace eliminado
Enlace eliminado
Objetivo: hacer una pagina propia (indice.php) que reciba parametros por URL (indice.php?cat=peliculas&por=tema&letra=N&orden=asc) para mostrar un listado de todos los temas de varios foros a la vez, para de esa forma crear un listado general
¿Como Funciona?: Básicamente es mostrar un listado al igual que Enlace eliminado, pero usando los parametros de la URL armar una consulta SQL que cumpla con nuestros requisitos
Requerimientos:
- Lenguaje SQL básico-Intermedio (clausulas order by, in, like, consultas a más de 1 tablas)
- PHP Intermedio (Arreglos, controles como el For, Switch, etc)
Enlace eliminado
-------------------------------------------------------------------
El Archivo PHP:
El contenigo del Archivo PHP tiene que ser el siguiente, lo he comentado lo más que he podido
PHP:
<?php
// #SET ENTORNO PHP #
error_reporting(E_ALL & ~E_NOTICE);
// # DEFINIR COSNTANTES IMPORTANTES #
define('THIS_SCRIPT', 'catalogo_descarga');
// # PRE-CACHE DATOS Y PLANTILLAS #
//Obtener Grupo de Frases Especiales
$phrasegroups = array();
//Obtener Plantillas Especiales desde el datastore
$specialtemplates = array();
// pre-cache Plantillas usadas en todas las Acciones de este php
$globaltemplates = array(
// Pon aqui todas las plantillas que hayas creado, pero curiosamente si no las pones, igualito funciona (esto es lenguaje c pues
'catalogo_descarga',
'catalogo_descargabit',
'catalogo_principal', //RECUERDA QUE ESTE ES EL NOMBRE DE LA PLANTILLA QUE CREASTE
);
// pre-cache Plantillas usadas para Acciones Estemplates used by specific actions
$actiontemplates = array();
// # REQUERIDO #
require_once('./global.php'); //con esto cargas todas las opciones de vBulletin, ademas de la conexion, acceso a MySQL, etc, etc
// #######################################################################
// ######################## COMIENZO DEL SCRIPT PRINCIPAL ############################
// #######################################################################
$cat = $vbulletin->input->clean_gpc('r', 'cat', TYPE_STR); //obtenemos el parametro cat
if ($cat!="")
{
switch ($cat)
{
case "series":
$en_foros = "13,14,16"; //ID de foros donde hay series
break;
case "peliculas":
$en_foros = "9,10,11"; //ID de foros de Peliculas
break;
case "software":
$en_foros = "6,7,8"; //ID de los foros donde hay Programas
break;
default:
$cat = "error"; //puso cualquier cosa en cat o simplemente lo dejo en blanco
$en_foros = "1";
}
}
if ($cat=="") //si el cat esta en blanco, se asume que esta en el indice general
{
$navbits = array();
$navbits[$parent] = 'Catálogo Principal'; //esto se vera en el NavBar (Ver Imagen 1)
$navbits = construct_navbits($navbits); //Que vBulletin lo compile a su manera
eval('$navbar = "' . fetch_template('navbar') . '";'); //Luego usamos esa compilacion con la plantilla navbar (que será llamado en la plnatilla prueba
eval('print_output("' . fetch_template('catalogo_principal') . '");'); //y Finalmente llamamos a nuestra plantilla personalizada
}
elseif($cat=="error")
{
header( 'Location: indice.php' ) ; //si hubo un error al leer la categoria, se lo manda al indice general (cat="")
}
else
{
//Si tenemos una categoria, vamos a vrificar si hay condiciones adicionales
$letra = $vbulletin->input->clean_gpc('r', 'letra', TYPE_STR); //si quiere que se muestre solo alguna letra
$orderby = $vbulletin->input->clean_gpc('r', 'por', TYPE_STR); //si quiere que se ordene por alguna columna en especial
$descasc = $vbulletin->input->clean_gpc('r', 'orden', TYPE_STR); //el tipo de orden, si es ascendente o descendente
if ($letra!= '') //vemos si puso alguna letra, de ser asi, se arma el like para el SQL
{
$letra = $letra{0}; //si pusieron alguna palabra o lo que sea, solo tomarémos la primera letra
$condicionlike = "and thread.title like '$letra%'"; //Aqui armamos el Like para el SQL
$porletra="&letra=$letra"; //Esto lo vamos a usar para armar la URL en las plantillas :D, su uso es especifico para las plantillas
}
$navbits = array();
$cat_template = ucfirst($cat); //esto es para que la palabra del parametro (serie, pelicula, etc), se convierta su primera letra
//en mayuscula (Serie, Pelicula, Etc) es para que se vea estetico en las plantillas al momento de ser presentado
$navbits[$parent] = 'Catalogo: ' . $cat_template; //esto se vera en el NavBar
$navbits = construct_navbits($navbits); //Que vBulletin lo compile a su manera
eval('$navbar = "' . fetch_template('navbar') . '";'); //Luego usamos esa compilacion con la plantilla navbar (que será llamado en la plnatilla prueba
for ($i=65;$i<=90;$i++ ) //con este for hacemos el menu de las letras, la letra A es 65 en ascii y la Z es 90
{
$abecedario.= "<td class='alt1'><a href='indice.php?cat=$cat&letra=".chr($i)."'>".chr($i)."</a></td>"; //esta variable va a contener todos los TD para la tabla del abecedario
}
if ($descasc!="asc") //armamos el tipo de orden, el $descascflecha sirve solo para cpntrolar la direcion del la imagen de ordenamiento en las plantillas
{
$descasc!="desc";
$descascflecha ="asc";
}
else
{
$descascflecha ="desc";
}
switch ($orderby) //segun lo que recibimos en este parametro, hacemos el order by, el $flecha[NOMBRE] sirve para mostrar la fecha si es necesario en la columna de la tabla que se muestra
{
case "autor":
$orderby = " order by thread.postusername ";
$flechaautor = "<a href='indice.php?cat=$cat&porautor" . $porletra. "&orden=".$descascflecha."'><img src='$stylevar[imgdir_button]/sort".$descascflecha.".gif' border=0></a>";
break;
case "foro":
$orderby = " order by forum.title_clean ";
$flechaforo = "<a href='indice.php?cat=$cat&por=foro" . $porletra. "&orden=".$descascflecha."'><img src='$stylevar[imgdir_button]/sort".$descascflecha.".gif' border=0></a>";
break;
case "fecha":
$orderby = " order by thread.dateline ";
$flechafecha = "<a href='indice.php?cat=$cat&por=fecha" . $porletra. "&orden=".$descascflecha."'><img src='$stylevar[imgdir_button]/sort".$descascflecha.".gif' border=0></a>";
break;
case "visitas":
$orderby = " order by thread.views ";
$flechavisitas = "<a href='indice.php?cat=$cat&por=visitas" . $porletra. "&orden=".$descascflecha."'><img src='$stylevar[imgdir_button]/sort".$descascflecha.".gif' border=0></a>";
break;
default:
$orderby = " order by thread.title ";
$flechatema = "<a href='indice.php?cat=$cat&por=tema" . $porletra. "&orden=".$descascflecha."'><img src='$stylevar[imgdir_button]/sort".$descascflecha.".gif' border=0></a>";
}
//Consulta SQL que obtiene los registros segun las condiciones que le hayamos dado
$get_temas_query = $db->query_read("SELECT thread.threadid, thread.title, thread.forumid, thread.postusername, thread.dateline,thread.views,thread.postuserid, forum.title_clean as title_forum
FROM " . TABLE_PREFIX . "thread as thread," . TABLE_PREFIX . "forum as forum
where thread.visible=1 and thread.forumid=forum.forumid and thread.forumid in ($en_foros) $condicionlike
". $orderby . $descasc );
if ($vbulletin->db->num_rows($get_temas_query) > 0) //Si hay regitros los muestra
{
while ($temas = $vbulletin->db->fetch_array($get_temas_query))
{
if ($i==1) {$i=2;} else {$i=1;}; //esto es para alternar entre el atl1 el alt2 para que sea más estetico la tabla
$temas['dateline'] = vbdate($vbulletin->options['dateformat'], $temas['dateline']); //convertimos la fecha de la tabla en fecha formato vBulletin
eval('$catalogo_descargabits .= "' . fetch_template('catalogo_descargabit') . '";'); //evaluamos la plantilla de registro por cada registro obtenido
};
}
else //Si no hay registros muestra el mensaje de no hay temas
{
eval('$catalogo_descargabits .= "' . "<tr><td class='alt1' colspan=5><center>No hay Temas</center></td></tr>" . '";');
}
eval('print_output("' . fetch_template('catalogo_descarga') . '");'); //llamamos a nuestra plantilla de descarga que se encargará de llamar al abecedario y al catalogo de cada registro
}
?>
NUEVA VERSION 1.1
Enlace eliminado
Enlace eliminado