Cerrar Ventana

Algunas cookies de este sitio son esenciales, y el sitio no funcionará como se espera sin ellas. Estas cookies se establecen en el momento de enviar un formulario, inicie sesión o interactuar con el sitio realizando una acción que va más allá de hacer clic en un simple enlace.


Leer Más

Somos un foro de soporte en español que no tiene publicidad y tiene muchas cosas gratuitas aportadas por la comunidad, contribuye con el foro para poder así obtener alguna membresía de manera gratuita.
SoporteMyBB tiene un total de
1124 temas de soporte.
0 quedan aún por resolver, 244 han quedado obsoletos y 880 han sido resueltos.
Aún no tienes una cuenta, regístrate es gratis.

Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Como crear un plugin.
 Whiteneo
Equipo de Soporte

Estado: Sin conexión Soporte Técnico
354
4,693
Mexico
5
93
576
21 January 2012, 20:54
#1
1
Mejor respuesta del mensaje Este tema con la cuenta de admin.
  • URL del foro: Registrate o inicia tu sesión para ver este contenido
  • Versión del foro: 1.6.5
  • Actualización: ninguna

Bien, he probado dos cuentas y de diferentes modos y todo funciona correctamente, pero espero encontrar si hay algun error, ya que me he dado cuenta de que quiza si pones algun dato erroneo en la configuración del plugin, pues te mande mal las cosas.

Para comprobar que funciona correctamente, debes verificar las estadísticas. Hare un video para mostrar el correcto funcionamiento entonces si todo va bien.
 
 Whiteneo
Equipo de Soporte

Estado: Sin conexión Soporte Técnico
354
4,693
Mexico
5
93
576
11 February 2012, 01:56
#2
0
El plugin esta funcionando correctamente, cuando tengo mas de tres temas de soporte por resolver es que me manda un mp avizandome que no puedo crear mas temas y me manda un mensaje sobre esto Gran sonrisa.

No puedo crear nuevos temas, esta versión es de pruebas aun ya que la final no recuerdo de que ira aún en cuanto me ponga en contacto con Abdon veremos que cosa.,
 
 Whiteneo
Equipo de Soporte

Estado: Sin conexión Soporte Técnico
354
4,693
Mexico
5
93
576
20 October 2013, 01:20
#3
0
Primero que nada debemos saber lo básico, que MyBB maneja sus propias funciones y aparte de eso, nosotros debemos respetar la estructura de tus plugins.

1.- El nombre de tu plugin debe ser igual al de las funciones principales de MyBB para ser reconocido, esto es:

miplugin.php -> Nombre de mi plugin.
miplugin_install
miplugin_uninstall
miplugin_activate
miplugin_deactivate
miplugin_is_installed

Las demás puedes llamarlas como desees, las que incluirás en los enganches de MyBB. Aunque es recomendable ponerle nombres alusivos a tu plugin para evitar que haya variables repetidas Gran sonrisa.

miplugin_funcion1
miplugin_funcion2

En fin, después de esto debemos comenzar con nuestro primer plugin, primero que nada abriremos un archivo con tu editor de textos y comenzaremos a escribir nuestro código.

1.- Seguridad del archivo, para que no sea abierto por accidente y no tengan acceso a el:

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


2.- Llamado a los enganches a utilizar:

$plugins->add_hook("global_start""miplugin_funcion"); 

Aqui pondremos el nombre del enganche donde aplicaremos el uso de nuestra nueva funcion Gran sonrisa. Hay varias formas de manejarlo, como por ejemplo:

$plugins->add_hook("global_start""miplugin_funcion"4"miarchivo.php"); 
Lo cual nos da una prioridad de ejecución y el archivo donde se ejecutará dicha sentencia en ese orden, pero con esto se requiere de mayor seguirdad a la hora de escribir, asi que la primer forma nos va bien Gran sonrisa.

3.- Escribir la información del plugin que vamos a visualizar nosotros al ir a la zona de Plugins:

function miplugin_info() { 
    global 
$mybb$db;

    
$miplugin_config_link '';
    
$query $db->simple_select('settinggroups''*'"name='miplugin'");
    if (
count($db->fetch_array($query)))
    {
        
$miplugin_config_link '(<div style="float:right;"><a href="index.php?module=config&action=change&search=miplugin" style="color:#035488; background: url(../images/usercp/options.gif) no-repeat 0px 18px; padding: 18px; text-decoration: none;">  Configurar Plugin</a></div>)';
    }
    
    return array( 
        
"name" => "Mi primer plugin!"
        
"description" => "Este es mi primer plugin..." $miplugin_config_link
        
"website" => "http://www.ejemplo.com"
        
"author" => "Dark Neo"
        
"authorsite" => "http://darkneo.skn1.com"
        
"version" => "1.0"
        
"guid" => ""
        
"compatibility" => "*" 
    
); 


La funcion debe llevar como dije el nombre del archivo, seguido del nombre de la función prestablecida de MyBB, estos datos siempre son importantes respetarlos o no te funcionará tu plugin Gran sonrisa.

Los llamados a las variables globales van primeramente, que son para decidir que vamos a utilizar como objetos de nuestra función Gran sonrisa, sin embargo por ahora dejo este ejmplo que es como me gusta trabajar a mi, un enlace de configuración directo, y las opciones describiendo mas o menos que hace cada cosa Gran sonrisa.

Lo segundo es crear el enlace que les digo, aunque no es forzoso, pero a mi me va mejor asi Gran sonrisa.

tercero es traer el array de datos:

name, es el nombre de tu plugin
description, la descripción alusiva a lo que hace tu plugin Gran sonrisa.
website, el sitio donde esta instalada la mod.
author, nombre del creador del plugin
authorsite, el sitio web del autor, para localizarlo si es necesario en caso de tener dudas respecto a su plugin.
version, la version actual de tu plugin, la cual es prograsiva respecto a los nuevos cambios que hagas.
guid, la guia que identifica tu plugin de los demás y que permite que tengas un rastreo desde la zona de mods de MyBB, ellos mismos te lo dan cuando envías tu plugin, asi que antes de comprimirlo crealo y antes de que te digan que subas el archivo te darán esta guía para que tu plugin pueda ser puesto ahi y decir en que versión va, si hay updates desde la zona de plugins de MyBB,. etc.
compatibility, Compatibilidad de tu plugin, por defecto puedes poner que para todas las versiones, con un *, pero puedes utilizar versiones expresas, para decir que solo funciona en x version o cantidad de versiones:

Ejemplos:
12* - Funciona en versiones 1.2.x de MyBB
14* - Funciona en versiones 1.4.x de MyBB.
16* - Funciona en versiones 1.6.x de MyBB.
14*, 16* - Funciona en versiones 1.4.x y 1.6.x de MyBB
1214, 1416, 1611 - Funciona solo en las versiones 1.2.14, 1.4.16 y 1.6.11, que por ahora son las finales de cada área Gran sonrisa.

Y asi sucesivamente, es preferible poner en la lista las versiones donde los hayas probado, aunque se supone que si funciona en la versión mas reciente, debiera funcionar en las previas, según lo que mencionan en el sitio oficial, pero lo mejor es asegurarte de ello Gran sonrisa.

4.- Cuando instalamos crear las opciones a elegir, o en su caso nuevas tablas o cosas que debamos utilizar, dependiendo de la funcionabilidad del plugin, en este caso no es necesario instalar nada, asi que simplemente creamos las opciones.

function miplugin_install() { 
    global 
$db
    
    
$setting_group = array( 
        
'name' => 'miplugin'
        
'title' => '[Plugin] miplugin (Ajustes)'
        
'description' => 'Descripción: Ajusta las opciones de tu plugin.'
        
'disporder' => '1'// Orden de desplegado de la información del plugin en el panel de opciones de configuración 
        
'isdefault' => 'no' ); 
    
$db->insert_query('settinggroups'$setting_group);
    
$gid $db->insert_id();
    
    
$miplugin_setting = array( 
        
'name' => 'miplugin_op1'
        
'title' => 'Primer Opción'//Titulo de la opción
        
'description' => 'Elección entre Si o No'// Descripción de lo que hace nuestra opción
        
'optionscode' => 'yesno'// Muestra dos opciones Si/No, para elegir.
        
'value' => '1'// Por defecto queda activada, utiliza 0 para desactivarla (Opción: No)
        
'disporder' => '1'// Orden de desplegado en tus opciones de configuración del plugin.
        
'gid' => intval($gid) ); 
    
$db->insert_query('settings'$miplugin_setting);
    
    
$miplugin_setting = array( 
        
'name' => 'miplugin_op2'
        
'title' => 'Segunda opción del plugin'
        
'description' => 'Esta es una caja de texto.'
        
'optionscode' => 'text'// Caja de Texto
        
'value' => 'Lorem ipsum'// Contenido por defecto de la caja de texto
        
'disporder' => '2'// Orden de desplegado en tus opciones de configuración del plugin.
        
'gid' => intval($gid) ); 
    
$db->insert_query('settings'$miplugin_setting); 
        
    
$miplugin_setting = array( 
        
'name' => 'miplugin_op3'
        
'title' => 'Tercera opción del plugin'
        
'description' => 'Esta es una area para colocar texto, distinta a la caja de texto común.'
        
'optionscode' => 'textarea'// Esta es una caja amplia de texto (textarea) 
        
'value' => 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.'// Contenido de la caja de texto amplia
        
'disporder' => '3'// Orden de desplegado en tus opciones de configuración del plugin.
        
'gid' => intval($gid) );        
    
$db->insert_query('settings'$miplugin_setting); 
    
    
$miplugin_setting = array( 
        
'name' => 'miplugin_op4'
        
'title' => 'Cuarta opción del plugin'
        
'description' => 'Caja de Selección.'
        
'optionscode' => 'select \n 1='.$db->escape_string("Opcion Uno").' \n 2='.$db->escape_string("Opcion Dos").' \n 3='.$db->escape_string("Opcion Tres"), // Caja de selección múltiple de textos que contiene los valores op1, op2, op3.
        
'value' => '1'// Valor por defecto de la caja
        
'disporder' => '4'// Orden de desplegado en tus opciones de configuración del plugin. 
        
'gid' => intval($gid) ); 
    
$db->insert_query('settings'$miplugin_setting); 
    
    
// Actualiza la información del archivo ./inc/settings.php 
    
rebuild_settings(); 
    


Ya intente explicarlas dentro del plugin para evitar problemas, son muy intuitivas cada una de estas opciones y las que son permitidas básicamente por este sistema.

5.- Crear una opción que nos diga si esta instalado el plugin, mediante una consulta sencilla de que si existe la opción x, devuelva true, en caso contrario, devuelva false.

function miplugin_is_installed() { 
    global 
$db$mybb;
    if(
$mybb->settings['miplugin_op1'])    {
        return 
true
    } 
        return 
false


Esta no la he probado aún, pero se supone que asi debe funcionar, casi siempre se comprueba que una tabla creada exista, y asi asegurarnos de que al eliminar pues no este instalado dicho plugin, aunque por ahora es por motivo de pruebas, cada quien puede jugar con estos valores y descubrir como hacerlos funcionar mejor Gran sonrisa.

6.- Eliminar las cosas que se crearon, en este caso mis opciones de la base de datos Gran sonrisa.

function miplugin_uninstall() { 
    global 
$db
    
/*Eliminamos los datos de la base de datos, de las opciones creadas en nuestro plugin*/
    
$db->write_query("DELETE FROM ".TABLE_PREFIX."settings WHERE name IN ('miplugin_op1','miplugin_op2','miplugin_op3','miplugin_op4')"); 
    
$db->write_query("DELETE FROM ".TABLE_PREFIX."settinggroups WHERE name = 'miplugin'"); 
    
/*Recarga la información de tu archivo config*/
    
rebuild_settings(); 


7.- Creamos las opciones de activar y desactivar, que consisten en lo mismo que las previas de install y uninstall, sin embargo crearemos aqui los cambios en plantillas, podemos hacer mas cosas, como crear hojas de estilo, plantillas, etc. Pero como dije es algo sencillo, asi que simplemente pegamos esto Gran sonrisa.

function miplugin_activate() {
    global 
$db
    
/*Archivo requerido para escribir la información en las plantillas*/
    
require miforo_ROOT.'/inc/adminfunctions_templates.php'
    
/*Escribirmos la información dentro de la plantilla index*/
    
find_replace_templatesets"index"'#'.preg_quote('{$boardstats}').'#''{$boardstats}{$randomvar}' ); 
}

function 
miplugin_deactivate() { 
    global 
$db
    
/*Archivo requerido para escribir la información en las plantillas*/
    
require miforo_ROOT.'/inc/adminfunctions_templates.php'
    
/*Escribirmos la información dentro de la plantilla index*/
    
find_replace_templatesets"index"'#'.preg_quote('{$randomvar}').'#''' ); 


Para ahorrarme tiempo las explique detalladas dentro de cada cosa, solo falta decir que randomvar es nuestra variable, podemos ponerle el nombre que queramos, pero igualmente debemos hacerlo en los llamados posteriores Gran sonrisa.

8.- Por ultimo creamos nuestras funciones y sus respectivos enganches, los cuales pueden ir en cada función o hasta arriba en la lista de funciones, yo prefiero hacerlo asi, ya que con esto identificamos que funciones existen y poder ir a cada una de ellas dependiendo el enganche que este tomando:

function miplugin_funcion() { 
    global 
$mybb$randomvar
    
/*Traemos el valor a donde queramos mostrarlo xD.*/
    
if($mybb->settings['miplugin_op1'] == '1') { 
    
$randomvar "<table><tr><td>{$mybb->settings['miplugin_op3']}</td></tr></table>"
    } 


Como podemos ver es el nombre de la funcion que coge el enganche que utilizamos y aqui asignamos el valor a nuestra variable randomvar y la declaramos como global para que aparezca, de lo contrario, puede no aparecer en algunas versiones de MyBB, pero mejor que aparezca en todas, declaramos como global y le asignamos los datos del tercer resultado de nuestro plugin que es un cuadro de texto.

Al instalarlo nos aparece el enlace de configuración y mas detalles de cada funcion por los textos asignados y con esto ya tendríamos nuestro primer plugin funcional, pero con esto en la siguiente entrega de tutoriales, veremos como aplicar las opciones expuestas, cada una de las cuatro para que dependiendo una u otra cosa haga algo nuestro plugin, después iremos viendo los estilos, plantillas y mas cosas que son interesantes a la hora de crear plugins tenerlas en cuenta, saludos.

DNT.
 
 angeluz
Chango es mi siervo

Estado: Sin conexión Registrados
2
48
5
Afghanistan
0
0
5
5
26 October 2013, 01:45
#4
0
Hay un detallito...
Siempre falta lo difícil, hacer las funciones XD
Muy buen tuto, aunque no sé de que va el plugin de ejemplo, es un anuncio supongo, no?

Adiós
 
 Whiteneo
Equipo de Soporte

Estado: Sin conexión Soporte Técnico
354
4,693
Mexico
5
93
576
26 October 2013, 06:56
#5
0
Es lo que menciono en el punto 8, ahi creas tu propia función con enganche a la hook donde aparecerá tu contenido, asi mismo el contenido mostrado cogido de las opciones que se encuentran en el plugin, porque asi debe ser y las funciones son algo complejo, pero una ves que le entiendes, es que puedea crear funciones mas complejas.

Estas te sirven para repetir alguna cuestion a detallar, por ejemplo, si yo quisiera que se ejecutara una suma de dos datos al dar un clic, simplemente creo una función que me haga la suma de dos datos y de ahi cojo las variables para esto:

Ejemplo:

Yo me creo un boton con una acción suma:

<a href = "#" onclick="suma($a,$b)">Sumar Datos</a>

Luego de aqui, simplemente agregamos la funcion para esto Gran sonrisa.

function suma($a, $a){

$a = this->value['primer_dato'];
$b = this->value['segundo_dato'];
$resultado = int_value($a) + int_value($b);

echo "La suma de ".$a." y ".$b." nos da como resultado ".$resultado;
}


Y con esto cada que des clic se va a imprimir en pantalla la suma de datos, asignados previamente o como uno desee Gran sonrisa. En el ejemplo puse como resultados ficticios de un array a las variables, pero igualmente puedes ponerle los valores que desees o simplemente jugar con las funciones prestablecidas de MyBB o crear las tuyas propias y anidarlas, en fin es un mundo extenso, donde hay que sabe que se toca, yo la verdad sólo la utilizo en ocasiones porque si es algo laborioso Gran sonrisa.
 
 angeluz
Chango es mi siervo

Estado: Sin conexión Registrados
2
48
5
Afghanistan
0
0
5
5
26 October 2013, 09:01
#6
0
Sí, el problema es que se tiene que aprender php, luego conocer mybb y ya al final, si eres joven aun para entonces, haces el plugin XD

Aquí dejo la lista de hooks(ganchos) para los plugins de mybb...
Registrate o inicia tu sesión para ver este contenido
 
 Whiteneo
Equipo de Soporte

Estado: Sin conexión Soporte Técnico
354
4,693
Mexico
5
93
576
27 October 2013, 20:53
#7
0
Esa lista ya es muy vieja, algunos hooks ya no existen, otros cambiaron de posición y quizá exista alguno que otro nuevo, pero lo que si he visto yo es que cambiaron de posición y unos ya no existen de los de esa lista, hay otros que nisiquiera he probado porque no me he visto en la necesidad Gran sonrisa.

Pero esa lista como referencia es muy útil Gran sonrisa.
 
 angeluz
Chango es mi siervo

Estado: Sin conexión Registrados
2
48
5
Afghanistan
0
0
5
5
28 October 2013, 08:30
#8
0
Es la única ayuda que yo conozco que proporciona mybb.com a los creadores de plugins XD

Adiós
 
 Whiteneo
Equipo de Soporte

Estado: Sin conexión Soporte Técnico
354
4,693
Mexico
5
93
576
1 November 2013, 05:26
#9
0
Si lo que queremos es poner una nueva página, simplemente la vamos a agregar a una función de una hook, como misc, index, etc, en mi caso la voy a poner en el indice Gran sonrisa.

Lo primero es cambiar nuestra hook y nuestra funcion principal únicamente y los resultados deben ser favorables Gran sonrisa.

$plugins->add_hook("index_start""miplugin_funcion"); 


Esa hook nos va a tomar una nueva función anidada al archivo index.php, lo cual aprovecharemos para crear una nueva página cuado ingresemos una ruta x.

Por ejemplo:

function miplugin_funcion(&$page) {
    global 
$mybb$theme$header$headerinclude$footer;
    
    
// Definimos el nombre de la página y en caso de no estar en ella no hacemos nada.
    
if($mybb->input['action'] != "mi_pagina"){
    
        return 
false;
    }
    
    
/*Traemos el valor a donde queramos mostrarlo xD.*/
    
if($mybb->settings['miplugin_op1'] == '1'){
    
// Creamos una nueva página agregada al archivo index, mediante la hook index_start, el resultado será
    // index.php?action=mi_pagina
    
$page "<html>
    <head>
        <title>Mi Pagina</title>
        
{$headerinclude}
    </head>
    <body>
        
{$header}
        <table class=\"tborder\" border=\"0\" cellspacing=\"
{$theme['borderwidth']}\" cellpadding=\"{$theme['tablespace']}\">
            <tr>
                <td align=\"center\" valign=\"top\" class=\"thead\">
                    Mi p&aacute;gina<div style=\"float: right;\"><img src=\"
{$theme['imgdir']}/collapse{$collapsedimg['boardstats']}.gif\" id=\"extra_1_img\" class=\"expander\" alt=\"[-]\" title=\"[-]\" /></div>
                </td>
            </tr>
            <tr>
                <td class=\"trow1\" style=\"
{$collapsed['boardstats_e']}\" id=\"extra_1_e\">{$mybb->settings['miplugin_op3']}</td>
            </tr>
        </table>
        
{$footer}
    </body>
</html>"
;

    
//Mostramos los datos en pantalla y salimos de la función...
    
output_page($page);
    
//return $page;
    
exit;    
    } 


como lo indico si nosotros vamos al navegador y escribimos una ves activado el plugin y que las condiciones se cumplen la ruta:

Registrate o inicia tu sesión para ver este contenido

Nosotros veremos una nueva página con el contenido del plugin, esto es muy útil ya que podemos trabajar con las variables para mostrar distintos contenidos, los cuales iremos viendo poco a poco Gran sonrisa.
 
 Jean Pierre
High Hopes

Estado: Sin conexión Registrados
24
291
112
Peru
0
0
112
22
19 January 2014, 04:42
#10
0
Siempre he querido hacer plugins Gran sonrisa, tengo conocimientos de PHP pero no a un nivel avanzado, creo que para el desarrollo de plugins entra PHP orientado a objetos. Siguiendo un tutorial paso a paso creo que cualquiera podría crear un plugin simple, pero me pregunto cómo es que se hacen plugins más complejos como el Sistema de Agradecimientos o el MyAlerts, que son plugins que tienen que tener conexión con la base de datos. Otra de mis preocupaciones es... cuándo saber que un plugin no te deja la base de datos vulnerable a inyeccionese SQL??

Creo que primero voy a intentar crear un theme para MyBB y luego pasaré a intentar hacer mis primeros plugins, ojalá sea en este año, como dijo angeluz, "y ya, si aun eres joven, creas plugins" Gran sonrisaDD
Última modificación: 19 January 2014, 04:42 por Jean Pierre.
 


Posibles temas similares…
Tema Autor Respuestas Vistas Último mensaje
Video [Videotutorial] Crear temas en MyBB Whiteneo 6 2,932 20 August 2018, 23:52
Último mensaje: Adfe



Usuarios navegando en este tema: 1 invitado(s)