News:

Want to get involved in developing SMF, then why not lend a hand on our github!

Main Menu

[Tutorial] Conectarse a una Base de Datos independiente a la de SMF

Started by juanpons14, August 12, 2010, 10:38:19 PM

Previous topic - Next topic

juanpons14

Bueno, este sencillo y rápido tutorial seguro que le soluciona la vida a muchos.

Algunos se preguntarán y para que quiere alguien conectar con otra DB que no sea la de SMF. Pues muy fácil. Yo tengo actualmente en mi web instalados SMF y WORDPRESS..algunos seguramente posean algun otro CMS..Joomla o cualquier cosa..pues este sencillo tutorial sirve para los que utilizaron dos DB diferentes a la hora de instalar SMF y otra aplicacion que utilize Base de datos.

En mi caso instale SMF creando una DB con el _1 y posteriormente SMF creando otra DB diferente con el sufixo _2...lo hice para poder utilizar un plugin que me integra los usuarios en ambas aplicaciones.

Pero llego el momento en que necesitaba conseguir un campo especifico de usuario de Wordpress que se daba para construir un enlace hacia la configuracion, en este caso de las Newsletters (BOletines) y yo queria añadir un enlace en el foro, pero al no poseer esta key (distinta para cada usuario) no podia.

Así fue como decidi indagar y en dos horitas consegui hacerlo gracias a mi exhaustiva busqueda.

Comenzemos:

Primero de todo debees de tener los siguientes campos bien claros:


  • Host
  • Nombre de la DB
  • Usuario de la DB
  • Contraseña de la DB

Obviamente el nombre de la DB no es el mismo que el de la que se ha puesto en SMF ya que uqeremos conectar con otra diferente.

Ahora pasamos al código:

Crea un nuevo archivo PHP ya sea con Dreamweaver o con cualquier programa que utilizes de edición y dentro pon este código:


<?php
function Conectarse()

{

$db_host="HOST/IP"// Host al que conectar, habitualmente es el 'localhost'

$db_nombre="NOMBRE DE LA DB"// Nombre de la Base de Datos que se desea utilizar

$db_user="USUARIO"// Nombre del usuario con permisos para acceder

$db_pass="CONTRASEÑA"// Contraseña de dicho usuario

// Ahora estamos realizando una conexión y la llamamos '$link'

$link=mysql_connect($db_host$db_user$db_pass) or die ("Error conectando a la base de datos.");

// Seleccionamos la base de datos que nos interesa

mysql_select_db($db_nombre ,$link) or die("Error seleccionando la base de datos.");

// Devolvemos $link porque nos hará falta más adelante, cuando queramos hacer consultas.

return $link;

}
?>



No te olvides de rellenar los datos "CONTRASEÑA" "NOMBRE DE LA DB" y "USUARIO".

Una vez hecho esto, guardamos nuestro archivo PHP con un nombre corto que nos sea fácil de recordar tal como db_ext.php y la subimos al root de nuestro theme mediante FTP.

Bien, una vez configurada esta parte, nos vamos al archivo de nuestro theme donde queramos añadir la información perteneciente a la otra DB, es decir, donde queremos hacer nuestras consultas externas hacia la DB que anteriormente configuramos. (En mi caso era el Index.template.php).

Y pondremos el siguiente código:

include('http://www.TUWEB.com/Themes/TUTHEME/db_ext.php');

De esta forma, llamaremos al archivo que anteriormente creamos parano tener que incluir todo ese enorme codigo cada vez que queramos utilizarlo, con un simple include basta.

No te olvides de sustituir "TUWEB" y "TUTHEME", creo que son bastante intuitivos para ver a que se refieren.  ;D

Una vez añadido ese código posteriormente añadimos lo siguiente:

$link = Conectarse();
$sql = " SELECT nombre, apellido FROM mitabla ";
$result = mysql_query($sql) or die('La siguiente consulta contiene algún error:<br>nSQL: <b>$sql</b>');
while ($row = mysql_fetch_array($result))
{
echo '<b><i>'.$row['nombre'].'</i></b>
<br /><b><i>'.$row['apellido'].'</i></b>';


Ahora expliquemos que debemos condigurar en esta parte. COn este código

$sql = " SELECT nombre, apellido FROM mitabla ";

Seleccionamos como bien indica los campos "Nombre" y "Apellido" (es un ejemplo tu puedes seleccionar lo que más te convenga para lo que desees hacer) de la Tabla "mitabla". Estos valores los debemos cambiar segun lo que tengmos nosotros y segun lo que deseemos hacer.

Ejemplo:
Queremos seleccionar el campo (como es mi caso) que se llama "confkey" y que atribuye en mi WP una especie de "API" a cada usuario.

Entonces hacemos lo siguiente:

$sql = " SELECT confkey FROM wp_mailpress_users ";

Por ahora todo bien, pero como he dicho nosotros queremos filtrar el campo según el usuario que sea...y como mis usuario de WP y SMF son los mismos hacemos lo siguiente:

Creamos la variable $username

$username = $context['user']['name'];

Y le decimos ahora que seleccione el campo "CONFKEY" donde el nombre (de WP) = al nombre de usuario de SMF conectado actualmente.

$sql = " SELECT confkey FROM wp_mailpress_users WHERE name = '$username' ";

Y posteriormente mostramos el resultado:

echo '<a class="daddy item" href="http://www.planetdescargas.com/wp-content/plugins/mailpress/mp-includes/action.php?action=mail_link&del='.$row['confkey'].'"></a>';

En mi caso al tener WP integrado con SMF los usuarios y nombres de usuario son los mismos lo que yo hago es decirle que coja el campo llamado CONFKEY que está en la tabla wp_mailpress_users y que coincide con el nombre de usuario que está conectado en SMF $context['user']['name'].


Espero realmente que se me haya entendido jaja! si alguien necesita algo que pida ayuda aqui e intentare ayudar en lo que pueda.
Gran parte de la información la he podido sacar de aquí.
Y mi web es esta de aquí.

Bueno un saludo, y gracias.

PD: Y esto no se e queda en una simple KEY sino que tambien puedes extraer los ultimos posts de WP o de Joomla o cualquier apliacion independiente y mostrarlo en SMF....o cualquier estadistica de WP...cualquier cosa, simplemente es conocerte bien los campos y las tablas y saber donde encontrar cada cosa.


PARTE 2: Ejemplos útiles utilizables.


1. Mostrar los últimos mensajes publicados en Wordpress (dentro de SMF).


Pues bien he hecho algunos ejemplos funcionales de la gran capacidad que tiene poder hacer esto y lo bien que se puede aprovechar.
En este ejemplo sacaremos los últimos mensajes (posts) publicados en Wordpress, ordenados por fecha y siempre asegurándonos de que no sean ni revisiones, ni paginas. El estilo HTML es customizable, yo lo saco mediante una lista ordenada (ul y li).

Código:


echo ' <ul>';
$link = Conectarse();

// En una variable tipo STRING escribimos la consulta.
$sql = " SELECT post_title, guid FROM wp_posts WHERE post_type = 'post' AND post_status = 'publish' ORDER BY post_date_gmt DESC LIMIT 4 ";

// Con la función 'mysql_query()' realizamos la consulta que queramos en la base de datos

// seleccionada previamente. Es decir le entramos la consulta que habíamos llamado '$sql'

$result = mysql_query($sql) or die('La siguiente consulta contiene algún error:<br>nSQL: <b>$sql</b>');

// Ahora tenemos en '$result' todos los registros de la consulta, ahora debemos mostrarlos uno a uno

while ($row = mysql_fetch_array($result))

{ // El while ya deberíamos saber que hace, 'mysql_fetch_array()' avanza uno a uno los registros

// Como hemos metido un registro en $row, tendremos que mostrar lo que nos interese en pantalla.

echo '<li><a href="'.$row['guid'].'">'.$row['post_title'].'</a></li>'; // Para mostrar el campo 'guid' que es la url del tema y el campo 'post_title' que es el título del tema

}
echo ' </ul>';


Con este código solo saldrán los ultimos 4 si quieres más (o menos) edita LIMIT 4 y cámbialo por lo que quieras. Para cinco sería LIMIT 5
Si ve que no te funciona ORDER BY post_date_gmt cambia post_date_gmt por post_date.


2. Mostrar los últimos comentarios publicados en Wordpress (dentro de SMF) con el nombre del autor, el comentario y la url hacia el mismo.



echo ' <ul>';
$link = Conectarse();

// En una variable tipo STRING escribimos la consulta.
$sql = " SELECT comment_ID, comment_post_ID, comment_author, comment_content FROM wp_comments WHERE comment_approved = 1 AND comment_type = '' ORDER BY comment_date_gmt DESC LIMIT 4 ";

// Con la función 'mysql_query()' realizamos la consulta que queramos en la base de datos

// seleccionada previamente. Es decir le entramos la consulta que habíamos llamado '$sql'

$result = mysql_query($sql) or die('La siguiente consulta contiene algún error:<br>nSQL: <b>$sql</b>');

// Ahora tenemos en '$result' todos los registros de la consulta, ahora debemos mostrarlos uno a uno

while ($row = mysql_fetch_array($result))

{ // El while ya deberíamos saber que hace, 'mysql_fetch_array()' avanza uno a uno los registros

// Como hemos metido un registro en $row, tendremos que mostrar lo que nos interese en pantalla.

echo '<li><a href="http://www.TUWEB.com/?p='.$row['comment_post_ID'].'/#comment-'.$row['comment_ID'].'">'.$row['comment_author'].'</a>:&nbsp;'.$row['comment_content'].'</li>'; // Llamamos los diferentes campos que componene nuestro Loop

}
echo ' </ul>';


Pues así de fácil. No te olvides de cambiar TUWEB  po rexactamente eso, tu web. Como he dicho está estilizado con una lista ordenada ul y li que se puede modificar a gusto de usuario.

Cualquier cosa que necestáis hacer, i habéis probado y no os sale, posteadlo e intentare hacer lo que pueda.

Saludos.

Descarga deirecta de series, películas, música y mucho más! en
Planetdescargas.com

 

juanpons14

Perdonad por no publicar en el Foro correcto, pero en Tutoriales no me dejaba publicar, será que es asi el sistema. Un saludo

Descarga deirecta de series, películas, música y mucho más! en
Planetdescargas.com

 

DoctorMalboro


juanpons14

¿Como que por qué uso tablas de Wordpress?

En general esto sirve para cualquier DB exterior a SMF no tiene porque ser una tabla de Wordpress yo puse el ejemplo de Wordpress porque es la "otra" aplicacion que tengo trabajando en conjunto e integrada con SMF.

¿Responde eso a tu pregunta?

Descarga deirecta de series, películas, música y mucho más! en
Planetdescargas.com

 

DoctorMalboro

Aaaah... ahora entendí el tutorial... yo pensaba que el titulo era cualquiera :P

Muy interesante... puede ser útil.

juanpons14

Quote from: DoctorMalboro on August 12, 2010, 11:18:25 PM
Aaaah... ahora entendí el tutorial... yo pensaba que el titulo era cualquiera :P

Muy interesante... puede ser útil.

Jajaja...si la verda para mi caso es bastante útil, lo bueno es que tiene multiples utilidades..

¿Qué es lo que habias entendido? jaja puedes cambiar el título si quieres para que se entienda mejor.

Descarga deirecta de series, películas, música y mucho más! en
Planetdescargas.com

 

juanpons14

He añadido la 2ª parte que acabo de crear donde pongo algunos ejemplos utilizable en SMF que están 100% provados en mi web y funcionando.
Son bastante interesantes para que veáis lo que se puede hacer.

Estos dos ejemplos están puestos en mi página y ahora mismo funcionan en el footer del foro como "Mensajes Recientes" y "Ultimos comentarios"....Espero que os sirva

Saludos y perdon por el doble post

Descarga deirecta de series, películas, música y mucho más! en
Planetdescargas.com

 

Advertisement: