Page 1 of 1

Tabellenzugriffe variabel umleiten

Posted: Wed Mar 03, 2010 12:48 pm
by FreddyE
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?

Re: Tabellenzugriffe variabel umleiten

Posted: Fri Mar 05, 2010 8:08 am
by FreddyE
Hat keiner ne Idee?

Re: Tabellenzugriffe variabel umleiten

Posted: Thu Mar 11, 2010 2:41 pm
by Chapter2
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

Re: Tabellenzugriffe variabel umleiten

Posted: Thu Mar 11, 2010 3:01 pm
by FreddyE
Super! Vielen Dank! Mal wieder ist Lösung völlig simpel... :D

Re: Tabellenzugriffe variabel umleiten

Posted: Mon Mar 15, 2010 7:28 am
by FreddyE
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?

Re: Tabellenzugriffe variabel umleiten

Posted: Mon Mar 15, 2010 7:45 am
by Chapter2
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.

Re: Tabellenzugriffe variabel umleiten

Posted: Mon Mar 15, 2010 8:10 am
by FreddyE
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.

Re: Tabellenzugriffe variabel umleiten

Posted: Mon Mar 15, 2010 10:23 am
by Chapter2
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.

Re: Tabellenzugriffe variabel umleiten

Posted: Mon Mar 15, 2010 11:10 am
by FreddyE
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?