[hooks] que es ?.. Un tutorial para que entiendas como fuciona, smf2.1

Started by Dhayzon, September 03, 2020, 09:15:33 PM

Previous topic - Next topic

Dhayzon

Y puedas crear tus propias modificaciones, de acuerdo a tus necesidades  la versión 2.1 tiene cerca de  400 hooks disponibles



como se usa?

puedes crear tu mod bien organizado  con un centro de administración y todo bien ordenado, o puedes crear uno con valores por defecto que una vez instalado funcione sin necesidad de crearle un panel administrativo


para empezar uno básico necesitas estos archivos;

Hook.php // important
index.php  // important
package-info.xml  // important
readme.txt  // puedes agregar notas de tu mod
Sources // carpeta donde estará tus archivos necesarios (si es muy grande el mod)
Themes // por si necesitas otros archivos propios


primero debes configurar package-info.xml a si:


<?xml version="1.0"?>
<!DOCTYPE package-info SYSTEM "http://www.simplemachines.org/xml/package-info">
<package-info xmlns="http://www.simplemachines.org/xml/package-info" xmlns:smf="http://www.simplemachines.org/">
<id>minombredeautor:nombredemimod</id>
<name>Nombre de mi mod</name>
<version>0.1</version>
<type>modification</type>
<install for="2.1 - 2.1.99, 2.1 RC2, 2.1 RC3">
<code>Hook.php</code>
<require-dir name="Themes" destination="$boarddir">Theme and Language files</require-dir>
<require-dir name="Sources" destination="$boarddir">Source files</require-dir>
</install>
<uninstall for="2.1 - 2.1.99, 2.1 RC2, 2.1 RC3">
<code>Hook.php</code> 
<redirect url="$scripturl?action=admin;area=packages" timeout="3000"></redirect> 
</uninstall>
</package-info>






a si de simple con eso ya esta listo  en <version>0.1</version> es la versión de tu mod

el contenido de index.php


<?php

/**
 * This file is here solely to protect your Packages directory.
 */

// Look for Settings.php....
if (file_exists(dirname(dirname(__FILE__)) . '/Settings.php'))
{
// Found it!
require(dirname(dirname(__FILE__)) . '/Settings.php');
header('location: ' $boardurl);
}
// Can't find it... just forget it.
else
exit;

?>



el mas importante Hook.php

este archivo sera ejecutado con <code>Hook.php</code> de nuestro  package-info.xml


ahora si  el contenido de Hook.php





<?php

if (file_exists(dirname(__FILE__) . '/SSI.php') && !defined('SMF'))
require_once(
dirname(__FILE__) . '/SSI.php');
elseif (!
defined('SMF'))
    exit(
'<b>Error:</b> Cannot install or uninstall - please verify you put this in the same place as SMF\'s index.php.');

if (
SMF == 'SSI')
db_extend('packages');  
  
  global 
$sourcedir;
   
// Prepare hooks
  
$hook_functions = array(
'integrate_pre_include' => $sourcedir.'/MyMod/MyMod.php',
'integrate_pre_load' => 'MyMod\MyMod::init'
   
); 
 
// Adding or removing hooks
if (!empty($context['uninstalling']))
$request 'remove_integration_function';
else
$request 'add_integration_function';

// Carrying out the hooks
foreach ($hook_functions as $hook => $function)
$request($hook$function);

 


if (
SMF == 'SSI')
{
    
fatal_error('<b>This isn\'t really an error, just a message telling you that the settings have been entered into the database!</b><br />');
    @
unlink(__FILE__);
}

?>




lo mas importante esta en estas dos lineas


  $hook_functions = array(
'integrate_pre_include' => $sourcedir.'/MyMod/MyMod.php',
'integrate_pre_load' => 'MyMod\MyMod::init'
   );


integrate_pre_include incluimos un archivo "CORE" el corazón del mod

luego con integrate_pre_load ejecutamos la funcion que esta dentro de nuestra clase MyMod


terminado esto lo empaquetamos como .zip y lo instalamos en nuestro foro


y listo ya podemos desarrollar mods en nuestro localhost para luego empaquetar  todo los archivos en  un zip. e instalarlo  de forma definitiva

en el siguiente post  utilizaremos MyMod.php y haremos los hooks usados con mas frecuencia

buenas noches nos vemos mañana

-Rock Lee-

Esta bueno la explicacion rapida como esta con RC aun muchos no lo prueban pero ir comprendiendo como funciona en general a mas de uno seguro inspira a meter mas mano :D, Gracias por aportar!


Saludos!
¡Regresando como cual Fenix! ~ Bomber Code
Ayudas - Aportes - Tutoriales - Y mucho mas!!!

Danielㅤ

Hola, gracias por el aporte que siempre serán de utilidad.

Ahora yo te hago una pregunta Dayzon, yo he notado que vos creaste varios o muchos mods para tu foro, de hecho siempre cuando pediste ayuda nos comentabas que estabas creando o terminando de crear o incluso que comenzabas a crear tu mod y buscando por los mods de SMF tan solo tenés 4 mods aportados pero hace ya varios años:






La pregunta es, porque no compartis/aportas todos esos mods que has creado? Serían de mucha ayuda y te aseguro que más de uno te lo agradecería.


Saludos

Dhayzon

si xd, pero casi nunca lo termino por que pierdo el interés o simplemente ya no le encuentro utilidad...  y si no publico mods es por que smf es muy estricto en cuanto a estructura y bla bla y basicamente demoran como 4 meses para aprobarte un mod o de plano te dicen tu mod no funciona con php menor a la version 4  .... por eso no subo mods, por otro lado si trato de hacer tutoriales uwu.

hay un error en el post este pero no puedo editarlo.

alguien que cambie esto

   'integrate_pre_include' => $sourcedir.'/Spirit/SpiritHook.php',
   'integrate_pre_load' => 'SpiritMod\SpiritHook::init'


por esto

   'integrate_pre_include' => $sourcedir.'/MyMod/MyMod.php',
   'integrate_pre_load' => 'MyMod\MyMod::init'




-Rock Lee-

Justo estaba probando algo y me parecia raro al mirar el código, ya te lo cambie :) cualquier cosa avisa!


Saludos!
¡Regresando como cual Fenix! ~ Bomber Code
Ayudas - Aportes - Tutoriales - Y mucho mas!!!

Diego Andrés

Adicionalmente en el package-info.xml ya se tienen disponibles etiquetas para utilizar hooks directamente desde ahí, sin tener que utilizar otro archivo para correrlos, pero cualquier forma es viable y válida.

SMF Tricks - Free & Premium Responsive Themes for SMF.

vicram10

Gracias Dhayzon por el Tutorial, crei haber comentado aca, bueno la edad jaja.

Advertisement: