Tabellenzugriffe variabel umleiten

Fragen zum Entwickeln eigener Addons?

Moderator: General Support Moderators

Forum rules
Forumregeln
Locked
FreddyE
Joomla! Apprentice
Joomla! Apprentice
Posts: 12
Joined: Fri Jan 29, 2010 8:07 am

Tabellenzugriffe variabel umleiten

Post by FreddyE » Wed Mar 03, 2010 12:48 pm

Für ein Projekt muss ich die Zugriffe auf joomla tabellen variabel umleiten. Eine Variable $aid enthält das zu verwendende Tabellenprefix.

Beispiel

let the regular table prefix be xyz_

$aid = 8, alle querys werden auf tabellen mit dem prefix 8_ umgeleitet.

Ich hab schon versucht " $config->dbprefix = $aid;" zu jedem Vorkommen von "new JConfig()" hin zu zufügen, und beim Aufruf von index.php mit dem parameter aid= was auch immer, funktioniert es...doch sobald man dann auf den Link klickt kommt ein Fehler dass die Tabelle nicht gefunden werden konnte...weil irgendwo das prefix nicht angehängt wurde.

Ich denke es wäre wohl das einfachste das interne "#__" durch den Inhalt von $aid zu ersetzen, habe aber keinen Schimmer wo ich das hinbekomme so dass es auch überall klappt.

Insgesamt könnte ich einen Weg gebrauchen den Wert jeder beliebigen Variable in configuration.php global durch etwas anderes zu ersetzen. Automatisiert mehrere configuration.php anzulegen und diese entsprechend zu laden ist explizit nicht gewünscht.

Hat jemand ne Idee?

FreddyE
Joomla! Apprentice
Joomla! Apprentice
Posts: 12
Joined: Fri Jan 29, 2010 8:07 am

Re: Tabellenzugriffe variabel umleiten

Post by FreddyE » Fri Mar 05, 2010 8:08 am

Hat keiner ne Idee?

Chapter2
Joomla! Intern
Joomla! Intern
Posts: 57
Joined: Sat Feb 06, 2010 10:20 am

Re: Tabellenzugriffe variabel umleiten

Post by Chapter2 » Thu Mar 11, 2010 2:41 pm

Die Fäden laufen in der database.php zusammen. Eine Änderung in der Funktion setQuery(...) löst das Problem.

Code: Select all

function setQuery( $sql, $offset = 0, $limit = 0, $prefix = '#__' ) {
  $aid = JRequest::getInt('aid');
  if ($aid > 0) $this->_table_prefix = $aid . "_";

  [...] Rest wie in der Funktion
}
Um unerwünschte Fehlermeldungen auszuschließen muss $aid noch auf gültige Werte hin überprüft werden.

Grüße,
Arnd

FreddyE
Joomla! Apprentice
Joomla! Apprentice
Posts: 12
Joined: Fri Jan 29, 2010 8:07 am

Re: Tabellenzugriffe variabel umleiten

Post by FreddyE » Thu Mar 11, 2010 3:01 pm

Super! Vielen Dank! Mal wieder ist Lösung völlig simpel... :D

FreddyE
Joomla! Apprentice
Joomla! Apprentice
Posts: 12
Joined: Fri Jan 29, 2010 8:07 am

Re: Tabellenzugriffe variabel umleiten

Post by FreddyE » Mon Mar 15, 2010 7:28 am

Chapter2 wrote:Die Fäden laufen in der database.php zusammen. Eine Änderung in der Funktion setQuery(...) löst das Problem.

Code: Select all

function setQuery( $sql, $offset = 0, $limit = 0, $prefix = '#__' ) {
  $aid = JRequest::getInt('aid');
  if ($aid > 0) $this->_table_prefix = $aid . "_";

  [...] Rest wie in der Funktion
}
Um unerwünschte Fehlermeldungen auszuschließen muss $aid noch auf gültige Werte hin überprüft werden.

Grüße,
Arnd
Dein Tipp hat mich zwar weiter gebracht und ich bekomme keine Tabellenfehlermeldungen mehr, dafür kommt jetzt "Error loading components:" und dann keine weitere Fehlerbeschreibung. Ne Idee?

Chapter2
Joomla! Intern
Joomla! Intern
Posts: 57
Joined: Sat Feb 06, 2010 10:20 am

Re: Tabellenzugriffe variabel umleiten

Post by Chapter2 » Mon Mar 15, 2010 7:45 am

Bei einer derartigen Fehlermeldung wird die Tabelle $aid_components nicht gefunden. Quelle:

Code: Select all

{joomlaRoot}/libraries/joomla/application/component/helper.php Zeile 204
Bei dem Vorgehen braucht man für jedes $aid einen kompletten Satz an Tabellen.

FreddyE
Joomla! Apprentice
Joomla! Apprentice
Posts: 12
Joined: Fri Jan 29, 2010 8:07 am

Re: Tabellenzugriffe variabel umleiten

Post by FreddyE » Mon Mar 15, 2010 8:10 am

Die Tabellensätze sind komplett und korrekt. Das habe ich überprüft.
Interessanterweise erhalte ich wenn ich die indexseite einer aid das erstemal aufrufe keine Fehlermeldung. Wenn ich dann auf "home" klicke dann erst erscheint der Fehler. Wenn ich mich ins Adminbackend einlogge erscheint der Fehler erst nach dem Login. Ich vermute dass irgendwo intern die Zuordnung verloren geht.

Chapter2
Joomla! Intern
Joomla! Intern
Posts: 57
Joined: Sat Feb 06, 2010 10:20 am

Re: Tabellenzugriffe variabel umleiten

Post by Chapter2 » Mon Mar 15, 2010 10:23 am

Im Moment sieht es so aus, dass allen Komponenten und Modulen die $aid entweder per post über ein hidden-input oder an get angehägt mitgegeben werden muss. Für den Login im Admin-Bereich reicht das hidden-Feld bei modules/mod_login/mod_login.php.

Bei Frontend und Backend muss jedem Link die $aid mitgegeben werden. Die Menüleiste im Admin-Bereich kann man allgemein im Konstruktur anpassen {joomlaRoot}/administrator/modules/mod_menu/menu.php. Für den Rest sehe ich im Moment keine brauchbare Alternative als allen Vorkommen von index.php die aid mitzugeben index.php?aid=xy.

Vielleicht läßt sich das auch per Plugin erledigen aber so fit bin ich beim Thema Plugin nicht.

FreddyE
Joomla! Apprentice
Joomla! Apprentice
Posts: 12
Joined: Fri Jan 29, 2010 8:07 am

Re: Tabellenzugriffe variabel umleiten

Post by FreddyE » Mon Mar 15, 2010 11:10 am

Ursprünglich wird $aid per get in der index.php befüllt, dadurch haben ja dann alle anderen files die aid zum Abruf zur Verfügung weil die ja alle includes von index.php (oder includes von anderen includes) sind. Ich würde jetzt also alle vorkommen von 'index.php?' durch "index.php?aid=$aid" ersetzen und alle "index.php" durch "index.php?aid=$aid". Soweit es sich um Teile von functions handelt muss halt noch in diese Functions ein "global $aid;" rein. Rest so wie von dir vorgeschlagen. Überseh ich da noch irgendwas?


Locked

Return to “Entwicklerforum”