Hallo zusammen,
auf einer lokalen Installation von Joomla 5 wurde in einem Beitrag ein Custom Field vom Typ SQL angelegt. Die wählbaren Werte sollen einer eigenen Datenbanktabelle kommen, die dynamisch anhand des gerade eingeloggten Benutzers abgefragt wird.
Die Abfrage des Feldes lautet sinngemäß
Mittels Override des <plg_fields_sql> lässt sich der Platzhalter "USERID" durch den aktuellen User bewerkstelligen. Der userabhängige Klartext kann so bspw. in einer Kategorieliste angezeigt werden. Das funktioniert.
Aber natürlich sollen die zulässigen Werte auch bei der Beitragsbearbeitung angezeigt werden und wählbar sein. Auch das funktioniert, wenn ich an anderer Stelle eingreife. Nämlich unter </libraries/src/Form/Field/> die Datei "SqlField.php" ändere. Der Replace mit der aktuellen UserID wird in der Funktion function getOptions() eingebaut:
protected function getOptions()
{
$options = [];
// Initialize some field attributes.
$key = $this->keyField;
$value = $this->valueField;
$header = $this->header;
if ($this->query) {
// Get the database object.
$db = $this->getDatabase();
//Einschub Start
$sql = str_replace('"USERID"', Factory::getUser()->id, $this->query);
$db->setQuery($sql);
//Einschub Ende
// Set the query and get the result list.
//auskommentieren $db->setQuery($this->query);
try {
$items = $db->loadObjectList();
} catch (ExecutionFailureException $e) {
Factory::getApplication()->enqueueMessage(Text::_('JERROR_AN_ERROR_HAS_OCCURRED'), 'error');
}
}
// Build the field options.
if (!empty($items)) {
foreach ($items as $item) {
if ($this->translate == true) {
$options[] = HTMLHelper::_('select.option', $item->$key, Text::_($item->$value));
} else {
$options[] = HTMLHelper::_('select.option', $item->$key, $item->$value);
}
}
}
// Merge any additional options in the XML definition.
$options = array_merge(parent::getOptions(), $options);
return $options;
}
Alles anzeigen
ABER: Das ist ja eine allgemein gültige Library, die im dümmsten Fall beim nächsten Update noch überschrieben wird. Ich suche also eine Möglichkeit, die SQL-Abfrage an einer spezifischeren Stelle zu ändern. Dafür habe ich schon ein eigenes CustomField als Kopie des Standard-SQL-Felds angelegt und als PlugIn installiert. Es funktioniert analog dem Standard-SQL-Feld und ruft dieselbe Library auf.
Bin aber ratlos, wo hier was geändert werden kann. Und ob das überhaupt die richtige Stelle ist.
Hat jemand vielleicht eine Idee?