JOOMLA | PHP - MYSQl Spalten ansprechen

DonDemf

Erfahrenes Mitglied
Hallo Leute,
ich habe in der Tabelle _users neue spalten angelegt (team,teamliga,teamid) und möchte diese nun ansprechen. Ich dachte man könne sie normal mit der Joomla funktion jFactory ansprechen, ala:

PHP:
<?php

$user = JFactory::getUser();

// Test ob der Benutzer eingeloggt ist
if (!$user->guest) {
echo 'Sie sind eingeloggt als:<br />';
echo 'Benutzername: ' . $user->get('username') . '<br />';
echo 'echter Name: ' . $user->get('name') . '<br />';
echo 'Benutzer ID  : ' . $user->get('id') . '<br />';


echo 'Team ID  : ' . $user->get('teamid') . '<br />';

echo 'Team : ' . $user->get('team') . '<br />';

echo 'Liga  : ' . $user->get('teamliga') . '<br />';}

?>

Die ersten Abfragen funktionieren ja auch, aber ab Team ID geht es nicht mehr. Also sobald ich meine manuell angelegten Spalten ansprechen möchte. Weiß jemand weshalb?
 
Wenn ich mich recht entsinne, gibt es eine Klasse JUser, diese beinhaltet als Eigenschaften die Spalten. Dort sollte es auch eine Methode geben, die Daten aus der DB auszulesen. Ich würde jetzt folgendermaßen vorgehen:

Erstelle eine Klasse JUserExt, welche JUser erweitert. In JUserExt werden zunächst die neuen Eigenschaften eingetragen. Anschließend wird die Methode zu auslesen der DB überschrieben, in dem zuerst die parent::-Methode aufgerufen und anschließend die neuen Eigenschaften gefüllt werden.

Natürlich kann man auch einfach JUser anpassen, bei einem Update vom Joomla-Core muss man das dann aber berücksichtigen. Bei der Erweiterungsklasse ist der Aufwand gleich 0.
 
Grüße,

ich kenne mich leider nicht mit Joomla aus, jedoch kann ich dir eine Antwort auf die Erweiterung geben.
Ich werde das mal eben sehr abstrahiert darstellen:

PHP:
# Klasse definieren, so wie von 'Saftmeister' angedeutet
class JUserExt {
    # hier kommen dann die Methoden/Variablen rein
}

Um das ganze nun als Erweiterung zu bezeichnen (du willst bspw. Methoden aus der einen Klasse übernehmen/'vererben') musst du mit dem Schlüsselwort 'extends' arbeiten:

PHP:
# wie oben - nur erweitert
class JUserExt extends JUser {

# Funktion überschreiben
        public funtion getUser() {
                parent::getUser();
                #hier dann vllt. noch etwaige Erweiterungen, die deine Zwecke erfüllen
        }
}

Wie gesagt - stark abstrahiert. Die Methoden müssen auch nicht unbedingt diese Namen haben (kenne mich eben nicht mit Joomla aus), aber es ging ja nur ums Prinzip ;).
 
Nunja, wenn er die Vererbung nicht will. Ich bin auch eher dazu geneigt, es so zu machen, als in den Sourcecodes von fremden Frameworks rum zu wursten.

Allerdings ist das etwas problematisch. Die JFactory kennt nunmal auch nur "JUser", somit kann man diese Factory schon mal nicht mehr verwenden, um ein Benutzer-Objekt erzeugen zu lassen und müsste sich entweder eine eigene Factory zimmern oder auch wieder in den Sources von Joomla rumschrauben.

Alles ein Pfusch, deswegen mag ich Joomla auch nicht. Macht einem das Leben unnötig schwer. Leider verstehen die Entwickler der ganzen CMS das Problem irgendwie nicht richtig - oder wollen es nicht verstehen.

Also noch mal zum selbst drüber nachdenken:

- Füge deine Spalten als Eigenschaften der Klasse JUser (Fundort in meinem letzten Post) hinzu
- Teste ob danach die Getter irgendwelche gültigen Werte zurück geben.

Warum hast du das eigentlich nicht über eine separate Tabelle gelöst?
 
ok, also diese user.php ist relativ groß und ich blicke da kaum durch, habe jetzt in den ersten zeilen die neuen VAR bestimmt. Ich hänge die Datei mal an.

Ich habe es in die User tabelle gemacht, weil ich dynamisch auf diese Inhalte zugreifen möchte. Bei meinen CMS, die ich normalerweise benutze kann man jede einzelne spalte der _user tabelle easy ansprechen mit $userdata["spalte"]; etc.


Ich brauche das, um eine dynamische "Trainer Zentrale" für meine Mitglieder darstellen lassen zu können. Man kann es natürlich auch mit einer externen tabelle machen, aber dafür fehlt mir die lust, alles umzuschreiben. ich würde meine Scripts gerne so lassen.
 

Anhänge

Zurück