Connexion
S'inscrire
Actualités
Quoi de neuf
Activités générales
Auteurs
Forums
Nouveaux messages
Rechercher un forum
Quoi de neuf
Nouveaux messages
Nouveaux messages de profil
Activités générales
Membres
Membres inscrits
Visiteurs actuels
Nouveaux messages de profil
Rechercher dans les messages des profils
Teams
Créé ton équipe
Quoi de neuf ?
Nouveaux messages
Rechercher un forum
Menu
Connexion
S'inscrire
Install the app
Install
Forums
Forums généraux
Informatique
Développement
[XenForo] Étendre un controller existant afin de lui ajouter une nouvelle fonction
JavaScript is disabled. For a better experience, please enable JavaScript in your browser before proceeding.
Vous utilisez un navigateur non à jour ou ancien. Il ne peut pas afficher ce site ou d'autres sites correctement.
Vous devez le mettre à jour ou utiliser un
navigateur alternatif
.
Répondre à la discussion
Message
<blockquote data-quote="Kévin 🚀" data-source="post: 6110341" data-attributes="member: 210410"><p>Salut à tous,</p><p></p><p>On se retrouve pour un tutoriel qui va vous apprendre à étendre un controller Xenforo pour pouvoir lui ajouter une action.</p><p></p><p style="margin-left: 20px"><u>Qu'est qu'une action ?</u></p><p>Une action est une fonction qui permet d'ajouter des fonctionnalités à XenForo qui ne sont pas présentes de base dans le forum.</p><p style="text-align: left"></p> <p style="margin-left: 20px"><p style="text-align: left"><strong><span style="color: #b30000">Sommaire :</span></strong></p> </p> <ol> <li data-xf-list-type="ol">Création d'une addon</li> <li data-xf-list-type="ol">Création des dossiers et fichiers</li> <li data-xf-list-type="ol">Explication pour étendre le controller.<ol> <li data-xf-list-type="ol">Création du fichier LoadClassController.php</li> <li data-xf-list-type="ol">Création du fichier Account.php</li> <li data-xf-list-type="ol">Création de la template</li> <li data-xf-list-type="ol">Ajout de l’événement dans l'AdminCP</li> </ol></li> <li data-xf-list-type="ol">Essai du système.</li> </ol><p>Avant de commencer vous devez mettre votre forum en mode <strong><span style="color: #0059b3">Debug</span></strong> pour avoir accès à l'onglet développement pour ce faire vous allez dans votre dossier library, vous ouvrez le fichier config.php et vous ajoutez [PHP]$config['debug'] = true;[/PHP] en dessous de la dernière ligne.</p><p></p><p style="margin-left: 20px"><p style="text-align: left"><strong><span style="color: #b30000">1. Création d'un addon :</span></strong></p> </p><p></p><p>Pour ajouter une <strong><span style="color: #0059b3">addon</span></strong> à votre forum il faut vous rendre dans votre <strong><span style="color: #0059b3">Admin CP</span></strong> (<a href="http://votresite.fr/admin.php" target="_blank">http://votresite.fr/admin.php</a>) sur la page d'accueil de l'adminCP dans la sidebar en bas à droite une partie qui s'appelle <strong><span style="color: #0059b3">Extensions installées</span></strong> qui contient les addons présente sur votre site</p><p>[ATTACH=full]77678[/ATTACH]</p><p></p><p>Vous allez cliquer sur <strong><span style="color: #0059b3">Gestion des extensions</span></strong> puis vous allez cliquer sur <strong><span style="color: #0059b3">+ Créer une extension</span></strong> le bouton est situé en haut à droite de la page</p><p></p><p>Une nouvelle page va apparaître sur votre écran avec plusieurs paramètres.</p><p>Pour le tutoriel j'appelle l'addon <strong><span style="color: #0059b3">RGController</span></strong></p><ul> <li data-xf-list-type="ul">ID de l'extension : rg_controller</li> <li data-xf-list-type="ul">Titre : RealityGaming - Controller</li> <li data-xf-list-type="ul">Chaîne de la version : 1.0</li> <li data-xf-list-type="ul">ID de la version : 1<br /> </li> <li data-xf-list-type="ul">URL : Comme vous voulez si vous voulez mettre l'url de votre mettez la sinon cela ne changera rien a l'addon<br /> </li> <li data-xf-list-type="ul">Code d'installation : Pas utilisé pour ce tutoriel<br /> </li> <li data-xf-list-type="ul">Code de désinstallation : Pas utilisé pour ce tutoriel</li> </ul><p>Une fois les paramètres remplit cliquez sur <strong><span style="color: #0059b3">Sauvegarder l'extension</span></strong>.</p><p>Attention les paramètres ci-dessus sont donnés à titre d'exemple vous pouvez les modifier !</p><p></p><p>Si tout c'est bien passé vous devez voir l'extension dans la liste des addons.</p><p>Nous allons donc passer à la création des dossiers.</p><p></p><p style="margin-left: 20px"><strong><span style="color: #b30000">2. Créations des dossiers</span></strong></p> <p style="margin-left: 20px"><strong><span style="color: #b30000"></span></strong></p><p>Donc connectez vous à votre <strong><span style="color: #0059b3">FTP</span></strong> ou autres afin de pouvoir accéder aux dossiers de votre forum. Une fois connecté rendez vous dans le dossier <strong><span style="color: #0059b3">Library</span></strong></p><p>A l'intérieur de celui-ci vous allez créer un dossier qui s'appelle comme l'extension que nous venons de créer donc pour le tutoriel le dossier s'appelle RGController</p><p></p><p>Une fois le dossier créé vous allez dans celui-ci est créer deux nouveaux dossiers :</p><ol> <li data-xf-list-type="ol">ControllerPublic (Celui permet d'étendre les controller dit public donc ce que le visiteur peut voir, vous avez aussi ControllerAdmin qui d'étendre les controller de l'AdminCP)</li> <li data-xf-list-type="ol">Listener (Celui permettra d'indiquer au forum quelle class nous allons étendre)</li> </ol><p>Une fois l'architecture de dossier fini nous allons passer a la troisième étape</p><p></p><p style="margin-left: 20px"><span style="color: #b30000"><strong>3. Explication pour étendre le controller.</strong></span></p><p></p><p>Donc nous allons étendre dans ce tutoriel le controller account afin de lui ajouter une nouvelle action qui s'appellera <strong><span style="color: #0059b3">RGTutoriel</span></strong></p><p></p><p>Pour ce faire vous allez créer un nouveau fichier dans le Listener qui s'appellera LoadClassController.php</p><p>Dans ce fichier vous allez ajouter ce code :</p><p></p><p><span style="color: #ff0000">[fa]fa-2x fa-exclamation-triangle fa-border fa-pull-left[/FA]</span> Attention vous devrez modifier le <strong><span style="color: #0059b3">RGController</span></strong> en fonction du nom de votre dossier si votre dossier s'appelle <strong><span style="color: #0059b3">Rouki</span></strong> vous devrez <strong><span style="color: #0059b3">Rouki_Listener_LoadClassController</span></strong> pareil pour le <strong><span style="color: #0059b3">RGController_ControllerPublic_Account</span></strong> il devient <strong><span style="color: #0059b3">Rouki_ControllerPublic_Account</span></strong></p><p></p><p>[PHP]</p><p><?php</p><p>class RGController_Listener_LoadClassController {</p><p> public static function extendAccount($class, array &$extend) {</p><p> if ($class == 'XenForo_ControllerPublic_Account') {</p><p> $extend[] = 'RGController_ControllerPublic_Account';</p><p> }</p><p> }</p><p>}[/PHP]</p><p></p><p>Sauvegarder le fichier, maintenant allez dans le dossier <strong><span style="color: #0059b3">ControllerPublic</span></strong> et vous allez créer un nouveau fichier qui s'appellera <strong><span style="color: #0059b3">Account.php</span></strong></p><p></p><p><span style="color: #ff0000">[fa]fa-1x fa-exclamation-triangle fa-border fa-pull-left[/FA]</span>Même remarque que pour le code ci-dessus si votre nom de dossier est différent n'oubliez pas de le changer sinon ça ne fonctionnera pas !</p><p></p><p>Ajoutez ce code dans le fichier :</p><p>[PHP]<?php</p><p>class RGController_ControllerPublic_Account extends XFCP_RGController_ControllerPublic_Account {</p><p> public function actionRGTutoriel() {</p><p> //Variables</p><p> $visitor = XenForo_Visitor::getInstance();</p><p> $username = $visitor->get('username');</p><p> $userId = $visitor->get('user_id');</p><p></p><p> //Permet de récuperer les variables dans la templete (Style)</p><p> $viewParams = array(</p><p> 'username' => $username,</p><p> 'userId' => $userId,</p><p> );</p><p> return $this->responseView('', 'RGController_Account_RGTutoriel', $viewParams);</p><p> }</p><p>}[/PHP]</p><p></p><p>Explication du code ci-dessus donc</p><ul> <li data-xf-list-type="ul">public function actionRGTutoriel() définie la nouvelle action que nous allons ajouter au <strong><span style="color: #0059b3">controller Account</span></strong>.</li> <li data-xf-list-type="ul"><strong><span style="color: #0059b3">$username</span></strong> et <strong><span style="color: #0059b3">$userId</span></strong> permet de récupérer les informations du membre (Pseudo et Id) qui regarde la page</li> <li data-xf-list-type="ul">Le <span style="color: #0059b3"><strong>$viewParams</strong></span> permet de pouvoir récupérer les informations dans le template de style que nous allons créer.</li> <li data-xf-list-type="ul"><strong><span style="color: #0059b3">RGController_Account_RGTutoriel</span></strong> est le nom de la template que nous allons créer, pareil c'est modifiable en fonction du nom que vous avez donné a votre addon</li> </ul> <p style="text-align: left">Maintenant nous allons créer le <strong><span style="color: #0059b3">template</span></strong>, donc vous allez dans Apparence => Style maître (Important, cela permet au template d'être ajouté dans tout les styles de votre forum !) => Créer un nouveau template.</p> <p style="text-align: left"></p> <p style="text-align: left">Trois nouveaux champs à remplir :</p> <ul> <li data-xf-list-type="ul">Nom : RGController_Account_RGTutoriel (A modifier en fonction de ce que vous avez définie comme nom dans le code)</li> <li data-xf-list-type="ul">Le textarea : Contient le code de la page (html) le <strong><span style="color: #0059b3">php ne fonctionne</span></strong> pas dans les templates !</li> <li data-xf-list-type="ul">Extension : Vous mettez l'extension que nous avons créer au début du tutoriel.</li> </ul><p>Donc dans le textarea afin de tester le bon fonctionnement de la nouvelle action vous allez mettre :</p><p style="text-align: left">[HTML]Bravo <b>{$username}</b> vous avez réussi a étendre le controller Account, votre Id sur le forum est <b>{$userId}</b>[/HTML]</p> <p style="text-align: left"><strong><span style="color: #0059b3">{$username}</span></strong> et <strong><span style="color: #0059b3">{$userId}</span></strong> va appeler les variables que vous avons mis dans l'<strong><span style="color: #0059b3">array()</span></strong> et les afficher sur la page.</p> <p style="text-align: left"></p> <p style="text-align: left">Une fois la template sauvegardée, vous allez dans l'onglet développement => observateur d’événement => créer un nouvel observateur d’événement</p> <p style="text-align: left"></p> <p style="text-align: left">6 nouveaux champs sont apparu sur votre écran :</p> <ul> <li data-xf-list-type="ul">Observer l'événement : load_class_controller</li> <li data-xf-list-type="ul">Mot clef d'événement : Vous mettez rien</li> <li data-xf-list-type="ul">Exécuter le callback : Dans la première case vous mettre le nom de la class LoadClassController donc RGController_Listener_LoadClassController et dans l'autre vous mettez le nom de l'action qui est dans le fichier donc extendAccount</li> <li data-xf-list-type="ul">Ordre d’exécution du callback : Vous laissez comme ça</li> <li data-xf-list-type="ul">Description : Ajout l'action RGTutoriel au controller Account</li> <li data-xf-list-type="ul">Extension : L'extension que nous avons crée au début</li> </ul><p>Sauvegarder l'événement et nous pouvons passer au test.</p><p></p><p style="margin-left: 20px"><span style="color: #b30000"><strong>4. Essai du système</strong></span></p><p></p><p>Donc il vous suffit de vous rendre sur votre forum de mettre d'aller sur les paramètres de votre compte donc <a href="http://votresite/account/rgtutoriel" target="_blank">http://votresite/account/rgtutoriel</a></p><p><strong><span style="color: #0059b3">rgtutoriel</span></strong> est le nom définie dans la fonction public function action<strong><span style="color: #0059b3">RGTutoriel</span></strong>()</p><p></p><p>Si vous avez l'écran :</p><p>[ATTACH=full]77677[/ATTACH]</p><p></p><p>Voilà maintenant vous savez étendre un controller, vous pouvez ajouter de nouvelle fonctionnalité a votre forum.</p><p></p><p>Si vous avez des soucis ou des questions n'hésitez pas répondre au sujet <img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" class="smilie smilie--sprite smilie--sprite351" alt=";)" title="Clin d'oeil ;)" loading="lazy" data-shortname=";)" /></p><p></p><p style="text-align: right">A bientôt,</p> <p style="text-align: right"><em><strong>Fara' SEC</strong></em></p></blockquote><p></p>
[QUOTE="Kévin 🚀, post: 6110341, member: 210410"] Salut à tous, On se retrouve pour un tutoriel qui va vous apprendre à étendre un controller Xenforo pour pouvoir lui ajouter une action. [INDENT][U]Qu'est qu'une action ?[/U][/INDENT] Une action est une fonction qui permet d'ajouter des fonctionnalités à XenForo qui ne sont pas présentes de base dans le forum. [LEFT][/LEFT] [INDENT][LEFT][B][COLOR=#b30000]Sommaire :[/COLOR][/B][/LEFT][/INDENT] [LIST=1] [*]Création d'une addon [*]Création des dossiers et fichiers [*]Explication pour étendre le controller. [LIST=1] [*]Création du fichier LoadClassController.php [*]Création du fichier Account.php [*]Création de la template [*]Ajout de l’événement dans l'AdminCP [/LIST] [*]Essai du système. [/LIST] Avant de commencer vous devez mettre votre forum en mode [B][COLOR=#0059b3]Debug[/COLOR][/B] pour avoir accès à l'onglet développement pour ce faire vous allez dans votre dossier library, vous ouvrez le fichier config.php et vous ajoutez [PHP]$config['debug'] = true;[/PHP] en dessous de la dernière ligne. [INDENT][LEFT][B][COLOR=#b30000]1. Création d'un addon :[/COLOR][/B][/LEFT][/INDENT] Pour ajouter une [B][COLOR=#0059b3]addon[/COLOR][/B] à votre forum il faut vous rendre dans votre [B][COLOR=#0059b3]Admin CP[/COLOR][/B] ([URL]http://votresite.fr/admin.php[/URL]) sur la page d'accueil de l'adminCP dans la sidebar en bas à droite une partie qui s'appelle [B][COLOR=#0059b3]Extensions installées[/COLOR][/B] qui contient les addons présente sur votre site [ATTACH=full]77678[/ATTACH] Vous allez cliquer sur [B][COLOR=#0059b3]Gestion des extensions[/COLOR][/B] puis vous allez cliquer sur [B][COLOR=#0059b3]+ Créer une extension[/COLOR][/B] le bouton est situé en haut à droite de la page Une nouvelle page va apparaître sur votre écran avec plusieurs paramètres. Pour le tutoriel j'appelle l'addon [B][COLOR=#0059b3]RGController[/COLOR][/B] [LIST] [*]ID de l'extension : rg_controller [*]Titre : RealityGaming - Controller [*]Chaîne de la version : 1.0 [*]ID de la version : 1 [*]URL : Comme vous voulez si vous voulez mettre l'url de votre mettez la sinon cela ne changera rien a l'addon [*]Code d'installation : Pas utilisé pour ce tutoriel [*]Code de désinstallation : Pas utilisé pour ce tutoriel [/LIST] Une fois les paramètres remplit cliquez sur [B][COLOR=#0059b3]Sauvegarder l'extension[/COLOR][/B]. Attention les paramètres ci-dessus sont donnés à titre d'exemple vous pouvez les modifier ! Si tout c'est bien passé vous devez voir l'extension dans la liste des addons. Nous allons donc passer à la création des dossiers. [INDENT][B][COLOR=#b30000]2. Créations des dossiers [/COLOR][/B][/INDENT] Donc connectez vous à votre [B][COLOR=#0059b3]FTP[/COLOR][/B] ou autres afin de pouvoir accéder aux dossiers de votre forum. Une fois connecté rendez vous dans le dossier [B][COLOR=#0059b3]Library[/COLOR][/B] A l'intérieur de celui-ci vous allez créer un dossier qui s'appelle comme l'extension que nous venons de créer donc pour le tutoriel le dossier s'appelle RGController Une fois le dossier créé vous allez dans celui-ci est créer deux nouveaux dossiers : [LIST=1] [*]ControllerPublic (Celui permet d'étendre les controller dit public donc ce que le visiteur peut voir, vous avez aussi ControllerAdmin qui d'étendre les controller de l'AdminCP) [*]Listener (Celui permettra d'indiquer au forum quelle class nous allons étendre) [/LIST] Une fois l'architecture de dossier fini nous allons passer a la troisième étape [INDENT][COLOR=#b30000][B]3. Explication pour étendre le controller.[/B][/COLOR][/INDENT] Donc nous allons étendre dans ce tutoriel le controller account afin de lui ajouter une nouvelle action qui s'appellera [B][COLOR=#0059b3]RGTutoriel[/COLOR][/B] Pour ce faire vous allez créer un nouveau fichier dans le Listener qui s'appellera LoadClassController.php Dans ce fichier vous allez ajouter ce code : [COLOR=#ff0000][fa]fa-2x fa-exclamation-triangle fa-border fa-pull-left[/FA][/COLOR] Attention vous devrez modifier le [B][COLOR=#0059b3]RGController[/COLOR][/B] en fonction du nom de votre dossier si votre dossier s'appelle [B][COLOR=#0059b3]Rouki[/COLOR][/B] vous devrez [B][COLOR=#0059b3]Rouki_Listener_LoadClassController[/COLOR][/B] pareil pour le [B][COLOR=#0059b3]RGController_ControllerPublic_Account[/COLOR][/B] il devient [B][COLOR=#0059b3]Rouki_ControllerPublic_Account[/COLOR][/B] [PHP] <?php class RGController_Listener_LoadClassController { public static function extendAccount($class, array &$extend) { if ($class == 'XenForo_ControllerPublic_Account') { $extend[] = 'RGController_ControllerPublic_Account'; } } }[/PHP] Sauvegarder le fichier, maintenant allez dans le dossier [B][COLOR=#0059b3]ControllerPublic[/COLOR][/B] et vous allez créer un nouveau fichier qui s'appellera [B][COLOR=#0059b3]Account.php[/COLOR][/B] [COLOR=#ff0000][fa]fa-1x fa-exclamation-triangle fa-border fa-pull-left[/FA][/COLOR]Même remarque que pour le code ci-dessus si votre nom de dossier est différent n'oubliez pas de le changer sinon ça ne fonctionnera pas ! Ajoutez ce code dans le fichier : [PHP]<?php class RGController_ControllerPublic_Account extends XFCP_RGController_ControllerPublic_Account { public function actionRGTutoriel() { //Variables $visitor = XenForo_Visitor::getInstance(); $username = $visitor->get('username'); $userId = $visitor->get('user_id'); //Permet de récuperer les variables dans la templete (Style) $viewParams = array( 'username' => $username, 'userId' => $userId, ); return $this->responseView('', 'RGController_Account_RGTutoriel', $viewParams); } }[/PHP] Explication du code ci-dessus donc [LIST] [*]public function actionRGTutoriel() définie la nouvelle action que nous allons ajouter au [B][COLOR=#0059b3]controller Account[/COLOR][/B]. [*][B][COLOR=#0059b3]$username[/COLOR][/B] et [B][COLOR=#0059b3]$userId[/COLOR][/B] permet de récupérer les informations du membre (Pseudo et Id) qui regarde la page [*]Le [COLOR=#0059b3][B]$viewParams[/B][/COLOR] permet de pouvoir récupérer les informations dans le template de style que nous allons créer. [*][B][COLOR=#0059b3]RGController_Account_RGTutoriel[/COLOR][/B] est le nom de la template que nous allons créer, pareil c'est modifiable en fonction du nom que vous avez donné a votre addon [/LIST] [LEFT]Maintenant nous allons créer le [B][COLOR=#0059b3]template[/COLOR][/B], donc vous allez dans Apparence => Style maître (Important, cela permet au template d'être ajouté dans tout les styles de votre forum !) => Créer un nouveau template. Trois nouveaux champs à remplir :[/LEFT] [LIST] [*]Nom : RGController_Account_RGTutoriel (A modifier en fonction de ce que vous avez définie comme nom dans le code) [*]Le textarea : Contient le code de la page (html) le [B][COLOR=#0059b3]php ne fonctionne[/COLOR][/B] pas dans les templates ! [*]Extension : Vous mettez l'extension que nous avons créer au début du tutoriel. [/LIST] Donc dans le textarea afin de tester le bon fonctionnement de la nouvelle action vous allez mettre : [LEFT][HTML]Bravo <b>{$username}</b> vous avez réussi a étendre le controller Account, votre Id sur le forum est <b>{$userId}</b>[/HTML] [B][COLOR=#0059b3]{$username}[/COLOR][/B] et [B][COLOR=#0059b3]{$userId}[/COLOR][/B] va appeler les variables que vous avons mis dans l'[B][COLOR=#0059b3]array()[/COLOR][/B] et les afficher sur la page. Une fois la template sauvegardée, vous allez dans l'onglet développement => observateur d’événement => créer un nouvel observateur d’événement 6 nouveaux champs sont apparu sur votre écran :[/LEFT] [LIST] [*]Observer l'événement : load_class_controller [*]Mot clef d'événement : Vous mettez rien [*]Exécuter le callback : Dans la première case vous mettre le nom de la class LoadClassController donc RGController_Listener_LoadClassController et dans l'autre vous mettez le nom de l'action qui est dans le fichier donc extendAccount [*]Ordre d’exécution du callback : Vous laissez comme ça [*]Description : Ajout l'action RGTutoriel au controller Account [*]Extension : L'extension que nous avons crée au début [/LIST] Sauvegarder l'événement et nous pouvons passer au test. [INDENT][COLOR=#b30000][B]4. Essai du système[/B][/COLOR][/INDENT] Donc il vous suffit de vous rendre sur votre forum de mettre d'aller sur les paramètres de votre compte donc [URL]http://votresite/account/rgtutoriel[/URL] [B][COLOR=#0059b3]rgtutoriel[/COLOR][/B] est le nom définie dans la fonction public function action[B][COLOR=#0059b3]RGTutoriel[/COLOR][/B]() Si vous avez l'écran : [ATTACH=full]77677[/ATTACH] Voilà maintenant vous savez étendre un controller, vous pouvez ajouter de nouvelle fonctionnalité a votre forum. Si vous avez des soucis ou des questions n'hésitez pas répondre au sujet ;) [RIGHT]A bientôt, [I][B]Fara' SEC[/B][/I][/RIGHT] [/QUOTE]
Insérer les citations…
Vérification
Publier la réponse
Forums
Forums généraux
Informatique
Développement
[XenForo] Étendre un controller existant afin de lui ajouter une nouvelle fonction
Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies.
Acceptez
En savoir plus.…
Haut