IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Ext JS / Sencha Discussion :

Sauvegarde d'un formulaire avec Joomla


Sujet :

Ext JS / Sencha

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Février 2012
    Messages : 69
    Par défaut Sauvegarde d'un formulaire avec Joomla
    Bonjour,

    Je suis en train de développer une (application / module) sencha (en EXTJS 4.0) intégré dans Joomla.
    Jusqu'ici, même étant débutant en Joomla et novice sur Sencha, je suis parvenu à réaliser un arbre de dossiers et sous dossiers et l'affichage d'un formulaire affichant les données en fonction du noeud cliqué.


    Maintenant, mon problème est le suivant :

    Une fois mon formulaire sencha affiché avec les champs pré-remplis en fonction du noeud de l'arbre cliqué, je souhaiterais, après modification de ces champs, sauvegarder ces nouvelles données dans ma base de données.
    Précédemment, pour faire la sauvegarde d'un formulaire dans l'interface Joomla, l'action 'maClasse.save' était appelée.

    Pour essayer d'illustrer mon problème, voilà quelques "bouts de codes"

    Coté Sencha, la vue représentant mon formulaire
    entity_code, entity_id & entity_description sont les champs de mon formulaire que l'on retrouve dans Joomla et dans ma Base de données.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    Ext.define('module_contracts.view.Entity', 
    {
    	extend 		: 'Ext.form.Panel',
    	alias 		: 'widget.entityView',
    	id			: 'entityView',
    	html		: '<p>Step 2 of 3</p>',
     
    	items: 
    	[{
            xtype: 'fieldset',
            title: 'Détails de l\'entité',
            defaultType: 'textfield',
            defaults: 
            {
                width: 280
            },
            items: 
            [
             {
            	 fieldLabel: 'First Name',
                 emptyText: 'First Name',
                 name: 'entity_code'
             },
             {
                fieldLabel: 'Last Name',
                emptyText: 'Last Name',
                name: 'entity_id'
             },
             {
                fieldLabel: 'Company',
                name: 'entity_description'
             }
            ]
        }],
     
        buttons: 
        [
         {
            text: 'Save',                    
            handler: function () 
            {
            	var form = Ext.getCmp('contentPanel').layout.activeItem.getForm();
     
            	form.submit
            	({
            		url : 'index.php',
            		params : {task: "entity.save", option: "com_projidcontracts"},
                    waitMsg: 'Saving...',                
                    success: function () 
                    {               
                      	Ext.MessageBox.alert ('Message','Data has been saved');
                        form.reset();
                    },
                    failure: function () 
                    {                
                        Ext.MessageBox.alert ('Message','Saving data failed');
                    }
                });
            }
         },
         {
            text: 'Cancel',
    	    handler: function () 
    	    {
    	    	var form = Ext.getCmp('contentPanel').layout.activeItem.getForm();
     
    	        form.reset();
    	    }
         }
        ]
    });
    Coté Joomla, "l'ancienne vue" du formulaire était :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    class ProjidContractsViewEntity extends JView
    	{	
    		protected $form;
    		protected $item;
    		protected $param;
     
    	public function display($tpl = null) 
    	{
    		// get the Data
    		$form = $this->get('Form');
    		$item = $this->get('Item');
    		$param = $this->get('Param');
     
    		// Check for errors.
    		if (count($errors = $this->get('Errors'))) 
    		{
    			JError::raiseError(500, implode('<br />', $errors));
    			return false;
    		}
    		// Assign the Data
    		$this->form = $form;
    		$this->item = $item;
    		$this->params = $param;
     
     
    		// Set the toolbar
    		$this->addToolBar();
     
    		// Display the template
    		parent::display($tpl);
    		// Set the document
    		$this->setDocument();
    	}
    	/**
    	 * Setting the toolbar
    	 */
    	protected function addToolBar() 
    	{
    		JRequest::setVar('hidemainmenu', true);
    		$isNew = ($this->item->entity_id == 0);
    		JToolBarHelper::title($isNew ? JText::_('COM_PROJID_ENTITY_NEW') : JText::_('COM_PROJID_ENTITY_EDIT'));
    		JToolBarHelper::apply('entity.apply');
    		JToolBarHelper::save('entity.save');
    		JToolBarHelper::cancel('entity.cancel', $isNew ? 'JTOOLBAR_CANCEL' : 'JTOOLBAR_CLOSE');
    	}
     
    	protected function setDocument() 
    	{
    		$isNew = ($this->item->entity_id < 1);
    		$document = JFactory::getDocument();
    		$document->setTitle($isNew ? JText::_('COM_PROJID_ENTITY_CREATING') : JText::_('COM_PROJID_ENTITY_EDITING'));
    	}
    }

    On retrouve donc les actions entity.apply, entity.save, entity.cancel qui gèrent automatiquement les données du formulaire Joomla.

    Mes question :

    Comment faire aujourd'hui pour appeler cette action de sauvegarde Joomla depuis mon interface Sencha ?
    En résumé, la question principale est : Comment sauvegarder les données d'un formulaire sencha, dans une base de données en utiisant une "passerelle PHP" Joomla ?

    Merci beaucoup d'avance

  2. #2
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Février 2012
    Messages : 69
    Par défaut
    Finalement, voilà la solution à mon problème

    Pour ce qui est du formulaire Sencha, sur mon bouton de sauvegarde, j'appele mon index.php avec les paramètres adéquats de façon à me diriger dans le controller Joomla correspondant.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    buttons: 
        [
         {
            text: 'Save',                    
            handler: function () 
            {
            	var form = Ext.getCmp('contentPanel').layout.activeItem.getForm();
     
            	form.submit
            	({
            		url : 'index.php',
            		params : 
            		{
            			task: "entity.saveForm",
            			option: "com_projidcontracts"
            		},
                    waitMsg: 'Saving...',                
                    success: function () 
                    {               
                      	Ext.MessageBox.alert ('Message','Data has been saved');
                    },
                    failure: function () 
                    {                
                        Ext.MessageBox.alert ('Message','Saving data failed');
                    }
                });
            }
         }
        ]
    Et coté Joomla, dans mon controlleur, je me suis rendu compte qu'il suffisait d'appeler la fonction save du model correspondant et le binding se fait automatiquement
    Le paramètre à passer au save doit contenir un tableau des données de la table à binder. (par défaut, elles sont dans $_REQUEST ou dans $_POST)

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public function saveForm()
    {
    	$mainframe = &JFactory::getApplication();
    	$model = self::getModel();
    	$model->save($_REQUEST);		
    	$mainframe->close();
    }

    Et voilà

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 27/01/2012, 15h13
  2. Sauvegarde données formulaire avec Session ?
    Par jordan49 dans le forum Langage
    Réponses: 5
    Dernier message: 01/10/2009, 11h54
  3. Réponses: 10
    Dernier message: 10/06/2004, 16h20
  4. Sauvegarde possible de PostgreSQL avec Netbackup ?
    Par gueeyom dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 18/05/2004, 10h56
  5. Gestion de formulaire avec xml et sans serveur ?
    Par meliane dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 05/05/2004, 19h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo