• Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies. En savoir plus.


Forum de libres discussions autour du jeux vidéo (cheats, glitches, hacks, modding, réalité virtuelle VR, cryptomonnaies) - YOUPASS - convertir le crédit téléphonique en monnaie ! : Partenaire RealityGaming.fr - RealityGaming

Tutoriel Apprenez à créer un add-On CRUD sous le CMS XenForo

Rivals

Animateur informatique
Animateur
Inscrit
27 Août 2016
Messages
305
J'aime
257
Points
1 536
Reply from Rivals Forums généraux Informatique Programmation Programmation web : Apprenez à créer un add-On CRUD sous le CMS XenForo #1
Forum de libres discussions autour du jeux vidéo (cheats, glitches, hacks, modding, réalité virtuelle VR, cryptomonnaies) - header.png - RealityGaming
Bonjour à tous , nous allons aujourd'hui apprendre à créer notre premier add-On CRUD (Create, Read, Update, Delete) sous le CMS XenForo.
SOMMAIRE :

Architecture
Insertion de données
Affichage de données
Modification de données
Suppression de données
Avant toute chose je vais vous demander d'activer le mode debug de votre forum XenForo (créez un environnement de développement, n'utilisez en aucun cas une production).

ACTIVER LE MODE DEBUG
  1. Ouvrez le fichier Config.php que vous trouverez dans le dossier Library de votre FTP.
  2. Ajoutez la ligne suivante : $config['debug'] = true; .
Forum de libres discussions autour du jeux vidéo (cheats, glitches, hacks, modding, réalité virtuelle VR, cryptomonnaies) - header-archi.png - RealityGaming
Dans ce premier chapitre nous allons voir ensemble comment structurer son add-On mais également l'utilité des dossiers qui composeront l'architecture de notre add-On, dans ce tutoriel je vais prendre un exemple particulier : vous êtes lobbyman , vous possédez un forum et vous souhaitez créer un add-On qui permettra à vos membres de demander des lobbys.
  1. Un add-On XenForo se situera toujours dans le dossier library (mais pas que, nous verrons ceci par la suite), créons un dossier Lobbys qui sera le dossier parent de notre add-On.
  2. Dans ce dossier Lobbys nous allons créer un premier dossier Model qui permettra d'effectuer des requêtes de type : je veux récupérer telle demande de lobby, je veux récupérer toutes les demandes de lobby entre telle date et telle date etc.
  3. Créons un autre dossier nommé DataWriter, ce dossier nous permettra de créer, modifier et supprimer des demandes de lobby.
  4. Puis un dossier Route et un sous dossier Prefix, ces dossiers nous permettrons de déclarer notre routing c'est à dire les URLs à utiliser pour notre add-On (exemple:
    Vous devez vous inscrire pour voir les liens !
    ).
  5. Et enfin, terminons notre architecture avec un dossier ControllerPublic qui contiendra l'algorithme de notre add-On (si le membre soumet le formulaire alors j'enregistre....).
Forum de libres discussions autour du jeux vidéo (cheats, glitches, hacks, modding, réalité virtuelle VR, cryptomonnaies) - screen1.png - RealityGaming
(l'architecture finalisée)
Avant toute chose nous devons créer le routing de notre add-On mais également notre add-On afin que l'on puisse afficher un formulaire de demande de lobbys par exemple.

ROUTING BASIQUE

  • Rendez-vous sur votre panel d'administration à l'onglet Development puis Create Add-on.
Add-on ID : lobbys , c'est tout simplement un identifiant unique correspondant à notre add-on.
Title : Lobbys, explicitement c'est le titre de celui-ci.
Version String :
1.0.0.
Version ID : 1.

URL : (vous pouvez laisser ce champs vide, ça n'a aucune importance)
Installation Code & Uninstallation Code : (laissez également vide pour le moment).
  • Sauvegardez et créez un fichier Public.php dans le dossier Prefix (Route > Prefix) et insérez le code ci-dessous
CODE
PHP:
<?php

class Lobbys_Route_Prefix_Public implements XenForo_Route_Interface
{
    /**
    * Match a specific route for an already matched prefix.
    *
    * @see XenForo_Route_Interface::match()
    */
    public function match($routePath, Zend_Controller_Request_Http $request, XenForo_Router $router)
    {
        //on précise que nos URLs (plus particulièrement nos actions) peuvent prendre un paramètre de base : l'identifiant du lobby
        $action = $router->resolveActionWithIntegerParam($routePath, $request, 'lobby_id');

        //on indique notre ControllerPublic que nous allons créer dans le chapitre suivant
        return $router->getRouteMatch('Lobbys_ControllerPublic_Index', $action, 'lobby');
    }

    /**
    * Method to build a link to the specified page/action with the provided
    * data and params.
    *
    * @see XenForo_Route_BuilderInterface
    */
    public function buildLink($originalPrefix, $outputPrefix, $action, $extension, $data, array &$extraParams)
    {
        return XenForo_Link::buildBasicLinkWithIntegerParam($outputPrefix, $action, $extension, $data, 'lobby_id');
    }
}

?>
  • Rendez-vous sur votre panel d'administration, à l'onglet Development puis Route Prefixes, pour créer un nouveau préfixe de routage.
  • Remplissez & sauvegardez les champs indiqués avec les valeurs suivantes :
Route Prefix : lobby (c'est notre URL de base, exemple : members/{username}.{id}/follow , l'URL de base est members).
Route Type :
Public .
Route Class :
Lobbys_Route_Prefix_Public qui correspond évidemment à la class PHP de notre fichier que nous venons de créer.
Use class to build link : Only when data is provided
Add-on : Lobbys (techniquement nous lions ce préfixe de routage à notre add-On, ainsi à chaque exportation de notre add-On ce préfixe sera inscrit dans le fichier .XML de notre module)

Nous nommons notre fichier "Public" car vous pouvez également créer un add-On qui concernera le panel d'administration dans ce cas vous devrez créer un fichier "Admin", vous devrez également modifier le préfixe de route en change le type de route de Public à Admin Control Panel.

Forum de libres discussions autour du jeux vidéo (cheats, glitches, hacks, modding, réalité virtuelle VR, cryptomonnaies) - header-insertion.png - RealityGaming
Passons au deuxième chapitre qui porte sur l'insertion de données nous allons interagir avec deux dossiers qui sont DataWriter et ControllerPublic.
Dans un premier temps nous allons créer un fichier Index.php dans le dossier ControllerPublic, ce fichier hérite de la classe XenForo_ControllerPublic_Abstract qui est une classe étendue sur tous les controllers.

INDEX.PHP (actionIndex())
PHP:
<?php

class Lobbys_ControllerPublic_Index extends XenForo_ControllerPublic_Abstract
{
  /*
   Action index, affichons "Hello World !"" tout bêtement.
  */
  public function actionIndex()
  {
    echo "Hello World !";
  }

}
Rendez-vous sur l'URL suivante :
Vous devez vous inscrire pour voir les liens !
! Forum de libres discussions autour du jeux vidéo (cheats, glitches, hacks, modding, réalité virtuelle VR, cryptomonnaies) - :smile: - RealityGaming

Forum de libres discussions autour du jeux vidéo (cheats, glitches, hacks, modding, réalité virtuelle VR, cryptomonnaies) - screen2.png - RealityGaming
(nous avons bien notre Hello World ! d'affiché)
Vous pouvez tout de même voir que nous avons une erreur qui indique qu'aucun retour du controller n'est présent, en effet nous retournons un message brut sans grand intérêt si ce n'est que vous impressionner ( Forum de libres discussions autour du jeux vidéo (cheats, glitches, hacks, modding, réalité virtuelle VR, cryptomonnaies) - :trollface: - RealityGaming ), nous avons la possibilité d'afficher une template grâce au code ci-dessous mais uniquement aux utilisateurs connectés. Forum de libres discussions autour du jeux vidéo (cheats, glitches, hacks, modding, réalité virtuelle VR, cryptomonnaies) - :stupéfait: - RealityGaming

INDEX.PHP (actionIndex())
PHP:
    //on instancie l'utilisateur courant.
    $visitor = XenForo_Visitor::getInstance();

    if(!$visitor['user_id'])
    {
      //si l'utilisateur n'est pas connecté on renvoit une erreur de permissions
      return $this->responseNoPermission();
    }

   return $this->responseView('Lobbys_ViewPublic_Index', 'lobbys_index', $params = []);

Dans ce code nous utilisons une méthode nommée responseView qui provient de notre controller XenForo_ControllerPublic_Abstract , d'où l'importance d'hériter de cette classe, ainsi le premier paramètre correspond à une classe qui n'est pas importante pour la création de notre add-On, vous pouvez laisser ce paramètre vide, le deuxième paramètre est
le nom de notre template et le dernier est un tableau de paramètres qui sera disponible dans notre template lobbys_index.

Rendez-vous sur notre ACP , à l'onglet Appearance puis Templates, créez une template avec le nom que nous lui avons donné précédemment et avec un contenu basique pour essayer le fonctionnement de notre méthode responseView.

Forum de libres discussions autour du jeux vidéo (cheats, glitches, hacks, modding, réalité virtuelle VR, cryptomonnaies) - screen3.png - RealityGaming
Revenez sur la page de nos lobbys, notre template est bien affichée.
Forum de libres discussions autour du jeux vidéo (cheats, glitches, hacks, modding, réalité virtuelle VR, cryptomonnaies) - screen4.png - RealityGaming
Modifions notre template afin d'y incorporer quelques éléments comme un formulaire qui va permettre à nos membres de demander un lobby.

LOBBYS_INDEX
HTML:
<xen:title>{xen:phrase lobbys_index_title}</xen:title>
<xen:description>{xen:phrase lobbys_index_description}</xen:description>

<xen:navigation>
    <xen:breadcrumb source="$nodeBreadCrumbs" />
</xen:navigation>

<form action="{xen:link 'lobby/save'}" method="post" class="xenForm AutoValidator" data-redirect="yes">
 
        <dl class="ctrlUnit">
        <dt><label>{xen:phrase lobbys_index_games_label}:</label></dt>
        <dd><select name="game">
              <option value="BO3">{xen:phrase lobbys_index_games_bo3}</option>
              <option value="BO2">{xen:phrase lobbys_index_games_bo2}</option>
                           <option value="MW3">{xen:phrase lobbys_index_games_mw3}</option>
            </select>
            </dd>
 
    </dl>
 
    <dl class="ctrlUnit">
        <dt><label>{xen:phrase lobbys_index_plateforms_label}:</label></dt>
        <dd><input type="radio" name="plateform" value="PS3"> {xen:phrase lobbys_index_plateforms_ps3}</br>
            <input type="radio" name="plateform" value="XBOX360"> {xen:phrase lobbys_index_plateforms_xbox360}
        </dd>
    </dl>

    <dl class="ctrlUnit">
        <dt><label>{xen:phrase lobbys_index_games_id_label}:</label></dt>
        <dd><input type="text" class="textCtrl" name="game_id">
        </dd>
    </dl>
 
    <dl class="ctrlUnit submitUnit">
        <dt></dt>
        <dd><input type="submit" value="{xen:phrase lobbys_index_submit}" class="button primary" /></dd>
    </dl>

    <input type="hidden" name="_xfToken" value="{$visitor.csrf_token_page}" />
</form>
Il vous faudra phraser votre template vous même.

Forum de libres discussions autour du jeux vidéo (cheats, glitches, hacks, modding, réalité virtuelle VR, cryptomonnaies) - screen5.png - RealityGaming
(résultat après avoir modifié la template)
Nous allons maintenant créer un fichier Lobbys.php dans le dossier DataWriter. Ce fichier va nous permettre de déclarer nos champs afin de pouvoir les modifier, supprimer etc. par la suite et ceci plus facilement grâce aux fonctions ci-dessous. Forum de libres discussions autour du jeux vidéo (cheats, glitches, hacks, modding, réalité virtuelle VR, cryptomonnaies) - :) - RealityGaming

LOBBYS.PHP

PHP:
<?php

class Lobbys_DataWriter_Lobbys extends XenForo_DataWriter
{
  protected function _getFields()
  {
    // nom de la table
    return array('lobbys' => array(

      // identifiant du lobby
      'lobby_id'     => array('type' => self::TYPE_UINT, 'autoIncrement' => true),

      // identifiant du membre qui demande un lobby
      'user_id'      => array('type' => self::TYPE_UINT, 'required' => true),

      // on définit des valeurs autorisées, ainsi impossible de glitcher le jeu sélectionné
      'game'         => array('type' => self::TYPE_STRING, 'required' => true, 'allowedValues' => array('BO3', 'MW3', 'BO2')),
      'plateform'    => array('type' => self::TYPE_STRING, 'required' => true, 'allowedValues' => array('PS3', 'XBOX360')),

      // identifiant IG du membre
      'identifiant'  => array('type' => self::TYPE_STRING, 'required' => true),

      // etat du lobby , par défaut il est en cours
      'lobby_state'   => array('type' => self::TYPE_STRING, 'required' => true, 'default' => 'cours', 'allowedValues' => array('cours', 'termine', 'refuse')),

      // on note la date de demande sous forme de timestamp grâce à la classe XenForo_Application
      'lobby_date' => array('type' => self::TYPE_UINT, 'default' => XenForo_Application::$time)

    ));
  }

  protected function _getExistingData($data)
  {
      if (!$id = $this->_getExistingPrimaryKey($data, 'lobby_id'))
      {
          return false;
      }

      return array('lobbys' => XenForo_Model::create('Lobbys_Model_Lobbys')->getLobbyById($id));
  }

  protected function _getUpdateCondition($table)
  {
      return 'lobby_id = ' . $this->_db->quote($this->getExisting('lobby_id'));
  }
}

La prochaine étape consiste à créer un
Installer, celui-ci va nous permettre d'ajouter ou supprimer des tables & colonnes à notre base de données à chaque installation ou désinstallation (et mise à jour) de notre add-on.

Créez un fichier
Installer.php à la racine de votre dossier parent, il existe différente façon de créer un Installer je vous donne la plus simple.


INSTALLER.PHP

PHP:
<?php

class Lobbys_Installer
{
    protected static $table = array(
         'createQuery' => "CREATE TABLE IF NOT EXISTS `lobbys` (
                    `lobby_id` INT( 10 ) NOT NULL AUTO_INCREMENT,
                    `user_id` INT ( 10 ) NOT NULL,
                    `game` VARCHAR ( 255 ) NOT NULL,
                    `plateform` VARCHAR ( 255 ) NOT NULL,
                    `identifiant` VARCHAR ( 255 ) NOT NULL,
                    `lobby_state` ENUM ( `cours`, `termine`, `refuse` ) NOT NULL,
                    `lobby_date` VARCHAR ( 255 ) NOT NULL UNSIGNED,
                    PRIMARY KEY (`lobby_id`)
        ) ENGINE = InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci"',
        'dropQuery' => 'DROP TABLE IF EXISTS `lobbys`'
    );

    /*
      Lors de l'installation c'est cette fonction qui est appelée
    */
    public static function install()
    {
        $db = XenForo_Application::get('db');
        $db->query(self::$table['createQuery']);
    }


    /*
      Lors de la désinstallation c'est cette fonction qui est appelée
    */
    public static function uninstall()
    {
        $db = XenForo_Application::get('db');
        $db->query(self::$table['dropQuery']);
    }
}
Comme je l'ai indiqué, lors de l'installation une fonction est exécutée qui elle même exécute une requête SQL le processus est le même pour la désinstallation.

Je vous invite à modifier votre add-on depuis votre ACP pour renseigner les classes et fonctions d'
installation / désinstallation.

Forum de libres discussions autour du jeux vidéo (cheats, glitches, hacks, modding, réalité virtuelle VR, cryptomonnaies) - Capture d’e*cran 2016-10-31 a* 17.41.17.png - RealityGaming
Exportez l'add-on et mettez le à jour pour procéder à l'installation de notre table, si l'installation se passe correctement vous devriez voir apparaître la page du processus d'installation XF.

Créez un fichier
Lobbys.php dans le dossier Model, ce fichier contiendra pour le moment une fonction qui nous permettra de récupérer un lobby via son identifiant unique .

LOBBYS.PHP

PHP:
<?php

class Lobbys_Model_Lobbys extends XenForo_Model
{
  public function getLobbyById($lobbyId)
  {
    return $this->_getDb()->fetchRow('SELECT * FROM lobbys WHERE lobby_id = ?', $lobbyId);
  }
}
Forum de libres discussions autour du jeux vidéo (cheats, glitches, hacks, modding, réalité virtuelle VR, cryptomonnaies) - header-insertion.png - RealityGaming
Passons à l'insertion de données, pour se faire nous allons utiliser notre DataWriter dans notre ControllerPublic, pour sauvegarder nos données nous allons tout simplement créer une méthode, une action Save qui se chargera de les sauvegarder uniquement lorsque nous l'utilisons avec le type de requête HTTP : POST. Forum de libres discussions autour du jeux vidéo (cheats, glitches, hacks, modding, réalité virtuelle VR, cryptomonnaies) - :cool: - RealityGaming
INDEX.PHP (actionSave())
PHP:
public function actionSave()
  {
    //on instancie l'utilisateur courant.
    $visitor = XenForo_Visitor::getInstance();

    if(!$visitor['user_id'])
    {
      //si l'utilisateur n'est pas connecté on renvoit une erreur de permissions
      return $this->responseNoPermission();
    }

    //on vérifie si la requête est en POST uniquement, dans le cas contraire une erreur automatique sera retournée.
    $this->_assertPostOnly();

    //on récupère nos valeurs de champs
    $game         = $this->_input->filterSingle('game', XenForo_Input::STRING);
    $plateform    = $this->_input->filterSingle('plateform', XenForo_Input::STRING);
    $identifiant  = $this->_input->filterSingle('game_id', XenForo_Input::STRING);

    //on crée une instance de notre DW.
    $dw = XenForo_DataWriter::create('Lobbys_DataWriter_Lobbys');

    //on définit nos champs / valeurs de cette manière.
    $dw->set('user_id', $visitor['user_id']); // on récupère l'identifiant du membre courant.
    $dw->set('game', $game);
    $dw->set('plateform', $plateform);
    $dw->set('identifiant', $identifiant);

    /*
      Une fois que l'on a définit ce dont on a besoin, on sauvegarde nos données.
      Nous n'avons pas besoin de sauvegarder l'état de notre lobby car il y a déjà une valeur par défaut, pareil pour la date.
    */
    $dw->save();

    //on effectue une redirection avec un message de succès.
    return $this->responseRedirect(XenForo_ControllerResponse_Redirect::SUCCESS,
         XenForo_Link::buildPublicLink('/'),
         new XenForo_Phrase('lobbys_index_success'));
  }
Tentez de remplir le formulaire, sauvegardez le et vous obtiendrez
un message de succès ainsi qu'une redirection vers l'accueil. Forum de libres discussions autour du jeux vidéo (cheats, glitches, hacks, modding, réalité virtuelle VR, cryptomonnaies) - :) - RealityGaming

Forum de libres discussions autour du jeux vidéo (cheats, glitches, hacks, modding, réalité virtuelle VR, cryptomonnaies) - header-affichage.png - RealityGaming
Nous avons déjà parcouru du chemin , passons à l'affichage des demandes de lobby nous allons utiliser notre
ControllerPublic et notre Model pour se faire.
Créez une fonction getAllLobbys qui va nous permettre comme son nom l'indique de récupérer tous les lobbys, cette requête va être particulière puisque nous devons également récupérer les données de chaque demandeur de lobby.

LOBBYS.PHP
PHP:
  /*
  * Il existe des manières bien plus propre de réaliser ceci mais je pars de 0 afin de vous expliquer les bases, inutile pour le moment de vous rendre la tâche trop compliquée.
  */
  public function getAllLobbys()
  {
    return $this->_getDb()->fetchAll('SELECT * FROM lobbys INNER JOIN xf_user ON lobbys.user_id = xf_user.user_id');
  }
Passons au
ControllerPublic nous allons créer une action all qui va nous permettre de lister toutes les demandes de lobby automatiquement, en soit celle-ci ne fait que d'afficher une template avec un tableau de paramètre qui contient nos demandes.

INDEX.PHP (actionAll)
PHP:
  public function actionAll()
  {
    //models, nous instancions notre model afin d'utiliser notre fonction getAllLobbys.
    $lobbysModel = XenForo_Model::create('Lobbys_Model_Lobbys');

    //les demandes
    $lobbys = $lobbysModel->getAllLobbys();

    return $this->responseView('Lobbys_ViewPublic_All', 'lobbys_all', $params = ['lobbys' => $lobbys]);
  }
Enfin, crééons une template lobbys_all qui contiendra un tableau parcouru par chaque demande.

LOBBYS_ALL
HTML:
<xen:title>{xen:phrase lobbys_all_title}</xen:title>
<xen:description>{xen:phrase lobbys_all_description}</xen:description>

<xen:navigation>
    <xen:breadcrumb source="$nodeBreadCrumbs" />
</xen:navigation>

<xen:if is="{$lobbys}">
        <table class="dataTable">
        <tr class="dataRow subtle">
            <th width="20%">{xen:phrase user}</th>
            <th width="38%">{xen:phrase lobbys_all_game}</th>
            <th width="32%">{xen:phrase lobbys_all_plateform}</th>
            <th width="10%">{xen:phrase lobbys_all_state}</th>
            <th width="10%">{xen:phrase lobbys_all_date}</th>
        </tr>
        <xen:foreach loop="$lobbys" value="$lobby">
            <tr class="dataRow">
                <td><xen:username user="{$lobby}" rich="true" /></td>
                <td>{$lobby.game}</td>
                <td>{$lobby.plateform}</td>
                <td><a href="{xen:link 'lobby/update', $lobby}"><xen:if is="{$lobby.lobby_state} == 'cours'">{xen:phrase lobbys_all_state_cours}<xen:elseif is="{$lobby.lobby_state} == 'refuse'" />{xen:phrase lobbys_all_state_refuse}<xen:elseif is="{$lobby.lobby_state} == 'termine'" />{xen:phrase lobbys_all_state_termine}</xen:if></a></td>
                <td><xen:datetime time="{$lobby.lobby_date}"/></td>
            </tr>
        </xen:foreach>
        </table>

<xen:else />

</xen:if>
Rendez-vous sur l'URL suivante :
Vous devez vous inscrire pour voir les liens !
! Forum de libres discussions autour du jeux vidéo (cheats, glitches, hacks, modding, réalité virtuelle VR, cryptomonnaies) - :smile: - RealityGaming

Forum de libres discussions autour du jeux vidéo (cheats, glitches, hacks, modding, réalité virtuelle VR, cryptomonnaies) - screen6.png - RealityGaming
Forum de libres discussions autour du jeux vidéo (cheats, glitches, hacks, modding, réalité virtuelle VR, cryptomonnaies) - header-modification.png - RealityGaming
Pour cet avant dernier chapitre nous allons créer une fonctionnalité qui va permettre de modifier l'état de la demande du lobby, pour se faire nous allons globalement créer une action dans notre
Controller.

Créez une template avec le titre lobbys_update.

LOBBYS_UPDATE

HTML:
<xen:h1>{xen:phrase lobbys_update}</xen:h1>


<xen:navigation>
    <xen:breadcrumb source="$nodeBreadCrumbs" />
</xen:navigation>

<form action="{xen:link 'lobby/update', $lobby}" method="post" class="xenForm AutoValidator" data-redirect="yes">
 
    <dl class="ctrlUnit">
        <dt><label>{xen:phrase lobbys_all_state}:</label></dt>
         <dd><select name="lobby_state">
              <option {xen:if '{$lobby.lobby_state} == "cours"', 'selected'} value="cours">{xen:phrase lobbys_all_state_cours}</option>
              <option {xen:if '{$lobby.lobby_state} == "termine"', 'selected'} value="termine">{xen:phrase lobbys_all_state_termine}</option>
                           <option {xen:if '{$lobby.lobby_state} == "refuse"', 'selected'} value="refuse">{xen:phrase lobbys_all_state_refuse}</option>
            </select>
         </dd>
    </dl>

    <dl class="ctrlUnit submitUnit">
        <dt></dt>
        <dd>
            <input type="submit" value="{xen:phrase save_changes}" accesskey="s" class="button primary" />
        </dd>
    </dl>

    <input type="hidden" name="_xfToken" value="{$visitor.csrf_token_page}" />
</form>

Puis
créons une action update dans notre Controller, si la requête est de type GET nous affichons simplement notre template pour choisir l'état de notre demande si c'est de type POST nous traitons la requête en utilisant notre DataWriter.

INDEX.PHP (actionUpdate())
PHP:
public function actionUpdate()

  {
    //input
    $lobbyId         = $this->_input->filterSingle('lobby_id', XenForo_Input::UINT);

    $lobbysModel     = XenForo_Model::create('Lobbys_Model_Lobbys');

    $lobby           = $lobbysModel->getLobbyById($lobbyId);

    //on vérifie si la demande existe
    if(!$lobby)
    {
      return $this->responseError(new XenForo_Phrase('requested_lobby_not_found'));
    }

    //si la requête est de type POST, donc soumission du formulaire
    if($this->_request->isPost())
    {
      $lobbyState = $this->_input->filterSingle('lobby_state', XenForo_Input::STRING);

      $dw = XenForo_DataWriter::create('Lobbys_DataWriter_Lobbys');
      $dw->setExistingData($lobbyId);
      $dw->set('lobby_state', $lobbyState);
      $dw->save();

      //on effectue une redirection avec un message de succès.
      return $this->responseRedirect(XenForo_ControllerResponse_Redirect::SUCCESS,
           XenForo_Link::buildPublicLink('lobby/all'),
           new XenForo_Phrase('lobbys_update_success'));
    }

    return $this->responseView('Lobbys_ViewPublic_Update', 'lobbys_update', $params = ['lobby' => $lobby]);
  }
Revenez sur notre liste de demandes, puis
cliquez sur son état pour être redirigé vers la page d'édition de celui-ci, soumettez et observez ! Forum de libres discussions autour du jeux vidéo (cheats, glitches, hacks, modding, réalité virtuelle VR, cryptomonnaies) - :) - RealityGaming

Forum de libres discussions autour du jeux vidéo (cheats, glitches, hacks, modding, réalité virtuelle VR, cryptomonnaies) - screen7.png - RealityGaming
Forum de libres discussions autour du jeux vidéo (cheats, glitches, hacks, modding, réalité virtuelle VR, cryptomonnaies) - header-suppression.png - RealityGaming
Pour notre dernier chapitre nous allons tout simplement créer la fonctionnalité qui nous permettra de
supprimer notre demande en cochant une case sur la page d'édition de l'état de celui-ci. Forum de libres discussions autour du jeux vidéo (cheats, glitches, hacks, modding, réalité virtuelle VR, cryptomonnaies) - :neo: - RealityGaming
Modifions notre action update qui prendra en compte notre case à cocher pour supprimer notre demande, ainsi à la soumission si nous détectons que cette case a été cochée nous supprimons la demande.

INDEX.PHP (actionUpdate())
PHP:
  public function actionUpdate()
  {
    //input
    $lobbyId         = $this->_input->filterSingle('lobby_id', XenForo_Input::UINT);
    $delete          = $this->_input->filterSingle('delete', XenForo_Input::UINT);

    $lobbysModel     = XenForo_Model::create('Lobbys_Model_Lobbys');

    $lobby           = $lobbysModel->getLobbyById($lobbyId);

    //on vérifie si la demande existe
    if(!$lobby)
    {
      return $this->responseError(new XenForo_Phrase('requested_lobby_not_found'));
    }

    //si la requête est de type POST, donc soumission du formulaire
    if($this->_request->isPost())
    {
      $lobbyState = $this->_input->filterSingle('lobby_state', XenForo_Input::STRING);

      $dw = XenForo_DataWriter::create('Lobbys_DataWriter_Lobbys');
      $dw->setExistingData($lobbyId);
      if($delete)
      {
        $dw->delete();
      }
      else {
        $dw->set('lobby_state', $lobbyState);
      }

      $dw->save();

      //on effectue une redirection avec un message de succès.
      return $this->responseRedirect(XenForo_ControllerResponse_Redirect::SUCCESS,
           XenForo_Link::buildPublicLink('lobby/all'),
           new XenForo_Phrase('lobbys_update_success'));
    }

    return $this->responseView('Lobbys_ViewPublic_Update', 'lobbys_update', $params = ['lobby' => $lobby]);
  }
Forum de libres discussions autour du jeux vidéo (cheats, glitches, hacks, modding, réalité virtuelle VR, cryptomonnaies) - screen8.png - RealityGaming
Forum de libres discussions autour du jeux vidéo (cheats, glitches, hacks, modding, réalité virtuelle VR, cryptomonnaies) - header-fin.png - RealityGaming
 

Snake's 🐍

Administrateur
Administrateur
Inscrit
5 Juin 2012
Messages
8 427
J'aime
6 324
Points
10 635
Reply from Snake's 🐍 Forums généraux Informatique Programmation Programmation web : Apprenez à créer un add-On CRUD sous le CMS XenForo #2
Très complet, félicitations ! Forum de libres discussions autour du jeux vidéo (cheats, glitches, hacks, modding, réalité virtuelle VR, cryptomonnaies) - :smile: - RealityGaming
 

WEYZEN.

Membre
Premium
Inscrit
16 Mai 2015
Messages
4 978
J'aime
1 982
Points
4 295
Reply from WEYZEN. Forums généraux Informatique Programmation Programmation web : Apprenez à créer un add-On CRUD sous le CMS XenForo #3
J'adore merci Forum de libres discussions autour du jeux vidéo (cheats, glitches, hacks, modding, réalité virtuelle VR, cryptomonnaies) - :) - RealityGaming
 

membre8987

Banni
Ancien staff
Inscrit
22 Octobre 2011
Messages
14 103
J'aime
7 737
Points
11 735
Reply from membre8987 Forums généraux Informatique Programmation Programmation web : Apprenez à créer un add-On CRUD sous le CMS XenForo #4
OMG J'ai tout compris ! Forum de libres discussions autour du jeux vidéo (cheats, glitches, hacks, modding, réalité virtuelle VR, cryptomonnaies) - :$ - RealityGaming Merci pour ce tuto Riri !

Je suis obligé de faire le chieur Forum de libres discussions autour du jeux vidéo (cheats, glitches, hacks, modding, réalité virtuelle VR, cryptomonnaies) - :trollface: - RealityGaming
Pour les inputs on peut faire comme ça aussi Forum de libres discussions autour du jeux vidéo (cheats, glitches, hacks, modding, réalité virtuelle VR, cryptomonnaies) - :d: - RealityGaming
PHP:
$input = $this->_input->filter(array(
    'feedback_edit'     => XenForo_Input::STRING,
    'delete_feedback'   => XenForo_Input::STRING, 
    'feedback_id'       => XenForo_Input::UINT
));
 

Rivals

Animateur informatique
Animateur
Inscrit
27 Août 2016
Messages
305
J'aime
257
Points
1 536
Reply from Rivals Forums généraux Informatique Programmation Programmation web : Apprenez à créer un add-On CRUD sous le CMS XenForo #5
OMG J'ai tout compris ! Forum de libres discussions autour du jeux vidéo (cheats, glitches, hacks, modding, réalité virtuelle VR, cryptomonnaies) - :$ - RealityGaming Merci pour ce tuto Riri !

Je suis obligé de faire le chieur Forum de libres discussions autour du jeux vidéo (cheats, glitches, hacks, modding, réalité virtuelle VR, cryptomonnaies) - :trollface: - RealityGaming
Pour les inputs on peut faire comme ça aussi Forum de libres discussions autour du jeux vidéo (cheats, glitches, hacks, modding, réalité virtuelle VR, cryptomonnaies) - :d: - RealityGaming
PHP:
$input = $this->_input->filter(array(
    'feedback_edit'      => XenForo_Input::STRING,
    'delete_feedback'  => XenForo_Input::STRING,
    'feedback_id'          => XenForo_Input::UINT
));
C'est pas à moi que tu vas apprendre ça Forum de libres discussions autour du jeux vidéo (cheats, glitches, hacks, modding, réalité virtuelle VR, cryptomonnaies) - :trollface: - RealityGaming
 

Walky 🍻

Développeur
Développeur
Inscrit
18 Octobre 2012
Messages
1 246
J'aime
1 132
Points
6 320
Reply from Walky 🍻 Forums généraux Informatique Programmation Programmation web : Apprenez à créer un add-On CRUD sous le CMS XenForo #7
Un tuto presque parfait Forum de libres discussions autour du jeux vidéo (cheats, glitches, hacks, modding, réalité virtuelle VR, cryptomonnaies) - :trollface: - RealityGaming

À quoi sert cette ligne HTML :
HTML:
<input type="hidden" name="_xfConfirm" value="1" />
Si dans le PHP tu n'utilises pas cette condition :
PHP:
if ($this->isConfirmedPost())
Oui je fais chier Forum de libres discussions autour du jeux vidéo (cheats, glitches, hacks, modding, réalité virtuelle VR, cryptomonnaies) - :trollface: - RealityGaming

Pense à mettre les balises PHP sur tes codes PHP aussi Forum de libres discussions autour du jeux vidéo (cheats, glitches, hacks, modding, réalité virtuelle VR, cryptomonnaies) - :p - RealityGaming

Good job Forum de libres discussions autour du jeux vidéo (cheats, glitches, hacks, modding, réalité virtuelle VR, cryptomonnaies) - :membre: - RealityGaming
 

Rivals

Animateur informatique
Animateur
Inscrit
27 Août 2016
Messages
305
J'aime
257
Points
1 536
Reply from Rivals Forums généraux Informatique Programmation Programmation web : Apprenez à créer un add-On CRUD sous le CMS XenForo #8
Un tuto presque parfait Forum de libres discussions autour du jeux vidéo (cheats, glitches, hacks, modding, réalité virtuelle VR, cryptomonnaies) - :trollface: - RealityGaming

À quoi sert cette ligne HTML :
HTML:
<input type="hidden" name="_xfConfirm" value="1" />
Si dans le PHP tu n'utilises pas cette condition :
PHP:
if ($this->isConfirmedPost())
Oui je fais chier Forum de libres discussions autour du jeux vidéo (cheats, glitches, hacks, modding, réalité virtuelle VR, cryptomonnaies) - :trollface: - RealityGaming

Pense à mettre les balises PHP sur tes codes PHP aussi Forum de libres discussions autour du jeux vidéo (cheats, glitches, hacks, modding, réalité virtuelle VR, cryptomonnaies) - :p - RealityGaming

Good job Forum de libres discussions autour du jeux vidéo (cheats, glitches, hacks, modding, réalité virtuelle VR, cryptomonnaies) - :membre: - RealityGaming
Je savais qu'on allait me poser cette question, d'ailleurs au départ la première template n'en contenait pas puis je l'ai rajouté Forum de libres discussions autour du jeux vidéo (cheats, glitches, hacks, modding, réalité virtuelle VR, cryptomonnaies) - :trollface: - RealityGaming

Oui j'ai essayé de les mettre un peu partout, je vais éditer, tx Forum de libres discussions autour du jeux vidéo (cheats, glitches, hacks, modding, réalité virtuelle VR, cryptomonnaies) - :) - RealityGaming
 

Paradise'

Donateur
Premium
Inscrit
30 Juin 2013
Messages
4 158
J'aime
4 085
Points
6 635
Reply from Paradise' Forums généraux Informatique Programmation Programmation web : Apprenez à créer un add-On CRUD sous le CMS XenForo #9
Cette rédaction de BG omg Forum de libres discussions autour du jeux vidéo (cheats, glitches, hacks, modding, réalité virtuelle VR, cryptomonnaies) - :o - RealityGaming