web-dev-qa-db-fra.com

Joomla plugin pour remplacer le préfixe de table

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?

4
Shaun

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.

1
itoctopus

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:

  • écrire une logique dépendante de l'utilisateur directement dans le pilote;
  • appeler une fonction que vous écrirez à un autre endroit;

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.

0
Alexandr