You are not logged in.
Pages: 1
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
Last edited by juliendev (2018-01-22 17:16:16)
Offline
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
Dan,s un plugin vous avez des HOOK spécifiques pour ajouter des champs avant ou après le formulaire affiché
CentOS 6.5 - CentOS 7.x
PHP 5.6 - PHP 7.x - MySQL 5.6 - MariaDB 10.2 + APC + oOPcache
GLPI from 0.72 to dev version
Certifiée ITIL (ITV2F, ITILF, ITILOSA)
Offline
Pages: 1