Resultados 1 al 1 de 1

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

Esta es una discusión en el tema Como trabaja el Sistema de Plugins (Hooks o Lugar de Enganche) en vBulletin dentro del foro Tutoriales de programación, parte de la categoría Programación avanzada y trabajos Freelance; 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 ...

  1. #1
    Administrador Avatar de Jhonnyf
    Fecha de ingreso
    13/jun/2009
    Ubicación
    In my mind
    Mensajes
    1.363
    Gracias
    60
    Agradecido 1.104 veces en 565 mensajes
    Entradas de Blog
    1
    Poder de Credibilidad
    10

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

    Hacer clic en la imagen para la versión completa

Nombre:  combohook.gif
Vistas: 2
Tamaño:  52,6 KB (Kilobytes)
ID: 756


    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



    Temas Similares:
    [GRACIAS] -> es Boton magico que hace que siempre recibas soporte, USALO!!!

  2. El siguiente usuario ha agradecido a Jhonnyf por este útil mensaje:

    Rafael (24/04/2010)

Etiquetas de este tema

Foro | Chat y Juegos | Hello Kitty | Programacion | Foro Cristiano | XAT | Chat Foro | Perú | SummArg