You are not logged in.

Announcement

 Téléchargez la dernière version stable de GLPI      -     Et vous, que pouvez vous faire pour le projet GLPI ? :  Contribuer
 Download last stable version of GLPI                      -     What can you do for GLPI ? :  Contribute

#1 2018-01-25 11:51:50

juliendev
Member
Registered: 2018-01-22
Posts: 6

Ajout de champs

Bonjour,

je suis actuellement en train de bosser sur un plugin qui surcharge certaines classes natives de glpi.

Mon plugin rajoute automatiquement deux champs supplémentaires à l'objet processeur en base de données (glpi_deviceprocessors) mais je souhaiterai qu'il surcharge également l'interface du processeur (en rajoutant ces deux champs.

Est-il possible de surcharger une classe existante dans un plugin ?

Et comment dire à glpi d'utiliser ma nouvelle classe surchargée?

Je travaille sur GLPI 9.2.1.

Merci

Offline

#2 2018-01-25 11:52:08

juliendev
Member
Registered: 2018-01-22
Posts: 6

Re: Ajout de champs

J'ai trouvé une astuce qui me permettrait de "redéfinir des classes et leurs fonctions" en utilisant un namespace dans mon plugin.

Ainsi, je n'aurai plus qu'à rajouter une ou deux lignes dans le fichier d'affichage déjà présent dans l'application pour utiliser la nouvelle classe redéfinie dans mon plugin.

Voilà un exemple peut être plus parlant :

<?php

//glpitest/front/test.form.php
require_once('../inc/test.php');
require_once('../plugins/sam/inc/surchargestest.php');

use Surcharges\Test as Test;

$montest= new Test;
$montest->affiche();

//glpitest/inc/test.php
require_once('t.php');

class Test extends T {

    function affiche(){
        echo "hello redefini";
    }

}

//glpitest/plugins/inc/SurchargesTest.php
namespace Surcharges;

class Test extends \T{

    function affiche(){
         
        echo "hello redefini comme il faut";
    }
}

//glpitest/inc/t.php
class T {
    function affiche(){
        echo "hello de base ";
    }

le résultat est alors celui que j'attends, le message redéfini dans le plugin, à savoir "hello redefini comme il faut".

Cependant, lorsque je veux faire la même chose avec mes vraies fichiers et en modifiant les fonctions :

<?php

//dans glpi/front/device.form.php
//le fichier qui correspond à l'affichage

require_once('../plugins/sam/inc/samdeviceprocessor.class.php');
require_once('../inc/deviceprocessor.class.php');

use sam\DeviceProcessor as DeviceProcessor;

...............
............
.....


//dans glpi/inc/device.processor.class.php

class DeviceProcessor extends CommonDevice {
//CommonDevise est situe ici : glpi/inc/commondevice.dass.php

function getAdditionalFields() {

      return array_merge(parent::getAdditionalFields(),
                         [['name'  => 'frequency_default',
                                     'label' => __('Frequency by default'),
                                     
                                     .....
                                     .....

                                     
//dans glpi/plugins/sam/samdeviceprocessor.class.php
//le fichier de mon plugin qui modifiera des fonctions de base

namespace sam;

class DeviceProcessor extends \CommonDevice {
     
function getAdditionalFields() {

      return array_merge(parent::getAdditionalFields(),
                         [['name'  => 'frequency_default',
                                     'label' => __('Frequency by default'),
                                     
                                     .....
                                     .....
                                     
                                     ICI JE RAJOUTE DES CHAMPS A LA FONCTION

Ici, le résultat que j'obtiens n'est pas celui attendu, je n'ai pas les champs rajoutés.

Je ne comprends pas, auriez vous une explication svp?

Offline

Board footer

Powered by FluxBB