0Publication du module NewsSlider 1.2b

0Deux extensions "Xoops" pour Google Chrome et Chromium

0Héritage de la class xoopsForm

';
                    }
                    
$ret .= '$class '" cols-pan="2">' $ele->render() . '';
                }
            } else {
                
$hidden .= $ele->render();
            }
        }
        
$ret .= '' NWLINE ' ' $hidden '' NWLINE;
        
$ret .= $this->renderValidationJS(true);
        return 
$ret;
    }

Mise en pratique

Dans notre premier exemple nous souhaitons envoyer notre formulaire à un traitement différent en fonction d'une action utilisateur.

Notre formulaire est le suivant :

// Création de l'objet formulaire
$my_form = new ThemeForm("mon formulaire"'Form_bien'"han-dle_bien.php?action=save");

// Création des éléments de formulaire
$reference = new XoopsFormText("Référence""reference"50100);

$prix= new XoopsFormText("Prix","prix",50,100);

// Ajout des éléments au formulaire
$my_form->addElement($reference,true);
$my_form->addElement($prixtrue);

// Idem pour un bouton
$button = new XoopsFormButton('''post'_SEND'submit');
$my_form->addElement($button);
// Affichage du formulaire
$my_form->display();

Jusqu'ici rien de bien sorcier ! Nous allons donc modifier le comportement de XoopsThemeForm pour cela,nous créons un fichier php dans le répertoire class, que nous nommons de manière très original : my_form.php

Nous obtenons maintenant la séquence d?héritage suivante :

xoopsform

Pour que cette classe hérite de XoopsThemeForm, on dit aussi pour qu'elle étend, ou en-core qu'elle généralise, on écrit en php :

class MyForm extends XoopsThemeForm{

}
?>

Bien sûr pour que cela fonctionne, il faut que la classe "fille" trouve sa classe "mère", donc il faut inclure la classe XoopsThemeForm ce qui donne :

include_once(./../XoopsThemeForm.php)

class 
MyForm extends XoopsThemeForm{

}
?>

Vous pouvez aussi utiliser xoops_load de la manière suivante :


defined
('XOOPS_ROOT_PATH') or die('Restricted access');

xoops_load('XoopsThemeForm');

class 
MyForm extends XoopsThemeForm {}

Ensuite on peut soit ajouter de nouvelles propriétés ou de nouvelles méthodes ou bien redéfinir des méthodes existantes, on dit dans ce cas "Que l'on surcharge (override) la méthode".

Nous allons ajouter à notre formulaire une nouvelle méthode, actuellement la classe XoopsThemeForm ne permet pas de changer le paramètre action du formulaire après avoir déclaré le constructeur, ce paramètre est passé au constructeur une fois pour toute; Mais on veut le modifier en fonction des actions utilisateurs et diriger le formulaire vers des traitement différents.

Nous allons donc ajouter une méthode :

xoops_load('XoopsThemeForm');

class 
MyForm extends XoopsThemeForm {

    private 
$newAction;

     public function 
setNewAction($url=null){
        
        
$url===null?$this->newAction=$this->getAction():  $this->newAction=$action;
  
        }
}
?>

Cette nouvelle méthode (appelé aussi "setter") affecte l'url a la nouvelle propriété $newAc-tion si le paramètre de la fonction est passé.

Note importante :
La classe xoopsForm, n'a pas était optimisée pour être généralisée de manière a donner a ux développeurs la possibilité de faire ce qu'ils veulent, à mon grand regret. Pour cela il aurait fallu que les propriétés de la classe xoopsForm soit "protected" et non "private" (je vous renvois à la POO) ou alors que : chaque propriété soit associée à un "setter" et à un "getter". j'ignore les raisons de cette absence.
Ceci vas nous obliger a redéfinir la fonction render(). Ceux qui n'aurait pas été obligatoire si nous avions eu des "setter" ou que les propriétés eût étées "protected"

La classe avec la fonction render() redéfinie, on remplace $this->getAction par notre nouvelle propriété $newAction, ce qui donne :

xoops_load('XoopsThemeForm');

class 
MyForm extends XoopsThemeForm {

    private 
$newAction;

     public function 
setNewAction($url=null){
        
            
$url===null?$this->newAction=$this->getAction():  $this->newAction=$action;
  
        }

    function 
render()
    {
        
$ele_name $this->getName();
        
$ret '$ele_name '" id="' $ele_name '" action="' $this->newAction'" method="' $this->getMethod() . '" onsubmit="return xoopsFormValidate_' $ele_name '();"' $this->getExtra() . '>
            
            
$this->getTitle() . '
        '
;
        
$hidden '';
        
$class 'even';
        foreach (
$this->getElements() as $ele) {
            if (!
is_object($ele)) {
                
$ret .= $ele;
            } else if (!
$ele->isHidden()) {
                if (!
$ele->getNocolspan()) {
                    
$ret .= '';
                    if ((
$caption $ele->getCaption()) != '') {
                        
$ret .= '. ($ele->isRequired() ? '-required' '') . '">';
                        
$ret .= '$caption ''
;
                        
$ret .= '*'
;
                        
$ret .= '
';
                    }
                    if ((
$desc $ele->getDescription()) != '') {
                        
$ret .= '$desc '
';
                    }
                    
$ret .= '$class '">' $ele->render() . '' NWLINE;
                } else {
                    
$ret .= '';
                    if ((
$caption $ele->getCaption()) != '') {
                        
$ret .= '. ($ele->isRequired() ? '-required' '') . '">';
                        
$ret .= '$caption ''
;
                        
$ret .= '*'
;
                        
$ret .= '
';
                    }
                    
$ret .= '$class '" cols-pan="2">' $ele->render() . '';
                }
            } else {
                
$hidden .= $ele->render();
            }
        }
        
$ret .= '' NWLINE ' ' $hidden '' NWLINE;
        
$ret .= $this->renderValidationJS(true);
        return 
$ret;
    }

}
?>

Maintenant nous pouvons l'utiliser de la manière suivante :

$my_form=new MyForm(paramètres);

If(
condition){
// maintenant on change l'url du formulaire
   
$MyForm->setNewAction('test.php')
}

Vous pouvez faire une mise à jour s'en risque......

Deuxième exemple on souhaite ajouter un élément qui n'existe pas dans les classes de XOOPS, par exemple on veut que notre formulaire affiche des images précédemment téléchargées sur le serveur, pour informer l'utilisateur.

Il n'y a pas d'élément, affiche image, dans les formulaires de XOOPS. Nous allons donc le créer en étendant la classe XoopsFormElement, qui est la classe chargée de créer un élément de formulaire, comme formcolorpicker etc....


ce qui donne comme héritage :

xoopsform

classe :



defined
('XOOPS_ROOT_PATH') or die('Restricted access');

class 
MyElement extends XoopsFormElement
{
    
    var 
$_content;
    
    function 
__construct($caption ''$value ''$name '')
    {
        
$this->setCaption($caption);
        
$this->setName($name);
        
$this->_value $value;
    }
    
    function 
setContent($content)
    {
        
$this->_content=$content;
        
    }
    
    function 
getContent($encode=false){
        
        return 
$encode htmlspecialchars($this->_contentENT_QUOTES) : $this->_content;
        
    }
    
    function 
render()
    {
        return 
$this->getContent();
    }
}
?>

La méthode fonction setContent($content) vas nous permettre d?insérer du contenu.

  • Utilisation :
$planchePhoto=new myElement();
$planchePhoto->setContent('vos photos
');

Maintenant que nous avons créer un nouvel élément de formulaire , ajoutons le à notre formulaire

$my_form->addElement($planchePhoto);

Voilà nous avons ajouté un élément à notre formulaire

blank

0TDMmoney 1.1

0APCal mis à jour à la version 2.0.3

0Joyeuse Année 2012 !

0Trois nouveaux thèmes gratuit pour Xoops

0XDTazer : Template GRATUIT pour Xoops

0APCal v2.0.2 Final - Calendrier avec carte pour XOOPS 2.4 / 2.5

0Un site de petites annonces pour les disques vinyles !

Flux RSS

Ajouter le flux RSS Xoops France a votre selectionImporter ce flux RSS en Javascript Importer ce flux RSS en PHP
Xoops France : support officiel du CMS Xoops

Rubrique Flux RSS Cms - Nb abonnés : 7
Adresse du flux RSS à copier/coller 

Xoops France