User-Infos aus Profil anzeigen
Unfertiges "Tutorial", aber der Code klappt schon mal so weit
Vorausssetzung: Mindestens 1 registierter Joomla-User.
Möglichkeit im Frontend das eigene Profil zu bearbeiten.
Aktiviertes Plugin Benutzer - Profile
Ein Feld für anzuzeigende Info unterhalb Benutzerprofilfelder zum Bearbeiten des Benutzerprofils aktivieren. Alle anderen deaktiviere ich erst mal für die Einrichtung und Tests. Können Sie nachträglich...
Die Benutzer können nun in ihrem Profil in Feld Über mich Infos eintragen. Im Bild ist das Backend, aber nur weil ich zu faul bin, das im Frontend zu simulieren:
Ein Blick in die speichernde Datenbanktabelle #__user_profiles zeigt,
dass zum User mit ID 120 im Profilfeld aboutme die Info gespeichert wurde.
Nach dieser Anleitung bis inklusive Überschrift Modulstil anlegen, nicht weiter,
ghsvs.de/programmierer-schnipsel/joomla/114-modulstil-zum-includen-eigener-php-dateien-verwenden
lege ich mir die Grundstruktur an und benenne schließlich die Beispieldatei mein-erster-test.php in user-info.php um.
Zurück zur Anleitung und überall statt mein-erster-test das user-info verwenden.
Erster Test.
(Anmerkung nebenbei: Bzgl. der von mir verwendeten Positionen user-info-test und user-info unangenehmes Joomla-Verhalten in ISIS gefunden
http://www.joomla-bugs.de/forum/index.php/topic,685.0.html)
Erster Test zu Beitrag "User-Infos aus Profil anzeigen"
Gerenderte Ausgabe der Datei user-info-test.php
Ich bin user-info-test.php
Quelltext der Datei user-info-test.php
<?php
/* user-info-test.php */
defined('_JEXEC') or die;
echo '<p>Ich bin user-info-test.php</p>';
Modul zu Beitrag "User-Infos aus Profil anzeigen"
Gerenderte Ausgabe der Datei user-info.php
Name: Volkmar Volli Schlothauer (GHSVS)
Name: Richardt Rösepöse
Über mich: Bin bis Dings außer Haus. War ja auch eh selten da. Wird keinem auffallen.
Geboren am: 2016-11-03 23:00:00
Buchempfehlung: Lesebuch
Telefon: 123456789
Bundesland: Rollmops
Name: Re:Later
Geboren am: 2015-09-15 22:00:00
Buchempfehlung: Liese und die Lesenden
Telefon: quack 54664-89879779-
Bundesland: Senftlingen
Quelltext der Datei user-info.php
<?php
/* user-info.php */
defined('_JEXEC') or die;
// Welche Felder im Frontend ausgeben?
// Um Feld zu deaktivieren Gatterzeichen vor Zeile setzen.
// Siehe deaktiviertes Bsp. postal_code
$fields = array(
'address1',
'address2',
'city',
'region',
'country',
# 'postal_code',
'phone',
'website',
'favoritebook',
'aboutme',
'dob', //Geb.
);
// Datenbankabfrage
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$selects = array(
'p.profile_key',
'p.profile_value',
'u.name',
'u.id',
);
$selects = implode(',', $db->qn($selects));
$query->select($selects)->from($db->qn('#__user_profiles', 'p'));
// Setzte RIGHT statt LEFT, falls auch Benutzer ohne Eintrag
// angezeigt werden sollen. Dann nur der Name.
$query->join('LEFT', $db->qn('#__users', 'u') . ' ON p.user_id = u.id');
// Nur aktivierte User.
$query->where('u.activation IN (' . $db->quote('') . ', ' . $db->quote('0') . ')');
// Keine geblockten User.
$query->where('u.block = 0');
// Ergebnisse holen.
$db->setQuery($query);
$results = $db->loadObjectList();
// Plugin-Sprachplatzhalter laden
JFactory::getLanguage()->load('plg_user_profile', JPATH_ADMINISTRATOR);
// Leider sind paar Sprachplatzhalter wegen abweichenden
// Unterstrichen extra anzugeben,
// !'name' muss mindestens in diesem Array drin bleiben!
$langStrings = array(
'website' => 'PLG_USER_PROFILE_FIELD_WEB_SITE_LABEL',
'favoritebook' => 'PLG_USER_PROFILE_FIELD_FAVORITE_BOOK_LABEL',
'aboutme' => 'PLG_USER_PROFILE_FIELD_ABOUT_ME_LABEL',
'name' => 'Name',
);
// Daten sammeln.
$collect = array();
foreach ($results as $key => $result)
{
// Wir müssen nach ID sammeln, da Name auch doppelt sein kann.
$id = $result->id;
// Name als erstes ablegen. Der wird ggf.
// falls oben RIGHT im DB-Join, immer ausgegeben.
$collect[$id][$langStrings['name']] = $result->name;
$value = trim(json_decode($result->profile_value));
// Gar nix eingetragen? Dann kein weiteres Sammeln.
if (!$value) continue;
// Erst mal profile. aus Feldwerten des profile_key raus
$label = str_replace('profile.', '', $result->profile_key);
// Soll angezeigt werden?
if (in_array($label, $fields))
{
// Ergibt bspw. Joomla-Sprachplatzhalter
// PLG_USER_PROFILE_FIELD_ABOUT_ME_LABEL
if (isset($langStrings[$label]))
{
$label = $langStrings[$label];
}
else
{
$label = 'PLG_USER_PROFILE_FIELD_' . $label . '_LABEL';
}
$collect[$id][$label] = $value;
}
}
// Daten ausgeben
$html = array();
if (!count($collect))
{
$html[] = '<p class="alert alert-info">Derzeit keine Daten hinterlegt.</p>';
}
else
{
$html[] = '<ol>';
foreach ($collect as $user)
{
$html[] = '<li>';
foreach ($user as $label => $value)
{
$html[] = '<p>' . JText::_($label) . ': ';
$html[] = $value . '</p>';
}
$html[] = '</li>';
}
$html[] = '</ol>';
}
echo implode("\n", $html);