it-swarm-es.tech

¿Cómo anular las clases principales?

A veces es necesario anular las clases principales para obtener más funcionalidad o hacer que algunas funciones centrales funcionen de otra manera. ¿Hay alguna forma de anular las clases principales? Si es posible, ¿qué problemas puedo enfrentar al anularlos?

20
Dmitry Rekun

Sí, es posible.

Puede usar un complemento del sistema para anular las clases, lea esto enlace y esto y esto

Dos problemas que enfrentará:

  1. necesita anular toda la clase (no solo partes de ella)

  2. si el núcleo se actualiza y la clase también se actualiza/cambia, debe actualizar su anulación (si es necesario).

16
jackJoe

Creé un complemento hace un tiempo que le permite anular las clases principales, pero aún es víctima de los problemas que @jackJoe señaló en su respuesta. Sin embargo, le permite hacer las anulaciones limpiamente.

https://Gist.github.com/dongilbert/3237387

10
Don Gilbert
5
cha

Estuve en este durante mucho tiempo y le prometí a Don que una vez que termine, daré más detalles al respecto.

Necesitaba anular Joomla MVC para los componentes y decirle a Joomla que busque anulaciones en mi carpeta html del complemento también, no solo dentro de la carpeta html de la plantilla.

Lo que nunca me gustó es cuando los desarrolladores realmente toman la clase predeterminada de Joomla y se meten con ella, así que prefiero extender esa clase si puedo, en lugar de frenar algo.

Mi proceso hace lo siguiente.

  1. Obtener la clase que necesito anular
  2. Léalo, reemplace el nombre de la clase, cree un nuevo archivo en mi carpeta de clase temporal
  3. Cargue mi versión de la clase
  4. Cargar clase Joomla
  5. Registre mi método de extensión que extiende la función loadTemplate para buscar anulación en mi complemento, que la plantilla de joomla y el último componente de joomla

aquí está la imagen más bien http://prntscr.com/3d9syq

Las primeras partes en el fragmento a continuación están verificando dónde está el usuario, si está a punto de actualizar Joomla, estoy eliminando los archivos de clase temporal que se crearon para asegurarme de que tengamos nuevos cuando se complete la actualización, que se ocupa del número de JackJoe 2).

if (($this->Input('option') == 'com_joomlaupdate' && $this->Input('task') == 'update.install') || ($this->Input('option') == 'com_joomlaupdate' && $this->Input('layout') == 'complete')) {

    JFolder::delete(JPATH_SITE . '/plugins/system/yjsg/includes/yjsgcore/classes/extend/classes/');
    JFolder::create(JPATH_SITE . '/plugins/system/yjsg/includes/yjsgcore/classes/extend/classes/');
    $indexContent = '';
    JFile::write(JPATH_SITE . '/plugins/system/yjsg/includes/yjsgcore/classes/extend/classes/index.html', $indexContent);
}

$YjsgJViewDefaultRead         = JPATH_LIBRARIES . '/legacy/view/legacy.php';
$YjsgJViewDefaultFile         = YJSGEXTEND . "classes" . YJDS . "Yjsg" . $isView . "Default" . $IsJversion . ".php";



    //extend JView library class

    if (!JFile::exists($YjsgJViewDefaultFile)) {
        $YjsgJViewDefault = JFile::read($YjsgJViewDefaultRead);
        $YjsgJViewDefault = str_replace('class ' . $isView, 'class Yjsg' . $isView . 'Default', $YjsgJViewDefault);
        JFile::write($YjsgJViewDefaultFile, $YjsgJViewDefault);
    }

    require_once($YjsgJViewDefaultFile);
    jimport('joomla.application.component.view');
    JLoader::register($isView, YJSGEXTEND . $IsJversion . '/component/view.php', true);
4
Dan