Willkommen Gast. Bitte anmelden oder registrieren.

Autor Thema: Werte des Plugins "User Profile" auch im Frontend nutzen  (Gelesen 6952 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

J-Worker

  • Bestätigter Nutzer
  • Beiträge: 18
  • Hat keine Ahnung. Davon aber ganz viel...
    • Webentwicklung mit Joomla!
Werte des Plugins "User Profile" auch im Frontend nutzen
« am: 28. Februar 2012, 13:20:16 »
EDIT: Die bessere und einfachere Lösung kommt weiter UNTEN von Sybrek.



Joomla bietet mit dem User Plugin "User Profile" die Möglichkeit, Erweiterte Felder im User Profil zu nutzen. Leider können diese aber nur im Backend, bei der Registrierung oder in der Kontakt Komponente (com_contact) genutzt werden. Eine weitere Nutzung im Frontend ist leider nicht vorgesehen, aus welchen Gründen auch immer.

Aber um diese Felder nun doch im Frontend nutzen zu können, zum Beispiel um eine Autor Info Box unterhalb von Artikeln einzublenden, zeige ich euch hier einen Lösungsweg auf. Dieser ist sicherlich noch lange nicht Optimal und bedarf sicherlich noch Optimierung.

Ich gehe im folgendem nicht auf jede Einzelheit des Codes ein. Daher sollten sich nur Kundige damit beschäftigen. Die folgenden "Codes" nutzt Ihr auf eigene Gefahr, da eine (ungewollte) Sicherheitslücke nie Ausgeschlossen sein kann.

Override erstellen
Als erstes erstellen wir in unserem Template ein Override für die Artikel Ansicht:

joomlaroot/templates/TEMPLATENAME/html/com_content/article/default.php
Code einfügen, Daten vorbereiten

Nun fügen wir direkt NACH folgender Zeile
// no direct access
defined('_JEXEC') or die;
folgendes ein:
$author         =   $this->item->created_by;
//get the profile information for the linked user
require_once JPATH_ADMINISTRATOR.'/components/com_users/models/user.php';
$userModel = JModel::getInstance('User','UsersModel',array('ignore_request' => true));
$data = $userModel->getItem($author);

JPluginHelper::importPlugin('user');
$form = new JForm('com_users.profile');
// Get the dispatcher.
$dispatcher = JDispatcher::getInstance();

// Trigger the form preparation event.
$dispatcher->trigger('onContentPrepareForm', array($form, $data));
// Trigger the data preparation event.
$dispatcher->trigger('onContentPrepareData', array('com_users.profile', $data));

// Load the data after the plugins have operated.
$form->bind($data);
$result->profile = $form;
$this->contact = $result;
$prof = $this->contact;
$fields = $prof->profile->getFieldset('profile');

foreach ($fields as $profile) :
if ($profile->value) :
$profile->text = htmlspecialchars($profile->value, ENT_COMPAT, 'UTF-8');

switch ($profile->id) :
                        //URL der Webseite holen und Link vorbereiten und in $authorurl speichern
case "profile_website":
$v_http = substr ($profile->profile_value, 0, 4);

if ($v_http == "http") :
$authorurl = '<a target="_blank" rel="author" href="'.$profile->text.'">'.$user->name.'</a>';
else :
$authorurl = '<a target="_blank" rel="author" href="http://'.$profile->text.'">'.$user->name.'</a>';
endif;
break;
endswitch;

           switch ($profile->id) :
               //Über mich Text holen und in $about speichern
               case "profile_aboutme":
                   $about = $profile->text;
           endswitch;

endif;
endforeach;


Ausgabe der Daten
Nun können wir die Daten wie folgt ausgeben, die Stelle im Theme könnte Ihr natürlich selbst wählen. Am besten wäre natürlich nach folgender Stelle:

<?php echo $this->item->fulltext?>


        <div class="author-info">
           

                <div class="author-description">
  <h3>
                        Author  : <?php echo $authorurl ?>
</h3>
  <p><?php echo $about ?></p>

  </div><!-- end .author-description -->
      </div>

Im Anhang das ganze noch mal als fertige Datei. Beachtet das Sie zu einem Template gehört das Ihr nicht nutzt und es daher zu Darstellungs Problemen kommen wird. Sie dient lediglich der Veranschaulichung und enthält noch anderen Code, z.B. Darstellung eines Avatars via Gravatar.com



Und nun seid Ihr dran:

Wo kann man am Code optimieren? Was kann man vereinfachen? Vielen Dank im Voraus.

Gruß,
Markus

Kleiner Nachtrag:

Die Autorbio kann nur bis zu 255 Zeichen enthalten da das zugehörige Datenbankfeld vom Typ VarChar(255) ist. Wenn Ihr den Typ auf Text ändert habt Ihr mehr Platz für Text.
« Letzte Änderung: 29. Februar 2012, 00:59:41 von J-Worker »

Joomla-Hilfe

  • Oberwetterfrosch (Mod)
  • Beiträge: 155
Antw: Werte des Plugins "User Profile" auch im Frontend nutzen
« Antwort #1 am: 28. Februar 2012, 18:25:32 »
Ich will keine Spaßbremse sein, aber das ist ein Bug, und er ist bereits gefixt: http://joomlacode.org/gf/project/joomla/tracker/?action=TrackerItemEdit&tracker_item_id=27931
Dietmar

Die Realität ist eine Halluzination, die durch akuten Alkoholmangel hervorgerufen wird.

J-Worker

  • Bestätigter Nutzer
  • Beiträge: 18
  • Hat keine Ahnung. Davon aber ganz viel...
    • Webentwicklung mit Joomla!
Antw: Werte des Plugins "User Profile" auch im Frontend nutzen
« Antwort #2 am: 28. Februar 2012, 21:42:29 »
Hallo Dietmar,

das was da du ansprichst handelt nur davon das man in der 2.5.1 zur Zeit die ExtraFelder nicht im Frontend via Profile Edit ändern kann, da diese einfach nicht angezeigt werden.

sybrek

  • Bestätigter Nutzer
  • Beiträge: 25
Antw: Werte des Plugins \"User Profile\" auch im Frontend nutzen
« Antwort #3 am: 29. Februar 2012, 00:15:57 »
Muss Dietmar Recht geben ..

Bin gerade dabei Joomla ohne CB, Jomsocial, etc. als Community zu nutzen und hing gestern erst viel zu lange daran fest.

Felder werden sowohl im Profil als auch beim Edit angezeigt

Commit:
https://github.com/joomla/joomla-cms/commit/3a5491c5e3540665b147c08dcb30c489c2f7d9ec#plugins/user/profile/profile.php

PS: Je nach Anwendung würde ich auch ein größeren VARCHAR nehmen anstatt TEXT

NR

Beitrag zusammengefügt: 29. Februar 2012, 00:30:16
Nach Kritik an der Abschweifung vom Thema, hier noch ein kleiner Vorschlag:

Man kann das Profil auch mit $profile = JUserHelper::getProfile($userid); holen.
« Letzte Änderung: 29. Februar 2012, 00:30:16 von sybrek »

J-Worker

  • Bestätigter Nutzer
  • Beiträge: 18
  • Hat keine Ahnung. Davon aber ganz viel...
    • Webentwicklung mit Joomla!
Antw: Werte des Plugins \"User Profile\" auch im Frontend nutzen
« Antwort #4 am: 29. Februar 2012, 00:57:15 »
Man kann das Profil auch mit $profile = JUserHelper::getProfile($userid); holen.

Hi,

danke. Warum kompliziert wenn es auch einfach geht. Frage mich gerade ob das schon in 1.6  ging, aus der Zeit kam eigentlich meine Lösung.
http://docs.joomla.org/JUserHelper::getProfile/1.6
Ich lese mal wieder öfters in den/der Docs/Api.

Ausgabe erfolgt dann als :
echo $profile->profile['website'];


Gruß,
Markus
« Letzte Änderung: 29. Februar 2012, 01:20:28 von J-Worker »