it-swarm.com.de

Wie kann ich einem Artikel benutzerdefinierte Benutzerfeldwerte hinzufügen?

Ich habe ein benutzerdefiniertes Benutzerfeld mit dem Namen "Geschlecht" erstellt.

Wie kann ich dieses Feld in einem Artikel anzeigen?

Ich kann nur Folgendes anzeigen: username, name, email und User Id

Hier ist mein aktueller Sourcerer-Code, um auf den Benutzernamen zuzugreifen:

{source} <?php $user = JFactory::getUser(); echo $user->get('name'); {/source}
1
Author ivan

Okay, ich erkläre es mit einem fiktiven Wert.

Sie müssen auf die Tabelle #__users Und die Tabelle #__fields_values Verweisen.

Angenommen, Sie haben nur mit angemeldeten Benutzern zu tun, müssen Sie die Benutzer-ID über JFactory::getUser()->id abrufen.

Dann müssen Sie den field_id - Wert kennen, mit dem der gender - Wert in der Tabelle #__fields_values Gespeichert ist. Für mein Beispiel unten verwende ich 28 Als field_id - Wert. Wenn Sie nicht wissen, wie hoch der richtige field_id - Wert für Ihr Projekt ist, können Sie in der Tabelle #__fields nach dem Wert suchen. Die zu beschreibende Ganzzahl befindet sich in der Tabelle id Säule.

Durch Ausführen eines INNER JOIN für die beiden Tabellen, Verwenden von zwei Bedingungen in der WHERE-Klausel und Aufrufen eines einzelnen Werts in der Ergebnismenge über loadResult() erhalten Sie Ihren Wert gender.

try {
    $db = JFactory::getDbo();
    $user_id = JFactory::getUser()->id;
    $query = $db->getQuery(true)
        ->select("b.value AS gender")
        ->from("#__users a")
        ->innerJoin("#__fields_values b ON a.id = b.item_id")
        ->where(["b.field_id = 28", "b.item_id = " . (int)$user_id]);  // $user_id should already be an integer, but cast to be extra safe
    $db->setQuery($query);
    // JFactory::getApplication()->enqueueMessage($query->dump(), 'info');
    if (!$gender = $db->loadResult()) {
        echo "<p>No Value Found</p>";
    } else {
        echo "<p>$gender</p>";
    }
} catch (Exception $e) {
    JFactory::getApplication()->enqueueMessage("Query Syntax Error: " . $e->getMessage(), 'error');  // don't show $e->getMessage() to public
}

p.s. Wenn Sie die "28" nicht fest in Ihre Abfrage einprogrammieren möchten, können Sie eine dynamische Suche nach der Nummer durchführen. Dazu ist jedoch ein weiterer JOIN mit der Tabelle #__fields erforderlich. Dies ist wahrscheinlich nicht die Mühe wert Aufwand in den meisten Fällen.

1
mickmackusa