Jump to content
×
×
  • Crear nuevo...

Uso de XenForo Code en otras aplicaciones

   (0 reseñas)

About This File

Introducción

Una de las preguntas más frecuentes en la sección de desarrollo de XenForo es: ¿Cómo accedo a los datos de XenForo en otras aplicaciones? En términos generales, hay dos formas de hacerlo: si su aplicación está en un idioma diferente a PHP o reside en un servidor diferente, puede utilizar la API incorporada para acceder a la mayoría de los datos y enviar y extraer contenido de ya su instalación de XenForo. Si está en el mismo servidor y su otra aplicación también está ejecutando PHP, puede aprovechar toda la potencia lanzando XenForo y obtener acceso a todas sus funciones y objetos.

Esta guía está destinada a ofrecer una breve descripción general de la segunda opción. Si está buscando más información sobre cómo usar la API de XenForo, aquí hay algunas lecturas adicionales para usted:

Antes de empezar

Como una breve mención inicial: para seguir este método, se recomienda tener una buena comprensión de PHP, así como algunos conocimientos básicos del marco XenForo. Si ha leído la Documentación para desarrolladores e idealmente siguió la guía Vamos a crear un complemento, es posible que tenga los conceptos básicos listos para continuar.

Iniciar la aplicación XenForo

Lanzar XenForo es simple. Todo lo que necesita es la ruta relativa a su directorio raíz de XenForo, así como el siguiente fragmento de código:

$dir = '<your_xenforo_root_directory_path>';
require($dir . '/src/XF.php');
\XF::start($dir);

Así de simple, ha iniciado la aplicación XenForo y ha obtenido acceso a todos los métodos y objetos.

Accediendo a los datos

Para leer y escribir en la base de datos, ahora puede usar el Administrador de entidades a través de \ XF :: em (), así como la Base de datos a través de \ XF :: db (). A menos que se requiera específicamente, utilizar el administrador de la entidad es la forma preferida de hacerlo. Le proporcionará objetos de entidad listos para usar que puede manipular y guardar, así como manejar todos los complementos de terceros y eventos previos / posteriores al guardado automáticamente para usted. Si aún no está familiarizado con el sistema de gestión de entidades, asegúrese de leer la sección de documentación de desarrollo.

También hay algunos atajos útiles disponibles para cargar ciertas partes:

  • \ XF :: finder ('My: Finder') cargará un buscador específico para usted.
  • \ XF :: repository ('My: Repository') cargará un repositorio específico para usted.

Usuario registrado

Para acceder al visitante actual, primero debe asegurarse de que su aplicación tenga acceso a las mismas cookies que XenForo. Si lo está ejecutando en un subdominio diferente, asegúrese de configurar su aplicación XenForo para que comparta cookies con su aplicación personalizada.

Una vez que haya verificado eso, puede cargar el objeto de visitante de XenForo en cualquier momento con el siguiente acceso directo:

$visitor = \XF::visitor();

Código avanzado

Hasta ahora, ha aprendido a cargar su aplicación XenForo y a realizar operaciones básicas de lectura y escritura. A continuación, encontrará algunos ejemplos y explicaciones más avanzados.

Plantillas

El templador de XenForo le permite renderizar cualquier plantilla y macro, pública, administrativa o de correo electrónico. Todo lo que necesita es inicializarlo primero y luego pasar los datos requeridos a cada plantilla o macro que está intentando cargar.

Antes de comenzar a usar el templador, primero debe inicializar los parámetros globales:

$templater = \XF::app()->templater();
$globalTemplateData = \XF::app()->getGlobalTemplateData();
$templater->addDefaultParam('xf', $globalTemplateData);
$templater->setStyle(\XF::app()->style(\XF::visitor()->style_id));
$templater->setLanguage(\XF::app()->userLanguage(\XF::visitor()));
$templater = \XF::app()->templater();

Con el templater preparado, ahora puede renderizar plantillas y macros como desee:

$templateOutput = $templater->renderTemplate('public:thread_view', [
    'thread' => $myThread
]);
$macroOutput = $templater->renderMacro('public:thread_list_macro', 'item', [
    'thread'=> $myThread
]);

Incrustar sus propias plantillas en el contenedor de XenForo

Para generar el contenedor de XenForo, simplemente necesita renderizar la plantilla PAGE_CONTAINER, con algunos parámetros adicionales.

$pageParams = $myPageParams;
$pageParams['content'] = $myHtmlToWrap;
$wrappedResponse = $templater->renderTemplate('public:PAGE_CONTAINER', $pageParams);

Tenga en cuenta que esto solo le dará una vista lista para usar. Aún debe generar y enviar una respuesta adecuada a la solicitud de los usuarios. Si no desea hacer esto, es mejor que escriba un complemento y que el controlador maneje el código de su aplicación.

Dependiendo de su configuración, es posible que también deba manejar situaciones adicionales como URL relativas y pasar parámetros de página adicionales a la plantilla pública. Esto está más allá del alcance de esta descripción general rápida y, por lo tanto, no se cubre.

Servicios

Los servicios se usan generalmente para manejar procesos más complicados, comúnmente para procesar la entrada del usuario en nuevas entidades o modificar entidades existentes de una manera más compleja que un simple guardado. Para utilizar un servicio, primero debe recopilar todas las entidades requeridas (y la entrada, cuando sea necesario). Luego puedes generar tu servicio con el siguiente código:

$service = \XF::service('My:Service', $requiredEntity);

Qué entidades (y cuántas) se requieren, depende del servicio que se elija. Dependiendo del servicio que use, generalmente debe llamar a métodos adicionales en el objeto de entidad obtenido, para pasar datos de entrada y finalmente ejecutar el servicio. Cómo se hace esto depende del servicio en cuestión.

Controladores

Cuando necesite imitar una acción de controlador de XenForo, o desee acceder a un resultado de un flujo de controlador, puede generar su propio controlador y ejecutar el método en cuestión. En el siguiente ejemplo, ejecutaremos la acción de vista del controlador XF: Thread, para renderizar una vista de hilo. Primero deberá generar un objeto de solicitud y una bolsa de parámetros que se ajuste a la acción requerida del controlador. Esto es tan simple como:

$params = new ParameterBag([
    'thread_id' => $myThreadId,
]);
// If you already possess the right request object
$request = \XF::app()->request();
// If you want to artifically generate a request
$inputValues = $_GET + $_POST;
$request = new XF\Http\Request(\XF::app()->inputFilterer(), $inputValues, $inputFiles, $_COOKIE, $_SERVER);

Una vez que posea la bolsa de parámetros correcta y solicite objetos, puede generar un controlador y usar métodos de reflexión phps para ejecutar las acciones correctas:

$controllerClassString = XF::extendClass('XF\Pub\Controller\Thread');
$controller = $this->app->controller('XF:Thread', $request);
$actionIndex = new ReflectionMethod($controllerClassString, 'actionIndex');
$controllerResponse = $actionIndex->invoke($controller, $params);

Si desea ejecutar un método de controlador que no es una acción sino un método privado, puede ahorrarse la molestia de generar la bolsa de parámetros y los objetos de solicitud, y ejecutar directamente el método:

$controllerClassString = XF::extendClass('XF\Pub\Controller\Thread');
$controller = $this->app->controller('XF:Thread', $request);
$method = new ReflectionMethod($controllerClassString, 'getThreadViewExtraWith');
$method->setAccessible(true);
$extraWith = $method->invoke($controller);

Ultimas palabras

Esto debería brindarle una descripción general rápida sobre cómo iniciar la aplicación XenForo en su código personalizado y realizar tareas básicas y avanzadas con el marco. A partir de ahí, la mayoría de las tareas se pueden tratar como si viviera en el contexto de XenForo y, por lo tanto, se pueden aplicar la mayoría de las soluciones de la sección del foro de desarrollo, generalmente sin modificar o en una variante ligeramente modificada.

Tenga en cuenta que reunir dos aplicaciones no es una tarea fácil y no debe tomarse a la ligera. Si tiene dificultades, considere contratar a un desarrollador experimentado para que escriba el código por usted, para asegurarse de no abrir ninguna laguna o vectores de ataque en su entorno. La seguridad siempre debe ser más importante que las ventajas de funcionalidad menores.


Críticas de usuarios

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest