Vue d'ensemble: J'ai un seul site Web Joomla qui contient diverses copies des tables de la base de données, toutes dans la même base de données, mais avec des préfixes de table différents.
En fonction de l'utilisateur qui accède au site, je dois modifier le préfixe de la table joomla utilisé afin d'afficher les tables correspondantes.
Cela doit être large du site.
Problème: avec un code de base, je peux modifier le préfixe selon les besoins, mais préférerais cela comme un plugin.
Avec le plugin, je peux obtenir le préfixe en utilisant $ db-> getPrefix (), et je peux définir une instance immédiate de la connexion en utilisant $ db = JDatabaseDriver :: getInstance ($ option). Mais ce n'est pas le site entier et est écrasé par le standard $ db = JFactory :: getDbo ().
J'ai donc besoin d'un plug-in système qui remplacera chaque instance d'un préfixe de table lors de son exécution.
Des idées?
Il n'y a absolument aucun moyen de faire cela depuis un plugin, car Joomla commence à accéder à la base de données avant de charger les plugins.
La seule façon de faire cela est de l'intérieur de la configuration.php
fichier, où vous devriez avoir la logique (vous devriez y créer une fonction appelée getTablePrefix
). Vous devez cependant vous assurer que Joomla ne peut pas écrire dans ce fichier, car s'il le fait, il supprimera vos modifications.
J'ai pensé à faire cela à travers le defines.php
, mais cela n’est pas possible car il est chargé avant le chargement de la configuration.
Excellente question au fait, mais je suis également curieux de savoir pourquoi vous avez besoin d’un ensemble de tableaux différent pour chaque utilisateur. La meilleure solution serait peut-être de repenser toute la logique.
Je suppose que la seule façon de le faire est d'ajouter votre class JDatabaseDriverCustom extends JDatabaseDriverMySql
Personnalisé, par exemple, et vous pourrez y accéder avec quelques options:
Quoi qu'il en soit, réfléchissez à ceci: avez-vous vraiment besoin que le site dépende de l'utilisateur, de quelque chose comme l'IP ou de tout ce qui ne concerne pas Joomla? De cette façon, vous pourrez écrire __constructor()
dans votre fichier de configuration, y placer la logique et changer $this->db_prefix
.