Développement

Que devrais-je utiliser pour modifier le code php ?

Il existe deux options principales : l’éditeur de texte ou l”environnement de développement intégré (IDE).

Éditeur de texte

Si vous débutez dans le développement de logiciels ou n’avez pas beaucoup d’expérience avec les IDE, l’utilisation d’un éditeur de texte vous permettra d’être opérationnel le plus rapidement. Au minimum, vous voudrez un éditeur avec coloration syntaxique, qui rend le code plus facile à lire. Si vous pensez que vous pouvez soumettre des correctifs pour le suivi de bogues, vous voudrez vous assurer que votre éditeur de texte ne modifie pas les terminaisons de ligne. Si vous utilisez Windows, Notepad++ est un bon choix. Si vous êtes sur un Mac, TextWrangler est un choix populaire. Vous pouvez également essayer TextMate.

IDE - Environnement de Développement Intégré

Un IDE - EDI pour Environnement de Développement Intégré en français - fait exactement ce que son nom implique : il comprend un ensemble d’outils que vous utiliseriez normalement séparément. La plupart des IDE incluront le contrôle de code source qui vous permettra de valider et de mettre à jour directement votre code à partir de votre référentiel cvs. Il peut avoir un client FTP intégré pour faciliter le transfert de fichiers sur un serveur distant. Il disposera d’une vérification de syntaxe pour attraper les erreurs avant que vous essayiez d’exécuter le code sur un serveur.

Les deux IDE gratuits les plus populaires pour les développeurs PHP sont Eclipse et NetBeans. Eclipse dispose de deux plugins différents pour travailler avec le code PHP : PDT et PHPEclipse.

Je n’aime pas certaines traductions dans Elgg. Comment puis-je les changer ?

La meilleure façon de faire ceci est avec un plugin.

Créez le squelette du plugin

Squelette du plugin

Localisez la chaîne que vous voulez modifier

Toutes les chaînes qu’un utilisateur peut voir devraient être dans le répertoire /languages ou dans le répertoire des langues d’un plugin (/mod/<plugin name>/languages). Ceci est fait de sorte qu’il soit facile de changer la langue utilisée par Elgg. Pour plus d’informations à ce sujet, consultez la documentation développeur sur Internationalisation .

Pour trouver la chaîne, utilisez grep ou un éditeur de texte qui fournit la recherche dans les fichiers pour localiser la chaîne. (Un bon éditeur de texte pour Windows est Notepad++ ) Disons que nous voulons modifier la chaîne Ajouter un contact en Se faire un nouvel ami. La commande grep qui pemet de trouver cette chaîne serait grep -r "Ajouter un contact" *. Avec Notepad++ , vous utiliseriez la commande « Trouver dans les fichiers ». Vous recherchez la chaîne, définissez le filtre sur *.php, définissez le répertoire de recherche sur le répertoire racine de Elgg, et vous assurez qu’il recherche dans tous les sous-répertoires. Vous voudrez peut-être aussi définir que la recherche soit sensible à la casse.

Vous devriez placer la chaîne « Ajouter un contact » dans /languages/fr.php. Vous devriez voir quelque chose comme ceci dans le fichier :

'friend:add' => "Add friend",

Cela signifie que chaque fois que Elgg voit friend:add il le remplace par Ajouter un contact. Nous voulons changer la définition de friend:add.

Remplacement de la chaîne

Pour remplacer cette définition, nous ajouterons un fichier linguistique langues au plugin que nous avons construit dans la première étape.

  1. Créez un nouveau répertoire : /mod/<your plugin name>/languages

  2. Créer un fichier dans ce répertoire appelé fr.php

  3. Ajoutez ces lignes à ce fichier

<?php

return array(
   'friend:add' => 'Make a new friend',
);

Assurez-vous que vous n’avez pas d’espace ou de retour à la ligne avant <?php.

Vous avez terminé maintenant et devriez être en mesure d’activer le plugin et de voir le changement. Si vous remplacez la langue d’un plugin, assurez-vous que votre plugin est chargé après celui que vous essayez de modifier. L’ordre de chargement est déterminé dans la page Administration des outils de la section Administrateur. Au fur et à mesure que vous trouverez d’autres choses à changer, vous pouvez continuer à les ajouter à ce plugin.

Comment puis-je trouver le code qui fait X ?

La meilleure façon de trouver le code qui fait quelque chose que vous souhaitez changer est d’utiliser grep ou un outil de recherche similaire. Si grep n’est pas intégré à votre système d’exploitation, vous voudrez installer un outil grep ou utiliser un éditeur de texte/IDE qui dispose d’un bonne recherche dans les fichiers. Notepad++ est un bon choix pour les utilisateurs de Windows. Eclipse avec PHP et NetBeans sont de bons choix pour n’importe quelle plateforme.

Exemple de chaîne - String

Supposons que vous souhaitez trouver où se trouve le code de la boîte de Connexion. Une chaîne de la zone Connexion qui devrait être suffisamment unique est Se souvenir de moi - « Remember me ». Faites un grep pour cette chaîne. Vous constaterez qu’elle n’est utilisée que dans le fichier fr.php - ou en.php pour la version d’origine - dans le répertoire /languages. Là, il est utilisé pour définir la chaîne Internationalisation user:persistent. Faites maintenant un grep pour cette chaîne. Vous la trouverez en deux endroits : le même fichier linguistique fr.php et dans /views/default/forms/login.php. Ce dernier emplacement définit le code html qui constitue la boîte Connexion.

Exemple d’Action

Supposons que vous souhaitez trouver le code qui s’exécute lorsqu’un utilisateur clique sur le bouton Enregistrer après avoir agencé les widgets sur une page de profil. Consultez la page du Profil d’un utilisateur de test. Utilisez Firebug pour inspecter le html de la page jusqu’à ce que vous trouviez l’action du formulaire de widgets de modification. Vous verrez que l’URL depuis la racine est action/widgets/move.

Faites un grep sur widgets/move et deux fichiers sont retournés. L’un est le code JavaScript pour les widgets : /js/lib/ui.widgets.js. L’autre, /engine/lib/widgets.php, est l’endroit où l’action est enregistrée à l’aide de elgg_register_action('widgets/reorder'). Vous ne connaissez peut-être pas cette fonction : dans ce cas, vous devriez consulter sa page dans la référence de l’API. Effectuez une recherche sur la fonction et cela renverra la documentation de la fonction. Cela vous indique que l’action se trouve à l’emplacement par défaut puisqu’un emplacement de fichier n’a pas été spécifié. L’emplacement par défaut des actions est /actions de sorte que vous trouverez le fichier dans /actions/widgets/move.php.

Mode de débogage

Durant le processus d’installation, vous avez peut-être remarqué une case à cocher qui contrôlait si le mode débogage était activé ou désactivé. Ce paramètre peut également être modifié dans la page Administration du site. Le mode de débogage écrit beaucoup de données supplémentaires dans votre journal php. Par exemple, lorsque vous utilisez ce mode, chaque requête dans la base de données est écrite dans vos journaux. Cela peut être utile pour le débogage d’un problème, mais peut produire une quantité énorme de données qui peuvent ne pas être liées du tout au problème recherché. Vous pouvez expérimenter avec ce mode pour comprendre ce qu’il fait, mais assurez-vous d’exécuter Elgg en mode normal sur un serveur de production.

Avertissement

En raison de la quantité de données enregistrées, il est préférable de ne pas l’activer sur un serveur de production car cela peut remplir les fichiers journaux très rapidement.

Que contient le journal en mode débogage ?

  • Toutes les requêtes de base de données

  • Profilage des requêtes de base de données

  • Durée de génération de page

  • Nombre de requêtes par page

  • Liste des fichiers linguistiques du plugin

  • Des erreurs/avertissements supplémentaires par rapport au mode normal (il est très rare que ces types d’erreurs soient liées à un problème que vous pourriez avoir)

À quoi ressemblent les données ?

[07-Mar-2009 14:27:20] Query cache invalidated
[07-Mar-2009 14:27:20] ** GUID:1 loaded from DB
[07-Mar-2009 14:27:20] SELECT * from elggentities where guid=1 and ( (1 = 1)  and enabled='yes') results cached
[07-Mar-2009 14:27:20] SELECT guid from elggsites_entity where guid = 1 results cached
[07-Mar-2009 14:27:20] Query cache invalidated
[07-Mar-2009 14:27:20] ** GUID:1 loaded from DB
[07-Mar-2009 14:27:20] SELECT * from elggentities where guid=1 and ( (1 = 1)  and enabled='yes') results cached
[07-Mar-2009 14:27:20] ** GUID:1 loaded from DB
[07-Mar-2009 14:27:20] SELECT * from elggentities where guid=1 and ( (1 = 1)  and enabled='yes') results returned from cache
[07-Mar-2009 14:27:20] ** Sub part of GUID:1 loaded from DB
[07-Mar-2009 14:27:20] SELECT * from elggsites_entity where guid=1 results cached
[07-Mar-2009 14:27:20] Query cache invalidated
[07-Mar-2009 14:27:20] DEBUG: 2009-03-07 14:27:20 (MST): "Undefined index:  user" in file /var/www/elgg/engine/lib/elgglib.php (line 62)
[07-Mar-2009 14:27:20] DEBUG: 2009-03-07 14:27:20 (MST): "Undefined index:  pass" in file /var/www/elgg/engine/lib/elgglib.php (line 62)
[07-Mar-2009 14:27:20] ***************** DB PROFILING ********************
[07-Mar-2009 14:27:20] 1 times: 'SELECT * from elggentities where guid=1 and (  (access_id in (2) or (owner_guid = -1) or (access_id = 0 and owner_guid = -1)) and enabled='yes')'
...
[07-Mar-2009 14:27:20] 2 times: 'update elggmetadata set access_id = 2 where entity_guid = 1'
[07-Mar-2009 14:27:20] 1 times: 'UPDATE elggentities set owner_guid='0', access_id='2', container_guid='0', time_updated='1236461868' WHERE guid=1'
[07-Mar-2009 14:27:20] 1 times: 'SELECT guid from elggsites_entity where guid = 1'
[07-Mar-2009 14:27:20] 1 times: 'UPDATE elggsites_entity set name='3124/944', description='', url='http://example.org/' where guid=1'
[07-Mar-2009 14:27:20] 1 times: 'UPDATE elggusers_entity set prev_last_action = last_action, last_action = 1236461868 where guid = 2'
[07-Mar-2009 14:27:20] DB Queries for this page: 56
[07-Mar-2009 14:27:20] ***************************************************
[07-Mar-2009 14:27:20] Page /action/admin/site/update_basic generated in 0.36997294426 seconds

Quels événements sont déclenchés sur chaque chargement de page ?

Il y a 4 événements Elgg qui sont déclenchés sur chaque chargement de page :

  1. plugins_boot, system

  2. init, system

  3. ready, system

  4. shutdown, system

Les trois premiers sont déclenchés dans Elgg\Application::bootCore. shutdown, system est déclenché dans \Elgg\Application\ShutdownHandler après que la réponse a été envoyée au client. Ils sont tous documentés.

Il existe d’autres événements déclenchés par Elgg occasionnellement (par exemple lorsqu’un utilisateur se connecte).

Copie d’un plugin

Il y a beaucoup de questions posées sur la façon de copier un plugin. Disons que vous voulez copier le plugin blog afin d’exécuter un plugin appelé blog et un autre appelé poetry. Ce n’est pas difficile, mais cela demande beaucoup de travail. Vous auriez besoin de

  • changer le nom du répertoire

  • changer les noms de toutes les fonctions (avoir deux fonctions avec le même nom provoque un plantage de PHP)

  • modifier le nom de chaque vue (afin de ne pas remplacer les vues du plugin d’origine)

  • modifier tous les sous-types du modèle de données

  • modifier le fichier linguistique

  • changer tout le reste de ce qui était spécifique au plugin d’origine

Note

Si vous essayez de cloner le plugin groups, vous aurez la difficulté supplémentaire que le plugin de groupe ne définit pas de sous-type.