Como trabaja el Sistema de Plugins (Hooks o Lugar de Enganche) en vBulletin

Esta es una discusión para el tema Como trabaja el Sistema de Plugins (Hooks o Lugar de Enganche) en vBulletin en el foro Tutoriales de Programación, bajo la categoría Lenguajes de Programación; vBulletin usa un sistema de enganche para facilitarnos el hacer modificaciones y evitar hacer cambios en nuestros archivos cada vez que actualizamos vBulletin, los hooks del combo solo los vas a encontrar en archivos PHP, ...
Página:


Resultados 1 al 3 de 3

Temas similares

  1. Por Jhonnyf en el foro Tutoriales de Programación
  2. Por alexan1252 en el foro vBulletin 3 - Preguntas, Problemas y Soluciones
  3. Por santikos en el foro vBulletin 3 - Preguntas, Problemas y Soluciones
  4. Por maxihornes en el foro vBulletin 3 - Preguntas, Problemas y Soluciones
  5. Por Dj duck exclusivo en el foro Soporte para Productos/Plugins
  1. #1
    Miembro especial Miembro de diamante Array Avatar de Jhonnyf
    Fecha de ingreso
    06 sep, 08
    Ubicación
    Dentro de mi
    Mensajes
    1,123
    Gustado
    42 Veces
    Me Gustan
    1 Veces

    Predeterminado Como trabaja el Sistema de Plugins (Hooks o Lugar de Enganche) en vBulletin


    vBulletin usa un sistema de enganche para facilitarnos el hacer modificaciones y evitar hacer cambios en nuestros archivos cada vez que actualizamos vBulletin, los hooks del combo solo los vas a encontrar en archivos PHP, nunca en plantillas ni en otro lugar (1) ya que es codigo PHP que lo vamos a "Incrustar", los hooks en plantilla son muy similares, pero es un tema aparte

    Ejemplo Practico

    Un Ejemplo de como funciona seria el siguiente (El Codigo no es real)
    Código PHP:
    //Mi Archivo.php que me muestra los usuarios en linea
    $usar_postbit_legancy=$opciones_vbulletin['valor_configurado'];
    llamar_a_hook('postbit_display_start'); //Hook
    funcion_procesar_postbit();
    llamar_a_hook('postbit_display_complete');  //Hook
    imprimir_plantilla('postbit_template'); 
    Ese es el codigo original en los archivos php de vBulletin, si se ejecuta la funcion llamar_a_hook no tengrá efecto si no hay nada en ese gancho

    Ahora, supongamos que he hecho un plugin con el siguiente codigo:
    Código PHP:
    if ($usuario['grupo']=='Administrador')
    {
    $usar_postbit_legancy='LEGANCY';
    }
    else
    {
    $usar_postbit_legancy=$opciones_vbulletin['valor_configurado'];

    ¿Donde creen que debo engancharlo? en postbit_display_start o en postbit_display_complete











    Para los que dijeron postbit_display_start Felicitaciones; usamos ese hook porque vamos a CONFIGURAR la forma de la plantilla y debe ser antes de PROCESARLA, de ahi que uno siempre escucha: "USANDO EL HOOK CORRECTO".... nuestro codigo cuando se ejecute (por el hook) será internamente asi:
    Código PHP:
    //Mi Archivo.php que me muestra los usuarios en linea
    $usar_postbit_legancy=$opciones_vbulletin['valor_configurado'];

    if (
    $usuario['grupo']=='Administrador')
    {
    $usar_postbit_legancy='LEGANCY';
    }
    else
    {
    $usar_postbit_legancy=$opciones_vbulletin['valor_configurado'];
    }  

    funcion_procesar_postbit();
    llamar_a_hook('postbit_display_complete');  //Hook
    imprimir_plantilla('postbit_template'); 
    De ahi es que se llama GANCHO, porque estas anexando codigo..

    ************************************************
    Ejemplo Real

    Abran el archivo showthread.php linea 1000 aproximadamente y van a encontrar
    Código PHP:
    $hook_query_fields $hook_query_joins '';
        (
    $hook vBulletinHook::fetch_hook('showthread_query')) ? eval($hook) : false;

        
    $posts $db->query_read("
            SELECT
                post.*, post.username AS postusername, post.ipaddress AS ip, IF(post.visible = 2, 1, 0) AS isdeleted,
                user.*, userfield.*, usertextfield.*,
                " 
    iif($forum['allowicons'], 'icon.title as icontitle, icon.iconpath,') . "
                " 
    iif($vbulletin->options['avatarenabled'], 'avatar.avatarpath, NOT ISNULL(customavatar.userid) AS hascustomavatar, customavatar.dateline AS avatardateline,customavatar.width AS avwidth,customavatar.height AS avheight,') . "
                " 
    . ((can_moderate($thread['forumid'], 'canmoderateposts') OR can_moderate($thread['forumid'], 'candeleteposts')) ? 'spamlog.postid AS spamlog_postid,' '') . "
                " 
    iif($deljoin'deletionlog.userid AS del_userid, deletionlog.username AS del_username, deletionlog.reason AS del_reason,') . "
                editlog.userid AS edit_userid, editlog.username AS edit_username, editlog.dateline AS edit_dateline,
                editlog.reason AS edit_reason, editlog.hashistory,
                postparsed.pagetext_html, postparsed.hasimages,
                sigparsed.signatureparsed, sigparsed.hasimages AS sighasimages,
                sigpic.userid AS sigpic, sigpic.dateline AS sigpicdateline, sigpic.width AS sigpicwidth, sigpic.height AS sigpicheight,
                IF(displaygroupid=0, user.usergroupid, displaygroupid) AS displaygroupid, infractiongroupid
                " 
    iif(!($permissions['genericpermissions'] & $vbulletin->bf_ugp_genericpermissions['canseehiddencustomfields']), $vbulletin->profilefield['hidden']) . "
                
    $hook_query_fields
            FROM " 
    TABLE_PREFIX "post AS post
            LEFT JOIN " 
    TABLE_PREFIX "user AS user ON(user.userid = post.userid)
            LEFT JOIN " 
    TABLE_PREFIX "userfield AS userfield ON(userfield.userid = user.userid)
            LEFT JOIN " 
    TABLE_PREFIX "usertextfield AS usertextfield ON(usertextfield.userid = user.userid)
            " 
    iif($forum['allowicons'], "LEFT JOIN " TABLE_PREFIX "icon AS icon ON(icon.iconid = post.iconid)") . "
            " 
    iif($vbulletin->options['avatarenabled'], "LEFT JOIN " TABLE_PREFIX "avatar AS avatar ON(avatar.avatarid = user.avatarid) LEFT JOIN " TABLE_PREFIX "customavatar AS customavatar ON(customavatar.userid = user.userid)") . "
            " 
    . ((can_moderate($thread['forumid'], 'canmoderateposts') OR can_moderate($thread['forumid'], 'candeleteposts')) ? "LEFT JOIN " TABLE_PREFIX "spamlog AS spamlog ON(spamlog.postid = post.postid)" '') . "
                
    $deljoin
            LEFT JOIN " 
    TABLE_PREFIX "editlog AS editlog ON(editlog.postid = post.postid)
            LEFT JOIN " 
    TABLE_PREFIX "postparsed AS postparsed ON(postparsed.postid = post.postid AND postparsed.styleid = " intval(STYLEID) . " AND postparsed.languageid = " intval(LANGUAGEID) . ")
            LEFT JOIN " 
    TABLE_PREFIX "sigparsed AS sigparsed ON(sigparsed.userid = user.userid AND sigparsed.styleid = " intval(STYLEID) . " AND sigparsed.languageid = " intval(LANGUAGEID) . ")
            LEFT JOIN " 
    TABLE_PREFIX "sigpic AS sigpic ON(sigpic.userid = post.userid)
                
    $hook_query_joins
            WHERE 
    $postids
            ORDER BY post.dateline 
    $postorder
        "
    ); 
    Ahi por ejemplo tenemos 2 variables a modo de hooks ($hook_query_fields y $hook_query_joins) que los programadores de vBulletin lo pusieron para que nosotros hagamos alguna modificacion en el SQL (ver la consulta). asi que podemos poner alguna condicion y segun eso setear esas variables , las posibilidades son muchas

    la llamada de plugin en plantillas es:
    Código PHP:
    ($hook vBulletinHook::fetch_hook('NOMBRE_HOOK')) ? eval($hook) : false
    _____________________________
    (1)Nota programadores: Un hook en vBulletin es equivalente a un require, es decir llama a un codigo externo, solo que en este caso, el codigo está en la base de datos
    Última edición por Jhonnyf; 04/09/2009 a las 09:17

  2. #2
    Miembro especial Miembro de plata Array Avatar de Masterock
    Fecha de ingreso
    27 nov, 08
    Ubicación
    en todos lados y en ninguna
    Mensajes
    52
    Gustado
    0 Veces
    Me Gustan
    0 Veces

    Predeterminado Re: Como trabaja el Sistema de Plugins (Hooks o Lugar de Enganche) en vBulletin

    Muy interesante la guía !, yo ando buscando la forma de mostrar en el principal el Latest de Twitter como si fuera un anuncio!, ya tengo el codigo que me devuelve en una variable el mensaje, pero no se donde enganchar el plugin ni que poner en el template "navbar" en mi caso! para que lea la variable que tengo en el plugin!

  3. #3
    Miembro Array
    Fecha de ingreso
    09 abr, 10
    Mensajes
    1
    Gustado
    0 Veces
    Me Gustan
    0 Veces

    Predeterminado Re: Como trabaja el Sistema de Plugins (Hooks o Lugar de Enganche) en vBulletin

    Muy impresionante e informativo ..
    Las personas encontradas en las consultas utilizando el archivo de parche, pero lo puedes explicar de manera muy fácil ..
    Muchas gracias ...