web-dev-qa-db-fra.com

Comment remplacer un fichier .xml dans un composant Joomla?

Je voudrais remplacer certains fichiers (.php et .xml) dans /components/com_users/models . Est-ce faisable? Ou devrais-je essayer de faire une copie modifiée/renommée de com_users ?

Ce que j'essaie de faire est de supprimer le champ nom du profil utilisateur et des formulaires d'inscription, en le remplaçant par prénom et nom . J'ai aussi besoin de modifier registration.php et profile.php , donc qu'ils cousent ensemble un nom de $firstname . ' ' . $lastname, car Joomla s'appuie sur nom pour être défini sur quelque chose de significatif.

Cela fonctionne réellement si je modifie les fichiers respectifs directement, mais mes modifications seront perdues avec une mise à niveau vers Joomla. Comment puis-je éviter cela?

1
Joe Völker

Vous devriez vérifier les plugins et événements Joomla.

Il existe de tels événements comme onContentPrepareForm($form, $data) et (vous voudrez peut-être utiliser onContentPrepareData($context, $data) mais vous devriez être d'accord avec le premier) où vous pouvez obtenir $data Et $form Et modifiez le formulaire dedans avec votre propre XML, comme:

    /** @var JForm $form */
    $form->loadFile(dirname(__FILE__).'/custom/form.xml',true);

Il remplacera ce dont vous avez besoin.

Et si vous creusez profondément, vous pourrez trouver des déclencheurs dans l'algorithme du magasin d'utilisateurs comme onUserBeforeSave($user, $isnew, $data) où vous pouvez ajuster les données actuelles en obtenant les données de la demande.

Mais si vous ne travaillez pas avec user, cela peut être une solution à deux, utilisez simplement un événement système comme onAfterRoute comme ceci:

JFactory::getApplication()->input->set('name',JFactory::getApplication()->input->get('firstname').' '.JFactory::getApplication()->input->get('lastname'));
2
Alexandr