Mise à niveau des plugins¶
Préparez votre plugin pour la prochaine version de Elgg.
Voir les guides d’administration pour savoir comment mettre à niveau un site en production.
Contenus
-
Les vues cacheables doivent avoir une extension de fichier dans leurs noms
Abandon de
jquery-migrate
et mise à niveau dejquery
vers ^2.1.4fxp/composer-asset-plugin
est maintenant nécessaire pour installer Elgg à partir de la sourceListe des vues dépréciées et des arguments des vues qui ont été supprimés
Le formateur d’attributs supprime les clefs avec des tirets bas
La création ou la suppression d’une relation déclenche un seul événement
La fonction de discussion a été extraite des groupes vers son propre plugin
Augmentation de la valeur de l’index z dans la classe elgg-menu-site
Introduction d’une bibliothèque tierce pour l’envoi de courriels
Le type de vue est statique après l’appel initial
elgg_get_viewtype()
De 2.2 à 2.3¶
Version de PHP¶
PHP 5.5 a atteint la date de fin de support en Juillet 2016. Afin de s’assurer que les sites Elgg soient sécurisés, nous exigeons désormais PHP 5.6 pour les nouvelles installations.
Les installations existantes peuvent continuer à utiliser PHP 5.5 jusqu’à Elgg 3.0.
Afin de mettre à niveau Elgg vers la 2.3 en utilisant composer avec PHP 5.5, vous pouvez avoir besoin d’utiliser le drapeau --ignore-platform-reqs
.
APIs dépréciées¶
Enregistrement pour le hook
to:object
par le nom de l’extenseur : Utilisez plutôt les hooksto:object, annotation
etto:object, metadata
à la place.
ajax_forward_hook()
: N’est plus utilisé comme gestionnaire pour le hook “forward”,”all”`. La réponse Ajax est maintenant enveloppée par laResponseFactory
ajax_action_hook()
: N’est plus utilisé comme gestionnaire pour le hook “action”,”all”. La mise en mémoire tampon de la sortie commence maintenant avant que le hook ne soit déclenché dansActionsService
elgg_error_page_handler()
: N’est plus utilisé comme gestionnaire pour les hooks “forward”,<error_code>
get_uploaded_file()
: Utilisez la nouvelle API d’envoi de fichiers à la place
get_user_notification_settings()
: UtilisezElggUser::getNotificationSettings()
set_user_notification_setting()
: UtilisezElggUser::setNotificationSetting()
événement
pagesetup, system
: Utilisez le menu ou les hooks de la coquille de la page (page shell) à la place.
elgg.walled_garden
ce JavaScript est osbolète : Utilisez le module AMDelgg/walled_garden
à la place.
elgg()->getDb()->getTableprefix()
: Utilisezelgg_get_config('dbprefix')
.
update_entity_last_action()
privée : Évitez de mettre à jour manuellement le timestamp de la dernière action.Définir un
access_id
non-public sur une métadonnée est obsolète. Voyez ci-dessous.
get_resized_image_from_existing_file()
: Utilisezelgg_save_resized_image()
.
get_resized_image_from_uploaded_file()
: Utilisezelgg_save_resized_image()
en combinaison avec l’API d’envoi de fichier (upload).
get_image_resize_parameters()
sera supprimé.
elgg_view_input()
: Utilisezelgg_view_field()
. Toutes nos excuses pour le changement d’API.
Vues obsolètes¶
resources/file/world
: Utilisez la vueresources/file/all
à la place.
resources/pages/world
: Utilisez la vueresources/pages/all
à la place.
walled_garden.js
: Utilisez le moduleelgg/walled_garden
à la place.
Nouvelle API pour la gestion des pages et des actions¶
Les gestionnaires de pages et les fichiers de script d’action doivent maintenant renvoyer une instance de \Elgg\Http\ResponseBuilder
. Les plugins devraent utiliser les fonctions suivantes pour créer des réponses :
elgg_ok_response()
envoie une réponse 2xx avec des données HTML (gestionnaire de page) ou JSON (actions)
elgg_error_response()
envoie une réponse 4xx ou 5xx sans contenu/données
elgg_redirect_response()
redirige silencieusement la requête
Nouvelle API pour travailler avec l’envoi de fichiers¶
elgg_get_uploaded_files()
- renvoie un tableau d’objets Symfony de fichiers téléchargés
ElggFile::acceptUploadedFile()
- déplace un fichier téléchargé dans le répertoire de fichiers de Elgg
Nouvelle API pour la manipulation d’images¶
Le nouveau service de manipulation d’images met en œuvre une approche plus efficace pour recadrer et redimensionner les images.
elgg_save_resized_image()
- recadre et redimensionne une image aux dimensions choisies
Nouvelle API pour les événements¶
elgg_clear_event_handlers()
- similaire àelgg_clear_plugin_hook_handlers
cette fonction supprime tous les gestionnaires d’événements enregistrés
Nouvelle API pour la signature des URLs¶
Les URL peuvent désormais être signées avec une clé HMAC SHA-256 et validées à tout moment avant l’expiration de l’URL. Cette fonctionnalité peut être utilisée pour tokenizer l’URL d’action dans les notifications par e-mail, ainsi que d’autres utilisations en dehors de l’installation Elgg.
elgg_http_get_signed_url()
- signe l’URL avec la clef HMAC
elgg_http_validate_signed_url()
- valide l’URL signée
elgg_signed_request_gatekeeper()
- gardien qui valide la signature de la requête en cours
Vues de formulaire extensibles¶
Le rendu du pied de page du formulaire peut maintenant être reporté jusqu’à ce que la vue du formulaire et ses extensions aient terminé le rendu. Cela permet aux plugins de collaborer sur les vues de formulaire sans casser la logique de balisage.
elgg_set_form_footer()
- définit le pied de page du formulaire pour le rendu différé
elgg_get_form_footer()
- renvoie le pied de page du formulaire défini
Métadonnées access_id
¶
Il est maintenant obsolète de créer des métadonnées avec une valeur explicite de access_id
autre que ACCESS_PUBLIC
.
Dans Elgg 3.0, les métadonnées ne seront pas contrôlées et seront disponibles dans tous les contextes. Si votre plugin repose sur le contrôle d’accès des métadonnées, il serait sage de migrer le stockage vers des annotations ou des entités à la place.
Nouvelle API pour extraire des noms de classes à partir des tableaux¶
Semblable à elgg_extract()
, elgg_extract_class()
extrait la clef class
(si elle est présente), la fusionne avec les noms de classe existants, et renvoie toujours un tableau.
Notifications¶
Un hook de haut niveau
'prepare','notification'
est maintenant déclenché pour les notifications instantanées et d’abonnement et peut être utilisé pour modifier les objets de notification quel que soit leur type.le hook
'format','notification:<method>'
est maintenant déclenché pour les notifications instantanées et d’abonnement et peut être utilisé pour formater la notification (par ex. pour supprimer les balises HTML, envelopper le corps de notification dans un modèle, etc.).Les notifications instantanées sont désormais traitées par le service de notifications, de sorte que la quasi-totalité des hooks applicables aux notifications d’abonnement s’appliquent également aux notifications instantanées.
elgg_get_notification_methods()
peut être utilisé pour obtenir les méthodes de notification enregistréesAjout de
ElggUser::getNotificationSettings()
etElggUser::setNotificationSetting()
Les fonctions de liste d’entités peuvent générer des tableaux¶
Dans des fonctions telles que elgg_list_entities($options)
, le rendu sous forme de tableau est possible en définissant $options['list_type'] = 'table'
et en fournissant un tableau de colonnes de tableau dans $options['columns']
. Chaque colonne est un objet Elgg\Views\TableColumn
, généralement créé via des méthodes du service elgg()->table_columns
.
Les plugins peuvent fournir ou modifier ces méthodes d’usine (voir Elgg\Views\TableColumn\Columfactory
). Pour un exemple d’utilisation, consultez la vue admin/users/newest
.
Composants d’onglets en ligne¶
Le composant szq onglets en ligne peut désormais être rendu avec l’affichage page/composants/onglets
. Les composants permettent de basculer entre pré-rempli et chargé-par-ajax. Voir page/components/tabs
dans les vues du noyau et theme_sandbox/components/tabs
dans le plugin developers pour les instructions et les exemples d’utilisation.
API pour modifier l’URL d’inscription et de connexion¶
elgg_get_registration_url()
doit être utilisé pour obtenir l’URL d’inscription sur le site
elgg_get_login_url()
doit être utilisé pour obtenir l’URL de connexion du sitele hook
registration_url, site
peut être utilisé pour modifier l’URL d’inscription par défautle hook
login_url, site
peut être utilisé pour modifier l’URL de connexion par défaut
Prise en charge des jeux de champs (fieldsets) dans les formulaires¶
elgg_view_field()
remplaceelgg_view_input()
. Elle dispose d’une API similaire, mais accepte un seul tableau.
elgg_view_field()
prend en charge#type
,#label
,#help
et#class
, permettant l’envoi de versions non préfixées à la vue d’entrée$vars
.La nouvelle vue
input/fieldset
peut être utilisée pour rendre un ensemble de champs, chacun rendu avecelgg_view_field()
.
De 2.1 à 2.2¶
APIs dépréciées¶
Bibliothèque JavaScript
elgg.ui.river
: Supprimez les appels àelgg_load_js('elgg.ui.river')
du code du plugin. Mettez à jourcore/river/filter
etforms/comment/save
, s’ils sont remplacés, pour exiger des modules de composants AMDMéthodes
elgg.ui.popupOpen()
etelgg.ui.popupClose()
dans la bibliothèque JSelgg.ui
: Utilisez plutôt le moduleelgg/popup
.Bibliothèque
lightbox.js
: n’utilisez paselgg_load_js('lightbox.js');
à moins que votre code ne référence l’espace de nom dépréciéelgg.ui.lightbox
. Utilisez plutôt le module AMDelgg/lightbox
.Bibliothèque
elgg.embed
et objetelgg.embed
: N’utilisez paselgg_load_js('elgg.embed')
. Utilisez plutôt le module AMDelgg/embed
Accéder directement à la valeur de configuration
icons_sizes
: Utilisezelgg_get_icon_sizes()
can_write_to_container()
: UtilisezElggEntity::canWriteToContainer()
Vues obsolètes¶
elgg/ui.river.js
est déprécié : ne vous fiez pas aux URLs de simplecache pour travailler.
groups/js
est déprécié : utilisez à la place le module AMDgroups/navigation
comme dépendance d’élément du menu pour les éléments de menu « feature » (mettre en Une) et « un-feature » (retirer de la Une).
lightbox/settings.js
est déprécié : utilisez l’attributgetOptions, ui.lightbox
oudata-colorbox-opts
du hook plugin JS.
elgg/ckeditor/insert.js
est déprécié : vous n’avez plus besoin de l’inclure, l’enregistrement des hooks a lieu dans le moduleelgg/ckeditor
embed/embed.js
est déconseillé : utilisez le module AMDelgg/embed
.
Ajout du module elgg/popup
¶
Le nouveau module elgg/popup peut être utilisé pour créer des interactions plus complexes de déclenchement de popup, y compris la liaison des types d’ancrage personnalisés et l’ouverture/fermeture de popup programmatiquement.
Ajout du module elgg/lightbox
¶
Le nouveau module elgg/lightbox peut être utilisé pour ouvrir et fermer la lightbox par programme.
Ajout du module elgg/embed
¶
Même s’il est rarement nécessaire, le module AMD elgg/embed
peut être utilisé pour accéder aux méthodes d’intégration par programme. Le module s’initialise lui-même si nécessaire et est peu susceptible de nécessiter une décoration supplémentaire.
Nouvelle API pour la manipulation des icônes d’entités¶
ElggEntity
implémente désormais l’interface\Elgg\EntityIcon
elgg_get_icon_sizes()
- renvoie les tailles d’icônes spécifiques au type/sous-type d’entité spécifié
ElggEntity::saveIconFromUploadedFile()
- crée des icônes à partir d’un fichier téléchargé
ElggEntity::saveIconFromLocalFile()
- crée des icônes à partir d’un fichier local
ElggEntity::saveIconFromElggFile()
- crée des icônes à partir d’une instance deElggFile
ElggEntity::getIcon()
- renvoie une instance deElggIcon
qui pointe vers l’emplacement de l’icône de l’entité dans le répertoire de fichiers (il peut s’agir simplement d’un espace réservé, utilisezElggEntity::hasIcon()
pour vérifier si le fichier a été écrit)
ElggEntity::deleteIcon()
- supprime les icônes d’entité
ElggEntity::getIconLastChange()
- retourne la date de modification du fichier icône
ElggEntity::hasIcon()
- vérifie si une icône de cette dimension a bien été créé
elgg_get_embed_url()
- peut être utilisé pour retourner une URL pour intégrer l’icône d’une entité (servie via le gestionnaire /serve-icon)
Les avatars des utilisateurs sont désormais servis via le gestionnaire serve-file
. Les plugins devraient commencer à utiliser elgg_get_inline_url()
et noter que :
le gestionnaire de page et la vue ressource``/avatar/view`` sont devenus obsolètes
le fichier
/mod/profile/icondirect.php
est devenu obsolète
profile_set_icon_url()
n’est plus enregistré comme fonction de rappel (callback) pour le hook plugin"entity:icon:url","user"
Les avatars de groupe sont désormais servis via le gestionnaire serve-file
. Les plugins devraient commencer à utiliser elgg_get_inline_url()
et noter que :
le gestionnaire de page
groupicon
(groups_icon_handler()
) est devenu obsolètele fichier
/mod/groups/icon.php
est devenu obsolète
Les miniatures et les téléchargements sont dsormais servis via le gestionnaire serve-file
. Les plugins devraient commencer à utiliser elgg_get_inline_url()
et elgg_get_download_url()
et noter que :
le gestionnaire de page et la vue ressource``file/download`` sont devenus obsolètes
le fichier
mod/file/thumbnail.php
est devenu obsolètePlusieurs vues ont été mises à jour pour utiliser les nouvelles URLs de téléchargement, notamment :
mod/file/views/default/file/specialcontent/audio/default.php
mod/file/views/default/file/specialcontent/image/default.php
mod/file/views/default/resources/file/view.php
mod/file/views/rss/file/enclosure.php
APIs supprimées¶
Juste un avertissement pour indiquer que les fonctions de caches d’entité privée (par ex. _elgg_retrieve_cached_entity
) ont été supprimées. Quelques plugins ont pu les utiliser. Les plugins ne devraient pas utiliser les API privées dans la mesure où elles seront plus souvent supprimées sans avertissement.
Un module elgg/ckeditor
amélioré¶
le module elgg/ckeditor peut maintenant être utilisé pour ajouter un éditeur WYSIWYG à un textarea de manière programmatique avec elgg/ckeditor#bind
.
De 2.0 à 2.1¶
APIs dépréciées¶
ElggFile::setFilestore
get_default_filestore
set_default_filestore
elgg_get_config('siteemail')
: Utilisezelgg_get_site_entity()->email
URLs commençant par
/css/
et/js/
:Utilisez elgg_get_simplecache_url()
elgg.ui.widgets
L’objet JavaScript est déprécié par le module AMDelgg/widgets
changements de Application::getDb()
¶
Si vous utilisez cette API bas niveau, ne vous attendez pas à ce qu’elle renvoie une instance Elgg\Database
dans 3.0. Elle renvoie maintenant un Elgg\Application\Database
avec de nombreuses alertes de dépréciation. Ces méthodes n’ont jamais été destinées à devenir une API publique, mais nous ferons de notre mieux pour les prendre en charge dans en 2.x.
Ajout du module elgg/widgets
¶
Si le code de votre plugin appelle elgg.ui.widgets.init()
, utilisez plutôt le module elgg/widgets.
De 1.x à 2.0¶
Elgg peut maintenant être installé en tant que dépendance de composer au lieu d’être situé à la racine¶
Cela signifie qu’un site Elgg peut ressembler à ceci :
settings.php
vendor/
elgg/
elgg/
engine/
start.php
_graphics/
elgg_sprites.png
mod/
blog
bookmarks
...
elgg_get_root_path
et $CONFIG->path
vont renvoyer le chemin vers le répertoire racine de l’application, qui n’est pas nécessairement le même que le répertoire racine d’Elgg core (qui dans ce cas est vendor/elgg/elgg/
).
N’essayez pas d’accéder directement au noyau Elgg depuis votre plugin, car vous ne pouvez pas compter sur son emplacement dans le système de fichiers.
En particulier, n’essayez pas de charger engine/start.php
.
// Don't do this!
dirname(__DIR__) . "/engine/start.php";
Pour démarrer Elgg manuellement, vous pouvez utiliser la classe Elgg\Application
.
// boot Elgg in mod/myplugin/foo.php
require_once dirname(dirname(__DIR__)) . '/vendor/autoload.php';
\Elgg\Application::start();
Cependant, utilisez cette approche avec parcimonie. Préférez le routage Routage dans la mesure du possible, car cela permet de découpler vos URLs publiques et la structure du système de fichiers.
En outre, n’essayez pas d’accéder directement aux fichiers _graphics
.
readfile(elgg_get_root_path() . "_graphics/elgg_sprites.png");
Utilisez le vues à la place :
echo elgg_view('elgg_sprites.png');
Les vues cacheables doivent avoir une extension de fichier dans leurs noms¶
Cette exigence nous permet de servir des actifs directement à partir du disque pour des raisons de performance, au lieu de les servir par PHP.
Il est également beaucoup plus facile d’explorer les ressources disponibles dans le cache en allant vers dataroot/views_simplecache et en naviguant à partir de là.
Mauvais :
my/cool/template
Bon :
my/cool/template.html
Nous mettons maintenant en cache des ressources par $viewtype/$view
, et plus md5('$viewtype|$view')
, qui entraînait des conflits entre les vues pouvant être mises en cache qui n’avaient pas d’extension de fichier pour les distinguer des répertoires.
Abandon de jquery-migrate
et mise à niveau de jquery
vers ^2.1.4¶
l’API jQuery 2.x est compatible avec 1.x, mais abandonne la prise en charge de IE8-, que Elgg ne prend plus en charge depuis un certain temps de toutes façons.
Lisez http://jquery.com/upgrade-guide/1.9/ pour savoir comment se passer de jquery-migrate.
Si vous préférez la conserver, vous pouvez utiliser ce code dans l’initialisation de votre plugin :
elgg_register_js('jquery-migrate', elgg_get_simplecache_url('jquery-migrate.js'), 'head');
elgg_load_js('jquery-migrate');
Définissez également une vue jquery-migrate.js
contenant le contenu du script.
JS et CSS ont été déplacés hors des répertoires js/ et css/¶
Ils ont également reçu des extensions .js et .css respectivement s’ils ne les avaient pas déjà :
Ancienne vue |
Nouvelle vue |
---|---|
|
|
|
|
|
|
|
|
|
|
Le principal avantage que cela apporte est d’être en mesure de co-localiser les actifs connexes. Ainsi, un modèle (view.php
) peut avoir ses dépendances CSS/JS juste à côté (view.css
, view.js
).
Un grand soin a été pris pour rendre cette modification aussi rétro-compatible que possible, de sorte que vous ne devriez pas avoir besoin de mettre à jour les références des vues immédiatement. Cependant, vous êtes certainement encouragés à déplacer vos vues JS et CSS vers leurs nouveaux emplacements canoniques.
En pratique, ceci introduit quelques pièges :
Les hooks view_vars, $view_name
et view, $view_name
fonctionneront sur le nom canonique de la vue :
elgg_register_plugin_hook_handler('view', 'css/elgg', function($hook, $view_name) {
assert($view_name == 'elgg.css') // not "css/elgg"
});
L’utilisation du hook view, all
et la vérification des vues individuelles peuvent ne pas fonctionner comme prévu :
elgg_register_plugin_hook_handler('view', 'all', function($hook, $view_name) {
// Won't work because "css/elgg" was aliased to "elgg.css"
if ($view_name == 'css/elgg') {
// Never executed...
}
// Won't work because no canonical views start with css/* anymore
if (strpos($view_name, 'css/') === 0) {
// Never executed...
}
});
Merci de nous faire part de tous les autres problèmes de rétro-compatibilité que ce changement provoque. Nous aimerions en résoudre le plus grand nombre possible pour faciliter la transition.
fxp/composer-asset-plugin
est maintenant nécessaire pour installer Elgg à partir de la source¶
Nous utilisons fxp/composer-asset-plugin
pour gérer nos actifs de navigateur (js, css, html) avec Composer, mais il doit être installé globalement avant d’installer Elgg afin que les packages bower-asset/*
soient reconnus. Pour l’installer, exécutez :
composer global require fxp/composer-asset-plugin
Si vous ne le faites pas avant d’exécuter composer install
ou composer create-project
, vous obtiendrez un message d’erreur :
[InvalidArgumentException]
Package fxp/composer-asset-plugin not found
Liste des vues dépréciées et des arguments des vues qui ont été supprimés¶
Nous avons abandonné la prise en charge et/ou supprimé les vues suivantes :
canvas/layouts/*
categories
categories/view
core/settings/tools
embed/addcontentjs
footer/analytics (Utilisez page/elements/foot à la place)
groups/left_column
groups/right_column
groups/search/finishblurb
groups/search/startblurb
input/calendar (Utilisez input/date à la place)
input/datepicker (Utilisez input/date à la place)
input/pulldown (Utilisez input/select à la place)
invitefriends/formitems
js/admin (Utilisez AMD et
elgg_require_js
au lieu d’étendre les vues JS existantes)js/initialise_elgg (Utilisez AMD et
elgg_require_js
au lieu d’étendre les vues JS)members/nav
metatags (Utilisez le hook plugin “head”, “page” à la place)
navigation/topbar_tools
navigation/viewtype
notifications/subscriptions/groupsform
object/groupforumtopic
output/calendar (Utilisez output/date à la place)
output/confirmlink (Utilisez output/url à la place)
page_elements/contentwrapper
page/elements/shortcut_icon (Utilisez le hook plugin “head”, “page” plugin hook à la place)
page/elements/wrapper
profile/icon (Utilisez
elgg_get_entity_icon
)river/object/groupforumtopic/create
settings/{plugin}/edit (Utilisez plugins/{plugin}/settings à la place)
user/search/finishblurb
user/search/startblurb
usersettings/{plugin}/edit (Utilisez plugins/{plugin}/usersettings à la place)
widgets/{handler}/view (Utilisez widgets/{handler}/content à la place)
Nous avons également abandonné les arguments suivants des vues :
« value » dans output/iframe (Utilisez plutôt « src »)
« area2 » et « area3 » dans page/elements/sidebar (utilisez plutôt « sidebar » ou l’extension de vue)
« js » dans les vues des icônes (par exemple icon/user/default)
Les
options
pour input/radio et input/checkboxes qui ne sont pas des paires de clef-valeur ne seront plus acceptées.
Tous les scripts ont été déplacés vers le bas de la page¶
Vous devriez tester votre plugin avec la console d’erreur JavaScript visible. Pour des raisons de performance, Elgg ne prend plus en charge les éléments script
dans l’élément head
ou dans les vues HTML. elgg_register_js
chargera désormais tous les scripts à la fin de l’élément body
.
Vous devez convertir les scripts en ligne en AMD ou en scripts externes chargés avec elgg_load_js
.
Au début de la page, Elgg fournit un shim de la fonction RequireJS require()
qui met simplement le code en file d’attente jusqu’à ce que les modules AMD elgg
et jQuery
soient définis. Cela fournit un moyen simple de convertir de nombreux scripts en ligne pour utiliser require()
.
Du code en ligne échouera car la pile n’est pas encore chargée :
<script>
$(function () {
// code using $ and elgg
});
</script>
Ceci devrait fonctionner dans Elgg 2.0 :
<script>
require(['elgg', 'jquery'], function (elgg, $) {
$(function () {
// code using $ and elgg
});
});
</script>
Le formateur d’attributs supprime les clefs avec des tirets bas¶
elgg_format_attributes()
(et toutes les API qui l’utilisent) filtrent désormais les attributs dont le nom contient un tiret baswordre (underscore). Toutefois, si l’attribut commence par data-
, il ne sera pas supprimé.
Fil d’Ariane¶
L’affichage du fil d’Ariane supprime maintenant le dernier élément s’il ne contient pas de lien. Pour restaurer le comportement précédent, remplacez le gestionnaire de hook plugin elgg_prepare_breadcrumbs
par le vôtre :
elgg_unregister_plugin_hook_handler('prepare', 'breadcrumbs', 'elgg_prepare_breadcrumbs');
elgg_register_plugin_hook_handler('prepare', 'breadcrumbs', 'myplugin_prepare_breadcrumbs');
function myplugin_prepare_breadcrumbs($hook, $type, $breadcrumbs, $params) {
// just apply excerpt to titles
foreach (array_keys($breadcrumbs) as $i) {
$breadcrumbs[$i]['title'] = elgg_get_excerpt($breadcrumbs[$i]['title'], 100);
}
return $breadcrumbs;
}
Callbacks dans les Requêtes¶
Assurez-vous d’utiliser uniquement des valeurs appelables (callable) valides pour l’argument/les options de la fonction de rappel dans l’API.
Les fonctions de requête lanceront désormais une RuntimeException
si is_callable()
renvoie false
comme valeur de la fonction de rappel donnée. Cela comprend des fonctions telles que elgg_get_entities()
, get_data()
, et bien d’autres encore.
Hook plugin des commentaires¶
Les plugins peuvent désormais renvoyer une chaîne vide à partir du hook 'comments',$entity_type
afin de remplacer la vue du composant de commentaires par défaut. Pour forcer le composant de commentaires par défaut, votre plugin doit renvoyer false
. Si vous utilisiez des chaînes vides pour forcer l’affichage des commentaires par défaut, vous devez mettre à jour vos gestionnaires de crochet pour qu’ils renvoient false
.
Hook des permissions du conteneur¶
Le comportement du hook container_permissions_check
a changé lorsqu’une entité est créée : avant 2.0, le hook était appelé deux fois si le conteneur de l’entité n’était pas le propriétaire. Lors du premier appel, le propriétaire de l’entité était transmis en tant que $params['container']
, ce qui pouvait créer des confusion dans les gestionnaires.
Dans 2.0, lorsqu’une entité est créée dans un conteneur comme un groupe, si le propriétaire est le même que l’utilisateur connecté (ce qui est presque toujours le cas), cette première vérification est contournée. Ainsi, le hook container_permissions_check
sera presque toujours appelé une seule fois avec $params['container']
comme conteneur correct de l’entité.
La création ou la suppression d’une relation déclenche un seul événement¶
Les événements de relation « create » et « delete » sont désormais déclenchés une seule fois, avec "relationship"
comme type d’objet.
Par ex. Écouter l’événement "create", "member"
ou "delete", "member"
ne capturera plus les ajouts/suppressions d’appartenance au groupe. Utilisez les événements "create", "relationship"
ou "delete", "relationship"
events.
La fonction de discussion a été extraite des groupes vers son propre plugin¶
Le sous-type object, groupforumtopic
a été remplacé par le sous-type object, discussion
. Si votre plugin utilise ou modifie l’ancienne fonctionnalité de discussion, vous devez la mettre à niveau pour utiliser le nouveau sous-type.
Rien ne change du point de vue du propriétaire du groupe. La fonction de discussion est toujours disponible en tant qu’outil de groupe et toutes les discussions anciennes sont intactes.
Fonctionnalité de connexion via https abandonnée¶
Pour une meilleure sécurité et de meilleures performances, servez toutes les pages par HTTPS en changeant le schéma dans le wwwroot de votre site en https
dans http://votresite.tld/admin/settings/advanced
Elgg a migré d’ext/mysql vers PDO MySQL¶
Elgg utilise désormais une connexion PDO_MYSQL
et n’utilise plus de fonctions ext/mysql. Si vous utilisez les fonctions mysql_ *
, en vous appuyant implicitement sur une connexion ouverte, celles-ci échoueront.
Si votre code utilise l’une des fonctions suivantes, lisez ce qui suit.
execute_delayed_write_query()
execute_delayed_read_query()
Si vous fournissez un objet $handler
qui doit être appelé avec les résultats, votre gestionnaire recevra désormais un objet \Doctrine\DBAL\Driver\Statement
. Auparavant, il s’agissait d’une ressource ext/mysql result
.
L’ordre d’appel d’un événement/hook pourrait changer¶
Lors de l’inscription aux événements/hooks, le mot clé all
pour la correspondance générique n’a plus aucun effet sur l’ordre dans lequel les gestionnaires sont appelés. Pour vous assurer que votre gestionnaire est appelé en dernier, vous devez lui donner la plus haute priorité de tous les gestionnaires correspondants, ou pour vous assurer que votre gestionnaire est appelé en premier, vous devez lui donner la plus faible priorité de tous les gestionnaires correspondants.
Si les gestionnaires ont été enregistrés avec la même priorité, ceux-ci sont appelés dans l’ordre où ils ont été enregistrés.
Pour émuler le comportement antérieur, les gestionnaires du noyau Elgg enregistrés avec le mot clé all
ont été relevés en priorité. Certains de ces gestionnaires seront très probablement appelés dans un ordre différent.
Les URL export/
ne sont plus disponibles¶
Elgg ne prend plus en charge ce point de terminaison pour exposer les données de ressources.
Icônes migrés vers Font Awesome¶
Les sprites d’Elgg et la plupart des classes CSS commençant par elgg-icon-
ont été supprimées.
L’utilisation de elgg_view_icon()
est rétro-compatible, mais le HTML statique utilisant les classes elgg-icon
devra être mis à jour vers le nouveau balisage.
vue input/autocomplete¶
Les plugins qui remplacent la vue input/autocomplete
devront inclure l’URL source dans l’attribut data-source
de l’élément d’entrée, exiger le nouveau module AMD elgg/autocomplete
et appeler sa méthode init
. La bibliothèque javascript 1.x elgg.autocomplete
n’est plus utilisée.
Introduction d’une bibliothèque tierce pour l’envoi de courriels¶
Nous utilisons l’excellente bibliothèque Zend\Mail
pour envoyer des courriels dans Elgg 2.0. Il y a probablement des cas particuliers que la bibliothèque gère différemment de Elgg 1.x. Prenez soin de tester attentivement vos notifications par e-mail lors de la mise à niveau vers 2.0.
Éléments d’étiquetage¶
Les vues suivantes ont reçu des éléments label
autour de certains des champs d’entrée. Si votre plugin/thème remplace ces vues, veuillez vérifier le nouveau contenu.
views/default/core/river/filter.php
views/default/forms/admin/plugins/filter.php
views/default/forms/admin/plugins/sort.php
views/default/forms/login.php
Plugin Aalborg Theme¶
La vue page/elements/navbar
utilise désormais une icône Font Awesome pour le sélecteur de menu mobile au lieu d’une image. L’image bars.png
et la prise en charge de CSS pour le rendu 1.12 ont été supprimées, aussi mettez à jour votre thème en conséquence.
Plugin Likes¶
Les objets ne peuvent plus être aimés (« likés ») par défaut. Pour qu’ils puissent être aimés, vous pouvez enregistrer un gestionnaire pour permettre l’annotation, ou plus simplement vous inscrire au hook ["likes:is_likable",<type>" :<subtype>"]
et renvoyer true. Par ex.
elgg_register_plugin_hook_handler('likes:is_likable', 'object:mysubtype', 'Elgg\Values::getTrue');
Tout comme auparavant, le hook permissions_check:annotated
est toujours appelé et peut être utilisé pour remplacer le comportement par défaut.
Plugin Messages¶
Si vous avez supprimé ou remplacé la fonction de gestionnaire messages_notifier
pour masquer/modifier l’icône de la boîte de réception, vous devrez plutôt le faire de même pour le gestionnaire de menu de la barre supérieure (topbar) messages_register_topbar
. messages_notifier
n’est plus utilisé pour ajouter le lien de menu.
Les messages ne recevront plus les métadonnées “msg” pour les messages nouvellement créés. Cela signifie que vous ne pouvez plus compter sur ces métadonnées.
Plugin Blog¶
Les pages de blog qui affichent les articles “Mine” (Moi) ou “Friends” (Contacts) ont été modifiés pour lister tous les articles de blog appartenant aux utilisateurs (y compris ceux créés dans les groupes).
Plugin Bookmarks¶
Les pages des signets qui affichent les listes de signets “Mine” (Moi) ou “Friends” (Contacts) ont été modifiées pour lister tous les signets appartenant aux utilisateurs (y compris ceux créés dans les groupes).
Plugin File¶
Les pages de fichiers qui affichent les listes de fichiers “Mine” (Moi) ou “Friends” (Contacts) ont été modifiées pour lister tous les fichiers appartenant aux utilisateurs (y compris ceux créés dans les groupes).
Classes supprimées¶
ElggInspector
Notable
FilePluginFile
: remplacez parElggFile
(ou chargez avecget_entity()
)
Clefs retirées disponibles via elgg_get_config()
¶
allowed_ajax_views
dataroot_in_settings
externals
externals_map
i18n_loaded_from_cache
language_paths
pagesetupdone
registered_tag_metadata_names
simplecache_enabled_in_settings
translations
viewpath
views
view_path
viewtype
wordblacklist
Notez également que les plugins ne devraient pas accéder à la variable globale $CONFIG
à l’exception de settings.php
.
Fonctions supprimées¶
blog_get_page_content_friends
blog_get_page_content_read
count_unread_messages()
delete_entities()
delete_object_entity()
delete_user_entity()
elgg_get_view_location()
elgg_validate_action_url()
execute_delayed_query()
extend_view()
get_db_error()
get_db_link()
get_entities()
get_entities_from_access_id()
get_entities_from_access_collection()
get_entities_from_annotations()
get_entities_from_metadata()
get_entities_from_metadata_multi()
get_entities_from_relationship()
get_filetype_cloud()
get_library_files()
get_views()
is_ip_in_array()
list_entities()
list_entities_from_annotations()
list_group_search()
list_registered_entities()
list_user_search()
load_plugins()
menu_item()
make_register_object()
mysql_*()
: Elgg n’utilise plus ext/mysql
remove_blacklist()
search_for_group()
search_for_object()
search_for_site()
search_for_user()
search_list_objects_by_name()
search_list_groups_by_name()
search_list_users_by_name()
set_template_handler()
test_ip()
Méthodes supprimées¶
ElggCache::set_variable()
ElggCache::get_variable()
ElggData::initialise_attributes()
ElggData::getObjectOwnerGUID()
ElggDiskFilestore::make_directory_root()
ElggDiskFilestore::make_file_matrix()
ElggDiskFilestore::user_file_matrix()
ElggDiskFilestore::mb_str_split()
ElggEntity::clearMetadata()
ElggEntity::clearRelationships()
ElggEntity::clearAnnotations()
ElggEntity::getOwner()
ElggEntity::setContainer()
ElggEntity::getContainer()
ElggEntity::getIcon()
ElggEntity::setIcon()
ElggExtender::getOwner()
ElggFileCache::create_file()
ElggObject::addToSite()
: la fonction parente est toujours disponible dans ElggEntity
ElggObject::getSites()
: la focntion parente est toujours disponible dans ElggEntity
ElggSite::getCollections()
ElggUser::addToSite()
: la fonction parente est toujours disponible dans ElggEntity
ElggUser::getCollections()
ElggUser::getOwner()
ElggUser::getSites()
: la fonction parente est toujours disponible dans ElggEntity
ElggUser::listFriends()
ElggUser::listGroups()
ElggUser::removeFromSite()
: la fonction parente est toujours disponible dans ElggEntity
Les arguments suivants ont également été abandonnés :
ElggSite::getMembers()
- 2:$offset
elgg_view_entity_list()
- 3:$offset
- 4:$limit
- 5:$full_view
- 6:$list_type_toggle
- 7:$pagination
Hooks des plugins supprimés¶
[display, view]
: Voyez le nouvel hook plugin.
Actions supprimées¶
widgets/upgrade
Vues supprimées¶
forms/admin/plugins/change_state
Variables des vues supprimées¶
Pendant le rendu, le système de vue ne les injecte plus dans le champ (scope) :
$vars['url']
: remplacé parelgg_get_site_url()
$vars['user']
: remplacé parelgg_get_logged_in_user_entity()
$vars['config']
: utilisezelgg_get_config()
etelgg_set_config()
$vars['config']
: utilisezelgg_get_config()
etelgg_set_config()
Plusieurs solutions de contournement pour des vues très anciennes ne sont plus effectuées. Effectuez ces modifications :
Définissez
$vars['full_view']
au lieu de$vars['full']
.Définissez
$vars['name']
au lieu de$vars['internalname']
.Définissez
$vars['id']
au lieu de$vars['internalid']
.
Bibliothèques supprimées¶
elgg:markdown
: Elgg ne fournit plus d’implémentation de balisage (markdown). Vous devez fournir la vôtre.
Spécifier des Vues via les propriétés¶
La métadonnée $entity->view
ne spécifie plus la vue utilisée pour l’affichage dans elgg_view_entity()
.
De même, la propriété $annotation->view
n’a plus d’effet dans elgg_view_annotation()
.
Le type de vue est statique après l’appel initial elgg_get_viewtype()
¶
elgg_set_viewtype()
doit être utilisé pour définir le type de vue au moment de l’exécution. Bien que Elgg vérifie toujours l’entrée view
et $CONFIG->view
initialement, cela n’est fait qu’une fois par requête.
Dépréciation¶
Il est déprécié de lire ou d’écrire les clef de métadonnées commençant par les filestore::
sur les objets ElggFile
. Dans Elgg 3.0, ces métadonnées seront supprimées si elles indiquent le chemin d’accès racine des données actuel, aussi peu d’objets de fichiers devraient l’avoir. Les plugins ne doivent utiliser ElggFile::setFilestore
que si les fichiers doivent être stockés dans un emplacement personnalisé.
Note
Ce n’est pas la seule dépréciation dans Elgg 2.0. Les développeurs de plugins devraient regarder leurs journaux d’erreurs de site.
De 1.10 à 1.11¶
Mise en surbrillance des commentaires¶
Si votre thème utilise le fichier views/default/css/elements/components.php
, vous devez y ajouter les définitions de style suivantes pour activer la mise en surbrillance pour les commentaires et les réponses de discussion :
.elgg-comments .elgg-state-highlight {
-webkit-animation: comment-highlight 5s;
animation: comment-highlight 5s;
}
@-webkit-keyframes comment-highlight {
from {background: #dff2ff;}
to {background: white;}
}
@keyframes comment-highlight {
from {background: #dff2ff;}
to {background: white;}
}
De 1.9 à 1.10¶
Chargements de fichier¶
Si votre plugin utilise un bout de code copié à partir de l’action file/upload
pour corriger les types mime détectés pour les formats zippés Microsoft, ce bout de code peut maintenant être supprimé en toute sécurité.
Si votre action de téléchargement effectue d’autres manipulations sur le type mime détecté et les types simples, il est recommandé de faire usage des hooks plugin disponibles :
'mime_type','file'
pour filtrer les types mime détectés'simple_type','file'
pour filtrer les types simples analysés
De 1.8 à 1.9¶
Dans les exemples, nous mettons à niveau un plugin imaginaire Photos
.
Seuls les changements de clefs sont inclus. Par exemple, certaines des fonctions dépréciées ne sont pas mentionnées ici séparément.
Chaque section comprendra des informations sur la compatibilité arrière avec Elgg 1.8.
Le fichier manifest.xml¶
Aucun changement n’est nécessaire si votre plugin est compatible avec 1.8.
Il est toutefois recommandé d’ajouter l’étiquette <id>
. Sa valeur devrait être le nom du répertoire du plugin à l’intérieur du répertoire mod/
.
Si vous effectuez des modifications qui cassent la compatibilité arrière (BC pour Backward Compatibility), vous devez mettre à jour les versions du plugin et de Elgg requises.
Exemple d’ancienne version (raccourcie) :
<?xml version="1.0" encoding="UTF-8"?>
<plugin_manifest xmlns="http://www.elgg.org/plugin_manifest/1.8">
<name>Photos</name>
<author>John Doe</author>
<version>1.0</version>
<description>Adds possibility to upload photos and arrange them into albums.</description>
<requires>
<type>elgg_release</type>
<version>1.8</version>
</requires>
</plugin_manifest>
Exemple de nouvelle version (raccourcie) :
<?xml version="1.0" encoding="UTF-8"?>
<plugin_manifest xmlns="http://www.elgg.org/plugin_manifest/1.8">
<name>Photos</name>
<id>photos</id>
<author>John Doe</author>
<version>2.0</version>
<description>Adds possibility to upload photos and arrange them into albums.</description>
<requires>
<type>elgg_release</type>
<version>1.9</version>
</requires>
</plugin_manifest>
$CONFIG et $vars[“config”]¶
La variable mondiale $CONFIG
et le paramètre $vars ['config']
ont été dépréciés. Ils devraient être remplacés par la fonction elgg_get_config()
.
Exemple d’ancien code :
// Using the global $CONFIG variable:
global $CONFIG;
$plugins_path = $CONFIG->plugins_path
// Using the $vars view parameter:
$plugins_path = $vars['plugins_path'];
Exemple de nouveau code :
$plugins_path = elgg_get_config('plugins_path');
Note
Compatible avec 1.8
Note
Voyez comment le plugin community_plugins a été mis à jour : https://github.com/Elgg/community_plugins/commit/f233999bbd1478a200ee783679c2e2897c9a0483
Fichiers de langues¶
Dans Elgg 1.8, les fichiers linguistiques devaient utiliser la fonction add_translation()
. En 1.9, il suffit de simplement renvoyer le tableau qui a été précédemment passé à la fonction en tant que paramètre. Le noyau Elgg utilisera le nom du fichier (par exemple fr.php) pour déterminer quelle langue contient le fichier.
Exemple d’ancienne manière de faire dans languages/en.php
:
$english = array(
'photos:all' => 'All photos',
);
add_translation('en', $english);
Exemple de nouvelle manière de faire :
return array(
'photos:all' => 'All photos',
);
Avertissement
Non compatible avec 1.8
Notifications¶
L’un des plus grands changements dans Elgg 1.9 est le système de notifications. Le nouveau système offre une manière plus flexible et évolutive d’envoyer des notifications.
Exemple d’ancienne manière de faire :
function photos_init() {
// Tell core that we want to send notifications about new photos
register_notification_object('object', 'photo', elgg_echo('photo:new'));
// Register a handler that creates the notification message
elgg_register_plugin_hook_handler('notify:entity:message', 'object', 'photos_notify_message');
}
/**
* Set the notification message body
*
* @param string $hook Hook name
* @param string $type Hook type
* @param string $message The current message body
* @param array $params Parameters about the photo
* @return string
*/
function photos_notify_message($hook, $type, $message, $params) {
$entity = $params['entity'];
$to_entity = $params['to_entity'];
$method = $params['method'];
if (elgg_instanceof($entity, 'object', 'photo')) {
$descr = $entity->excerpt;
$title = $entity->title;
$owner = $entity->getOwnerEntity();
return elgg_echo('photos:notification', array(
$owner->name,
$title,
$descr,
$entity->getURL()
));
}
return null;
}
Exemple de nouvelle manière de faire :
function photos_init() {
elgg_register_notification_event('object', 'photo', array('create'));
elgg_register_plugin_hook_handler('prepare', 'notification:publish:object:photo', 'photos_prepare_notification');
}
/**
* Prepare a notification message about a new photo
*
* @param string $hook Hook name
* @param string $type Hook type
* @param Elgg_Notifications_Notification $notification The notification to prepare
* @param array $params Hook parameters
* @return Elgg_Notifications_Notification
*/
function photos_prepare_notification($hook, $type, $notification, $params) {
$entity = $params['event']->getObject();
$owner = $params['event']->getActor();
$recipient = $params['recipient'];
$language = $params['language'];
$method = $params['method'];
// Title for the notification
$notification->subject = elgg_echo('photos:notify:subject', array($entity->title), $language);
// Message body for the notification
$notification->body = elgg_echo('photos:notify:body', array(
$owner->name,
$entity->title,
$entity->getExcerpt(),
$entity->getURL()
), $language);
// The summary text is used e.g. by the site_notifications plugin
$notification->summary = elgg_echo('photos:notify:summary', array($entity->title), $language);
return $notification;
}
Avertissement
Non compatible avec 1.8
Note
Voyez comment le plugin community_plugins a été mis à jour pour utliser le nouveau système : https://github.com/Elgg/community_plugins/commit/bfa356cfe8fb99ebbca4109a1b8a1383b70ff123
Les notifications peuvent aussi être envoyées par la fonction notify_user()
.
Il a toutefois été mis à jour pour prendre en charge trois nouveaux paramètres optionnels passés à l’intérieur d’un tableau comme cinquième paramètre.
Les paramètres donnent aux plugins de notification plus de contrôle sur les notifications, de sorte qu’ils doivent être inclus dans la mesure du possible. Par exemple, le plugin site_notifications ne fonctionnera pas correctement si les paramètres sont manquants.
Paramètres :
object L’objet pour lequel nous envoyons une notification (par ex. ElggEntity ou ElggAnnotation). Ceci est nécessaire pour que les plugins de notification puissent fournir un lien vers l’objet.
action Chaîne qui décrit l’action qui a déclenché la notification (par ex. « create », « update », etc.).
summary Chaîne qui contient un résumé de la notification. (Elle devrait être plus informative que le sujet de notification, mais moins informative que le corps de la notification.)
Exemple d’ancienne manière de faire :
// Notify $owner that $user has added a $rating to an $entity created by him
$subject = elgg_echo('rating:notify:subject');
$body = elgg_echo('rating:notify:body', array(
$owner->name,
$user->name,
$entity->title,
$entity->getURL(),
));
notify_user($owner->guid,
$user->guid,
$subject,
$body
);
Exemple de nouvelle manière de faire :
// Notify $owner that $user has added a $rating to an $entity created by him
$subject = elgg_echo('rating:notify:subject');
$summary = elgg_echo('rating:notify:summary', array($entity->title));
$body = elgg_echo('rating:notify:body', array(
$owner->name,
$user->name,
$entity->title,
$entity->getURL(),
));
$params = array(
'object' => $rating,
'action' => 'create',
'summary' => $summary,
);
notify_user($owner->guid,
$user->guid,
$subject,
$body,
$params
);
Note
Compatible avec 1.8
Ajout d’éléments à la liste des Activités¶
add_to_river('river/object/photo/create', 'create', $user_guid, $photo_guid);
elgg_create_river_item(array(
'view' => 'river/object/photo/create',
'action_type' => 'create',
'subject_guid' => $user_guid,
'object_guid' => $photo_guid,
));
Vous pouvez également ajouter le paramètre facultatif target_guid
qui indique la cible de l’action create.
Si la photo avait été ajoutée par exemple dans un album photo, nous pourrions l’ajouter en passant aussi :
'target_guid' => $album_guid,
Avertissement
Non compatible avec 1.8
Gestionnaires d’URL des entités¶
La fonction elgg_register_entity_url_handler()
a été dépréciée. Dans 1.9, vous devez utiliser le hook plugin 'entity:url', 'object'
.
Exemple d’ancienne manière de faire :
/**
* Initialize the photo plugin
*/
my_plugin_init() {
elgg_register_entity_url_handler('object', 'photo', 'photo_url_handler');
}
/**
* Returns the URL from a photo entity
*
* @param ElggEntity $entity
* @return string
*/
function photo_url_handler($entity) {
return "photo/view/{$entity->guid}";
}
Exemple de nouvelle manière de faire :
/**
* Initialize the photo plugin
*/
my_plugin_init() {
elgg_register_plugin_hook_handler('entity:url', 'object', 'photo_url_handler');
}
/**
* Returns the URL from a photo entity
*
* @param string $hook 'entity:url'
* @param string $type 'object'
* @param string $url The current URL
* @param array $params Hook parameters
* @return string
*/
function photo_url_handler($hook, $type, $url, $params) {
$entity = $params['entity'];
// Check that the entity is a photo object
if ($entity->getSubtype() !== 'photo') {
// This is not a photo object, so there's no need to go further
return;
}
return "photo/view/{$entity->guid}";
}
Avertissement
Non compatible avec 1.8
Web services¶
Dans Elgg 1.8, l’API des services Web a été incluse dans le noyau et les méthodes ont été exposées à l’aide de expose_function()
. Pour activer la même fonctionnalité pour Elgg 1.9, activez le plugin Web services 1.9
et remplacez tous les appels à expose_function()
par elgg_ws_expose_function()
.
1.7 vers 1.8¶
Elgg 1.8 est le plus grand bond en avant dans le développement d’Elgg depuis la version 1.0. Pour cette raison, cela demande plus de travail pour mettre à jour le noyau et les plugins qu’avec les mises à niveau précédentes. Il y a eu un petit nombre de changements d’API et, suivant notre pratique standard, les méthodes que nous avons dépréciées ont été mises à jour pour travailler avec la nouvelle API. Les plus grands changements sont dans la normalisation des plugins et dans le système de vues.
Mettre à niveau le cœur¶
Supprimez les répertoire du noyau suivants (même niveau que _graphics et engine) :
_css
account
admin
dashboard
entities
friends
search
settings
simplecache
views
Avertissement
Si vous ne supprimez pas ces répertoires avant une mise à niveau, vous allez avoir des ennuis !
Mettre à niveau les plugins¶
Utilisez le routage standard avec vos gestionnaires de pages¶
Tout : /page_handler/all
Publications de l’utilisateur : /page_handler/owner/:username
Publications des contacts de l’utilisateur : /page_handler/friends/:username
Entité seule : /page_handler/view/:guid/:title
Ajout : /page_handler/add/:container_guid
Modification : /page_handler/edit/:guid
Liste du groupe : /page_handler/group/:guid/all
Inclure des scripts de gestionnaire de page à partir du gestionnaire de page¶
Presque tous les gestionnaires de page doivent avoir un script de gestionnaire de page. (Exemple : bookmarks/all => mod/bookmarks/pages/bookmarks/all.php
)
Appelez
set_input()
pour les guids d’entité dans le gestionnaire de page et utilisezget_input()
dans les scripts du gestionnaire de page.Appelez
gatekeeper()
etadmin_gatekeeper()
dans la fonction du gestionnaire de page si nécessaire.L’URL d’un groupe doit utiliser le script
pages/:handler/owner.php
.Les gestionnaires de pages ne devraient pas contenir de HTML.
Mettez à jour les URL dans tout le plugin. (N’oubliez pas d’enlever
/pg/
!)
Utilisez les gestionnaires de pages standardisés et les scripts¶
Stockez les scripts du gestionnaire de page dans
mod/:plugin/pages/:page_handler/:page_name.php
Utilisez la disposition de page de contenu dans les scripts du gestionnaire de pages :
$content = elgg_view_layout('content', $options);
Les scripts de gestionnaires de pages ne devraient pas contenir de HTML.
Appelez
elgg_push_breadcrumb()
dans les scripts du gestionnaire de pages.Pas besoin de définir le propriétaire de la page si les URLs sont au format standard.
Pour le contenu du groupe, vérifiez le conteneur container_guid en utilisant elgg_get_page_owner_entity().
La vue object/:subtype
¶
Assurez-vous qu’il existe bien des vues pour
$vars['full_view'] == true
et$vars['full_view'] == false
.$vars['full_view']
a remplacé$vars['full]
.Vérifiez l’objet dans
$vars['entity']
. Utilisezelgg_instance_of()
pour vous assurer qu’il s’agit du type d’entité que vous souhaitez.Renvoyez
true
pour court-circuiter la vue si l’entité est manquante ou erronée.Utilisez
elgg_view('object/elements/summary', array('entity' => $entity));
etelgg_view_menu('entity', array('entity' => $entity));
pour faciliter le formatage. Vous devriez utiliser très peu de balisage dans ces vues.
Mettre à jour la structure de l’action¶
Fichiers d’action et noms d’action de l’espace de noms (exemple :
mod/blog/actions/blog/save.php
=>action/blog/save
)Utilisez les URLs d’action suivantes :
Ajoutez :
action/:plugin/save
Modifiez :
action/:plugin/save
Suppression :
action/:plugin/delete
Faites que l’action de suppression accepte
action/:handler/delete?guid=:guid
de sorte que le menu des métadonnées de l’entité ait la bonne URL par défaut.
Mettez à jour les fonctions obsolètes¶
Les fonctions dépréciées en 1.7 produiront des erreurs visibles en 1.8.
Vous pouvez également mettre à jour les fonctions dépréciées dans 1.8.
De nombreuses fonctions d’enregistrement ont simplement ajouté un préfixe
elgg_
pour la cohérence, et devraient être faciles à mettre à jour.Voyez
/engine/lib/deprecated-1.8.php
pour la liste complète.Vous pouvez définir le niveau de débogage sur “warning” pour obtenir des rappels visuels des fonctions obsolètes.
Mettez à jour les vues widget¶
Voyez les widgets des plugins blog ou file pour des exemples.
Mettez à jour le module de profil de groupe¶
Utilisez les plugins blog ou file pour des exemples. Cela vous aidera à pouvoir appliquer un thème à votre plugin avec le nouveau framework CSS.
Mettre à jour les formulaires¶
Déplacez les corps de formulaire vers la vue
forms/:action
pour utiliser le nouveauelgg_view_form
d’Evan.Utilisez les vues d’entrée dans les corps de formulaire plutôt que du html. Cela aide à utiliser des thèmes et permet de préparer l’avenir.
Ajoutez une fonction qui prépare le formulaire (voyez
mod/file/lib/file.php
pour un exemple)Rendre vos formulaires persistants (voir l’action de téléchargement du plugin file et la fonction de préparation du formulaire).
L’API des formulaires est discutée plus en détail dans Formulaires + Actions.
Nettoyez le CSS/HTML¶
Nous avons ajouté de nombreux modèles CSS au fichier CSS du noyau (modules, bloc avec une image, primitives d’espacement). Nous vous encourageons à utiliser ces modèles et ces classes dans la mesure du possible. Faire cela devrait :
Réduire les coûts de maintenance, car vous pouvez supprimer la plupart des CSS personnalisés.
Rendre votre plugin plus compatible avec les thèmes de la communauté.
Recherchez des modèles qui peuvent être déplacés dans le noyau si vous avez besoin de CSS significatif.
Nous utilisons des traits d’union plutôt que des soulignements dans les classes/ids et vous encourageons à faire de même pour maintenir la cohérence.
Si vous avez besoin de votre propre CSS, vous devez utiliser votre propre espace de noms, plutôt que elgg-
.
Mettre à jour manifest.xml¶
Utilisez http://el.gg/manifest17to18 pour automatiser cette étape.
N’utilisez pas la catégorie
bundled
avec vos plugins. C’est réservés aux plugins distribués avec Elgg.
Mettez à jour les paramètres et les vues des paramètres utilisateur¶
La vue pour les paramètres est maintenant
plugins/:plugin/settings
(auparavantsettings/:plugin/edit
).La vue pour les paramètres utilisateur est maintenant
plugins/:plugin/usersettings
(auparavantusersettings/:plugin/edit
).