it-swarm-es.tech

Complemento de Joomla para anular el prefijo de la tabla

Descripción general Tengo un solo sitio web de Joomla que tiene varias copias de las tablas de la base de datos, todas en la misma base de datos, pero con prefijos de tabla diferentes.

Dependiendo de qué usuario está accediendo al sitio, necesito alterar qué prefijo de tabla joomla se usa para mostrar las tablas relevantes.

Esto tiene que ser de todo el sitio.

Problema: con un hack de código central puedo alterar el prefijo según sea necesario, pero preferiría esto como un complemento.

Con el complemento puedo obtener el prefijo, usando $ db-> getPrefix (), y puedo establecer una instancia inmediata de la conexión usando $ db = JDatabaseDriver :: getInstance ($ option). Pero esto no abarca todo el sitio y se sobrescribe con el estándar $ db = JFactory :: getDbo ().

Por lo tanto, necesito un complemento del sistema que reemplace cada instancia de un prefijo de tabla a medida que se ejecuta.

¿Algunas ideas?

4
Shaun

No hay absolutamente ninguna manera de hacer esto desde un complemento, esto se debe a que Joomla comienza a acceder a la base de datos antes de cargar los complementos.

La única forma de hacerlo es desde el configuration.php archivo, donde debe tener la lógica (debe crear una función llamada getTablePrefix allí). Sin embargo, debe asegurarse de que Joomla no pueda escribir en este archivo, porque si lo hace, destruirá sus cambios.

He pensado en hacer esto a través de defines.php archivo, pero no se puede hacer allí porque se carga antes de cargar la configuración.

Excelente pregunta por cierto, pero también tengo curiosidad sobre por qué necesita tener un conjunto diferente de tablas para cada usuario. Quizás la mejor solución sería repensar toda la lógica.

1
itoctopus

Supongo que la única forma de hacerlo es agregar su class JDatabaseDriverCustom extends JDatabaseDriverMySql Personalizado, por ejemplo, y allí podrá ir con algunas opciones:

  • escribir lógica dependiente del usuario directamente dentro del controlador;
  • llama a alguna función que escribirás en otro lugar;

De todos modos, piense: ¿realmente necesita que el sitio dependa del usuario, o de algo como IP o cualquier cosa no relacionada con Joomla? De esta manera, podrá escribir __constructor() dentro de su archivo de configuración y colocar la lógica allí y cambiar $this->db_prefix.

0
Alexandr