Tutorial [ Tutorial ] Plugin MyBB Base & Plugin MySql
#1
Bug 
[ Tutorial ] Plugin MyBB Base & Plugin MySql

( Ejemplos para Crear Plugins en MyBB Board Software Forum)


Introduccion

Deseo hacer un tutorial de lo aprendido a través de los foros de soporte MyBB
En lo personal, creo que son el mejor software de foros en la actualidad, en este tiempo presente. hace años atras, empece el estudio de foros con [PhpBB2, PhpBB3, Smf... etc] durante aproximadamente 7 años, pero al final, lo que me desanimo por ejemplo, de los foros PhpBB, son tantos bugs y agujeros de seguridad. por eso no volvi a estudiar el foro PhpBB, fueron muchos años actualizando y estudiando el board software que al final, de ver tantos fallos de seguridad, opte por dejarlo al lado.

En cambio, MyBB me ha vuelto a dar esa pasión por aprender sobre el desarrollo, lo útil que es el software MyBB de una forma simple, robusta y con Buenos procesos de seguridad, en lo personal me declaro un admirador del software MyBB 1.8.x

Actualmente están desarrollando la version MyBB2.0 Base, como características, es un software completamente nuevo, desarrollado con Laravel 5.1, para estar a la vanguardia de los smarthpones , dispositivos celulares y tables, Mas informacion sobre las nuevas caracteristicas e implementación de desarrollo: Version MyBB2.0 Feat.
La evolución promete mucho, y esta comandando por Euan T, para mas información: Links soporte MyBB2.0 .

Mi opinion personal sobre este cambio en todo el codigo es que debe ser bueno, mucha gente usa dispositivos Celulares, Tablets, Smarthpones... Etc;
En lo personal, Mi economia es muy limitada, No Uso Tablets, Ni Celulares para Navegar, No Smarthpones, No Facebook. 

Solo Uso la Computadora Para Administrar mis proyectos y Foros.
Pa eso tengo la computadora! y me agrada porder Estudiar la version mybb 1.8.x 


Cuando lanzen MyBB2.0 Lo empezare a estudiar tambien en las areas de InstalaciónActualización, Merge System, & el nuevo Theme, asi voy aprendiendo lo basico de esa version! 
Aunque por ahora, me concentrare en MyBB 1.8.x Tiene mucho codigo & esta muy bien desarrollado Para administrar mis foros desde mi Computadora. 


[ 1 ] Plugin Base


Un plugin cuenta con ciertas características, para que el software MyBB lo interprete y funcione correctamente, son comandos simples y faciles de crear.

Los Plugins Permiten un mejor desarrollo de aplicaciones para el Software de Foros, una mejor seguridad & administración de MyBB, Permitiendo de una manera modular: Activar, Instalar, Desactivar, Desinstalar; 
Con este modulo de una forma simple y facil, para la administración del Board Software MyBB. 
Para Desarrollar los Plugin deberá de tener un Conocimiento en Php & MySql, y logicamente saber de la base de MyBB.

Para este Ejemplo, Vamos a usar lo Basico, Desarrollar un Plugin Para Activarlo y usarlo en MyBB 1.8.x.

Se requiere crear un archivo con la siguiente información base:

Name: Nombre del Plugin
Description: Descripción de lo que hace el Plugin
Website: Webside del Plugin (Optional)
Author: Nombre del Autor del Plugin
Authorsite: La URL del Autor del Plugin website (Optional)
Version: Numero de la Version del plugin
Guid:  ID Por the MyBB
Codename: Unique codename para el plugin in la Seccion de Mods.

Esta Base deberá ser creada en un archivo .PHP y Subirla en la Carpeta de MyBBinc/plugins/NombreDelPlugin.Php 

[Image: mybb-plugin-1.jpg]

PHP Code:
<?php
// Disallow direct access to this file for security reasons
if(!defined("IN_MYBB"))
{
 
   die("Direct initialization of this file is not allowed.");
}

function 
myplugin_info()
{
 
   return array(
 
       "name"          => "",
 
       "description"   => "",
 
       "website"       => "",
 
       "author"        => "",
 
       "authorsite"    => "",
 
       "version"       => "1.0",
 
       "guid"          => "",
 
       "codename"      => "",
 
       "compatibility" => "*"
 
   );
}

function 
myplugin_install()
{

}

function 
myplugin_is_installed()
{

}

function 
myplugin_uninstall()
{

}

function 
myplugin_activate()
{

}

function 
myplugin_deactivate()
{




[ 1.1 ] Plugin Hooks


En MyBB 1.8.x un Hook es la funcionalidad que proporciona el software para que los Plugins Creados puedan ReUtilizar el codigo, llamado Hook, Permitiendo una mejor funcionalidad del Software al poderse utilizar, codigo Hook, aca una lista de los Hooks.

Para mas información sobre esta forma de usar los Hooks en los plugins, en este URL con mas Soporte


[ 1.2 ] Plugin Creando Nueva Pagina, Ejemplo


Vamos a crear un Simple Plugin en MyBB 1.8.x vamos a trabajar con archivos separados, para estudiarlos de una mejor manera: 
  • Un Archivo .Php con el contenido del Plugin Base y la informacion de su desarrollo. 
  • Un Archivo .Php que estará en el Root de MyBB, donde programaremos las funciones del plugin. 
  • Un Archivo Template para personalizar nuestro Plugin MyBB.
Hace Poco Cree este Plugin, XML Database League, lo traigo como ejemplo:


[ Plugin Base ]
Este Archivo va en el Folder Plugins de MyBB



MyBB: inc/plugins/xmleague.php .
PHP Code:
<?php

//Disallow direct Initialization for extra security.

if(!defined("IN_MYBB"))
{
 
   die("You Cannot Access This File Directly. Please Make Sure IN_MYBB Is Defined.");
}

// Hooks
$plugins->add_hook('global_start''xmleague_global_start');

// Information
function xmleague_info()
{
return array(
 
       "name"  => "XML Database League",
 
       "description"=> "Database Leagues Standing Development in XML ",
 
       "website"        => "http://mybb.pinostudio1.com/",
 
       "author"        => "DiegoPino",
 
       "authorsite"    => "http://diegopino.blogspot.com",
 
       "version"        => "1.2",
 
       "guid"             => "",
 
       "compatibility" => "18*"
 
   );
}

 
?>


[ Archivo .Php ]
Este Archivo de nombre, xml-database-league.php  va en el Root de MyBB, Este Archivo es el que contiene las Funciones Programadas del Plugin con su desarrollo.


MyBB: Root/xmleague.php .
PHP Code:
<?php
define
("IN_MYBB"1);
define('THIS_SCRIPT''xml-database-league.php');

require_once 
"./global.php";

// Only required because we're using misc_help for our page wrapper
$lang->load("misc");

// Add a breadcrumb
add_breadcrumb('XML Database League | '"xml-database-league.php");

eval(
"\$page = \"".$templates->get("xmleague_template")."\";");
output_page($page);

?>


[ Template ]
Este Codigo, de nombre Template, lo podemos crear con el Software de MyBB, nos sirve el Template para darle una presentación mejor detallada al plugin con sus funciones y desarrollo, dependiendo de como este creado el Plugin.


Add Template » xmleague_template





[ Nota ] Como Se puede Observar, La Creación de un Plugin consta de Pasos Basicos muy Sencillos, para que el Software pueda aceptar el Plugin.
Si deseas el Codigo Completo, de este ejemplo, lo puedes descargar de la Pagina Oficial de MyBB: Mods & Plugins
Ejemplo OnLine: Plugin XML Database




[ 1.3 ] Plugin Consultando Estadisticas de MyBB, Ejemplo

En este Ejemplo, mostrare como hacer consultas de estadísticas del Board Software MyBB 1.8.x, ya sabemos como construir el Plugin Base, Ahora deseo entrar en las Consultas de Datos de MyBB, hace poco Cree este Plugin de Nombre Signature GD, lo actualizare dentro de poco,  programado con GD Library para generar Imagenes y al mismo tiempo para estudiar las Estadisticas & Consultas

Como ya hemos estudiado la forma del Plugin Base, nos concentraremos en el codigo del Plugin para generar consultas básicas del Board Software MyBB y aprender un poco mas, como por ejemplo:
  • Forum Name ( Nombre del Foro )
  • Username ( Usuario Registrado )
  • Members ( Numero Total de Usuarios Registrados)
  • Post ( Numero Total de Post en el Board Software )
  • Threads ( Numero Total de Hijos en el Board Software )
  • Avatar ( Imagen personalizada de Usuario )
PHP Code:
<?php
// Codigo para leer Stats de MyBB

"Forum: "$mybb->settings['homename']);
"Username: "$mybb->users['username']);
"Members: "my_number_format($stats['numusers']));
"Posts: "my_number_format($stats['numposts']));
"Threads: "my_number_format($stats['numthreads']));
"Avatar: "$mybb->users['avatar']);

?>

Deseo Mostrar el Resultado del Plugin con Sus Consultas, para entrar a Explicar el Codigo mas simple.

[Image: mybb-plugin-2.jpg]

Para este caso, como deseamos consultar las estadísticas de Board Software MyBB, debemos de leer los Stats, al mismo tiempo consultar los usuarios, con el siguiente codigo, ejemplo$stats = $cache->read ("stats");
PHP Code:
<?php
//hacemos el codigo MyBB

define("IN_MYBB"1);
define("KILL_GLOBALS"1);
define("NO_ONLINE"1);
require 
"../inc/init.php";
$stats $cache->read("stats");  
$query 
mysqli_query("SELECT * FROM mybb_users");

?>

La consulta queda de fácil interpretación, ahora debemos desarrollar el código para generar nuestra Imagen con libreria GD, los pasos de esta consulta son simples, pues el codigo me generara una imagen que consulta los datos de Estadísticas de MyBB 1.8.x , para este ejemplo, observar el codigo de consulta:
 $mybb->settings['homename']);

PHP Code:
<?php
//hacemos el codigo MyBB
//Inicio de la Creacion de Imagen
Header ("Content-type: image/png");

//Definimos el Template a Usar, el Default
$imagen imagecreatefrompng('template_01.png');

// Dimensiones de la imagen: 450px x 150px
$w_im imagesx($imagen);
$h_im imagesy($imagen);

// Codigo para leer Stats de MyBB

imagefttext($imagen1401050$clr_amarillo$ttf_black "Forum: "$mybb->settings['homename']);
imagefttext($imagen1401070$clr_azul$ttf_black "Username: "$mybb->users['username']);
imagefttext($imagen1401090$clr_rojo$ttf_black"Members: "my_number_format($stats['numusers']));
imagefttext($imagen14010110$clr_blanco$ttf_black"Posts: "my_number_format($stats['numposts']));
imagefttext($imagen14010130$clr_blanco$ttf_black"Threads: "my_number_format($stats['numthreads']));
imagefttext($imagen14031090$clr_azul$ttf_black "Avatar: "$mybb->users['avatar']);
//Relleno de amarillo para el avatar    
imagefilledrectangle($imagen3109040004000imagecolorallocatealpha($imagen11025575));

// Grosor para la imagen
$grosor 7;

?>

[ Nota ] En este ejemplo, observamos que las consultas a la base de datos, son de fácil interpretación, observe que, como estamos generando una imagen, el template MyBB  lo estamos llamando desde el Root, signaturegd.php los templates no son complicados, se pueden crear como vimos en el video anterior, desde el panel de administracion, también se puede crear el template desde el Plugin Base, o como en este ejemplo, desde un archivo separado, hospedado en el Root de MyBB. 
Aca el Codigo, Observa$template


PHP Code:
<?php
// Inicio de MyBB Plugin
define("IN_MYBB"1);
define('THIS_SCRIPT''signaturegd.php');

// Only required because we're using misc_help for our page wrapper
require_once "./global.php";

$lang->load("misc");

// Add a breadcrumb
add_breadcrumb('Signature GD'"signaturegd.php");

$template '
<html>
<head>
<title>Signature GD</title>
{$headerinclude}
</head>
<body>

{$header}

<p>Click on the <b>Image Template</b> GD Signature, Template Select Example:</p>

 <form action="signaturegd.php" method="GET">
     <input type="image" src="gdsignature/template_01.png" alt="Submit" width="400" height="133"><br>
 </form>


<p><b>Signature GD</b> Library: Dynamic Creation of Images Graphics Draw with Stats Forum software MyBB </p>

<object data="gdsignature/gd.php" type="image/png" height="134" width="400" form="gd_signature" name="Signature GD"></object>

<p><i>for the next version</i> 
    <ul>
          <li>Add <b>Template Select</b> files</li>
          <li>Add <b>Avatar</b> User</li>
        <li>Performance Resize Images Signature GD to: <b>400 x 133 | 350 x 117 | 300 x 100</b>  </li>
        <li>Performance with more user queries Stats MyBB</li>
        <li>Performance for <b>Users Select</b> Type of <b>Queris Display</b> in Signature GD</li>
        <li>Save image file Signatures of users, File in Folder Root GdSignature</li>
        <li>URL Performance for Signature Users, can use  friendly URL .Png  </li>
             <li>More Suggest are welcome...</li>
        <li>Enjoy!</li>
    </ul>
</p>
<p><b> Signature GD </b> con Template, Example Code</p>
<p>{$gd_signature}</p>
<p><b> Resize Image: </b> for the Next Version,  </p>
<iframe src="gdsignature/gd.php">
{$footer}
</body>
</html>

'
;

$template str_replace("\'""'"addslashes($template));
eval(
"\$signaturegd=\"".$template."\";");
output_page($signaturegd);

?>
 

Si deseas el Codigo Completo, de este ejemplo, lo puedes descargar de la Pagina Oficial de MyBB: Mods & Plugins, Proximamente Actualizare el Plugin
Ejemplo OnLine: Plugin Signature GD



[ 1.4 ] Plugin Con MySql, Ejemplo


En este ejemplo, deseo crear una tabla en MySql, Para Administrarla desde el Panel de Administración del Board Software MyBB 1.8.x, los pasos para crear el plugin, dependen de como se desea desarrollar el mismo, se puede crear por ejemplo: 
El template desde el Panel de Administración, Desde un Archivo, utilizar un Hook, asi que varia mucho su desarrollo dependiendo del tipo de plugin. 

Para este caso, vamos a crear algo sencillo, para explicar. 
Como siempre, los tutoriales, los desarrollo con fútbol, para este ejemplo, deseo crear un Plugin en el cual pueda Controlar desde el Panel de Administración MyBB 1.8.x,:
  • Administrar Equipos. 
  • Su Nombre.
  • Logo.
  • Ciudad. 
  • Fans o seguidores del Club de futbol.
MySql 

CREATE TABLE ClubTeams (
 Id (20),
 Nombre varchar (40),
 Imagen ),

 Description );

+--------------+
| ClubTeams |
+--------------+
| Id              |
| Name         |
| Image        |
| Description |
+-------------+

CREATE TABLE ClubFans (
 Id (),
 User Id (),
 Team 
);

+--------------+
| ClubFans    |
+--------------+
| Id              |
| User Id       |
| Team         |
+-------------+

Vamos a concentrarnos en la creación de la tabla, para este ejemplo, se deberá de crear desde el Plugin Base, donde podamos escribir el codigo para MySql, en el Plugin Base tambien se deberá escribir el código para desinstalar la tabla MySql.
Este seria el Codigo: ejemplo:
$db->write_query("CREATE TABLE IF NOT EXISTS `".TABLE_PREFIX."clubteams`

PHP Code:
// Instalacion ClubsTeams
function clubsteams_install()
{
    global 
$db;

// Creamos Base de Datos MySql
    
    
$db->write_query("CREATE TABLE IF NOT EXISTS `".TABLE_PREFIX."clubteams` (
      `id` int(10) unsigned NOT NULL auto_increment,
      `name` varchar(240) NOT NULL,
      `image` text,
      `des` text,
      PRIMARY KEY  (`id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;
                     "
);

    
$db->write_query("CREATE TABLE IF NOT EXISTS `".TABLE_PREFIX."clubfans` (
      `id` int(10) unsigned NOT NULL auto_increment,
      `uid` int(10) default NULL,
      `team` int(10) default NULL,
      PRIMARY KEY  (`id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;
                     "
); 
Como se puede observar, todo este código va en el Plugin Base, Se debera de implementar la programación para la desinstalacion de las tablas. ejemplo:
PHP Code:
function clubsteams_uninstall()
{
    global 
$db;
    
    
$db->write_query("DROP TABLE ".TABLE_PREFIX."clubteams");
    
$db->write_query("DROP TABLE ".TABLE_PREFIX."clubfans"); 

Con este archivo .Php, donde esta el Plugin Base, tambien se puede crear los Templates para el plugin. en los ejemplos anteriores, hemos visto como se pueden crear desde el Panel de Administracion de MyBB o desde un archivo, para este caso, lo vamos a implementar desde el Plugin Base, este seria el codigo, ejemplo:

PHP Code:
// Templante que Muestra la info para MyBB     
    
$temp = array(
        
"sid"        => "NULL",
        
"title"        => "club_team",
        
"template"    => $db->escape_string('
            <TABLE BORDER=0 CELLPADDING=10>
                <TR>
                        <TH ROWSPAN=10 ALIGN=LEFT ><img src="{$team_image}" WIDTH=160 HEIGHT=160 alt="Imagen del Team"><br>{$team_name} <br> {$team_des} <br>Fans Total:<br> $members_num</TH>
                        <TD BGCOLOR="#99CCFF">Clubs Fans</TD> 
                    </TR>
                <TR>
                        <TD>{$members_bit}</TD> 
                    </TR>
    
                </TABLE>                    
        <br />'
),
        
"sid"        => "-1",
        
"version"    => "1.0",
        
"status"    => "0",
        
"dateline"    => time(),
    );
    
    
$db->insert_query("templates"$temp);

// Template MyBB  para Club_User
    
    
$temp = array(
        
"sid"        => "NULL",
        
"title"        => "club_user",
        
"template"    => $db->escape_string('<tr><td class="trow1"><a href="member.php?action=profile&uid={$members_uid}">{$user_name}</a></td><td class="trow1">{$members_pos}</td></tr>'),
        
"sid"        => "-1",
        
"version"    => "1.0",
        
"status"    => "0",
        
"dateline"    => time(),
    );
    
    
$db->insert_query("templates"$temp); 


en el archivo, tambien se deberá de incluir el código para desintalar los Templates y las Tablas MySql, Codigo ejemplo: 
PHP Code:
<?php
function clubsteams_uninstall()
{
    global 
$db;
    
    
$db->write_query("DROP TABLE ".TABLE_PREFIX."clubteams");
    
$db->write_query("DROP TABLE ".TABLE_PREFIX."clubfans");

// Borramos query de forum software al desinstalar
    
    
$db->delete_query("templates","title ='club_index'");
    
$db->delete_query("templates","title ='club_team'");
    
$db->delete_query("templates","title ='club_team_none'");
    
$db->delete_query("templates","title ='club_user'");
    
$db->delete_query("templates","title ='club_user_none'");
    
    
rebuild_settings();    
}
?>

Asi quedaria en el Panel de Administracion de MyBB, este ejemplo!
[Image: mybb-acp.jpg]

Ahora, el Archivo que lleva programada las funciones del Plugin y su desarrollo deberán de ir en el Root o Carpeta de Admin:

MyBB: Admin/Modules/Clubs . 

Este seria el Codigo Ejemplo:

PHP Code:
<?php


if(!defined("IN_MYBB"))
{
    die(
"Direct initialization of this file is not allowed.<br /><br />Please make sure IN_MYBB is defined.");
}

//MyBB Panel Admin, Add Team
$page->add_breadcrumb_item("Create Team""index.php?module=clubs/addteam");

if(
$mybb->input['save']=="save")
{
    if(empty(
$mybb->input['name']) || empty($mybb->input['des']))
    {
        
flash_message("One of the required fields was not correctly filled in"'error');
        
        
$title $mybb->input['name'];
        
$image $mybb->input['image'];
        
$des $mybb->input['des'];
    }
    else
    {
        
flash_message("Your team has been created"'success');
        
        
$insert_array = array(
                    
"name"            => addslashes($mybb->input['name']),
                    
"image"            => addslashes($mybb->input['image']),
                    
"des"                => $db->escape_string($mybb->input['des']),
                    
                );
                
        
$db->insert_query("clubteams"$insert_array);
    }
}

//MyBB Panel Admin, Add Team start the page
$page->output_header("Create Team");

$form = new Form("index.php?module=clubs/addteam""post"""1);

$form_container = new FormContainer("Create Team");
echo 
$form->generate_hidden_field("save""save", array('id' => "save"))."\n";

$form_container->output_row("Name""The teams name"$form->generate_text_box('name'$name, array('id' => 'name')), 'name');
$form_container->output_row("Image""The image URL that will appear on the clubs page"$form->generate_text_box('image'$image, array('id' => 'image')), 'image');
$form_container->output_row("Description City""City of the team"$form->generate_text_box('des'$des, array('id' => 'des')), 'des');

// close the form container
$form_container->end();

// create the save button
$buttons[] = $form->generate_submit_button("Save");

// wrap up the form
$form->output_submit_wrapper($buttons);
$form->end();

// end the page
$page->output_footer();

?>


Si deseas el Codigo Completo, de este ejemplo, lo puedes descargar del Post: Plugin Development

Ejemplo OnLine: ClubsTeams.php


Este Tutorial se ira actualizando, por ahora, deseo dejarlo asi, para mas adelante implementar mas ejemplos para crear Plugins


Referencias:
[Image: 51.jpg]
We11World [ Winning Eleven ] , Blog , Archive Forums
Reply


Possibly Related Threads...
Thread Author Replies Views Last Post
Video
Audio & Video
 [VideoTutorial] MyBB 2.0 Install a Development Copy
DiegoPino 1 1,146 07-02-2016, 04:02 AM
Last Post: DiegoPino
Video Game Graphic Studio Tutorial Banderas DiegoPino 0 790 10-13-2015, 04:30 AM
Last Post: DiegoPino

Forum Jump:


Users browsing this thread: 1 Guest(s)