2010-10-14 3 views
1

J'ai un module utilisateur où les utilisateurs peuvent définir leur message d'état (tweet) à partir de la page de profil.Cakephp: Enregistrement d'un formulaire via Ajax

alt text

Lorsque quelqu'un clique sur Partager il devrait aller à une action et enregistrer le message d'état. Je ne suis pas sûr de savoir comment faire cela dans CakePHP.

Je voudrais wnna utiliser jQuery. Si vous pouvez me diriger vers le bon document. il serait d'une grande aide

Je suis nouveau à Ajax.

Répondre

2

CakePHP a un Js Helper qui utilise la bibliothèque JQuery par défaut. La méthode que vous recherchez est la méthode submit().

Un exemple d'utilisation serait:

<?php echo $form->create('Tweet'); ?> 
    <!-- form elements --> 
    <?php echo $this->Js->submit('Share', 
           array(
            'update' => '#content' 
           ) 
          ); ?> 

Le contenu de l'élément #content serait changé avec le code HTML renvoyé par le contrôleur. Dans l'action où le formulaire ajax sera soumis, add() dans l'exemple ci-dessus, vous pouvez changer la disposition à ajax chaque fois qu'une requête ajax est détectée. Vous pouvez le faire en utilisant la méthode isAjax() et l'attribut $layout du contrôleur.

+0

Je déteste détourner une discussion, mais j'ai des problèmes avec l'assistant Js. (Ramon, vous avez essayé de répondre à ma question la semaine dernière http://stackoverflow.com/questions/3901906/how-to-use-js-submit-in-cakephp). À quoi fait référence le "Partage" dans le tableau d'options submit()? Est-ce que cela a fonctionné pour vous Harsha? –

+0

@Logic Artist: Merci d'avoir signalé cela. J'ai corrigé l'extrait. –

+0

@logic non je ne suis pas capable de le faire fonctionner. –

1

Les formulaires sont soumis via ajax de la même manière qu'ils pourraient l'être sans CakePHP. Si c'est moi, voici ce que je ferais ...

À mon avis:

<?php echo $this->Html->script( 
    array('vendors/jquery.min', 'customjs') 
    , array('inline' => false, 'once' => true) 
) ?> 

<?php echo $this->Form->create(...) ?> 
    ... your form content here ... 
<?php echo $this->Form->end('Share') ?> 

Dans une coutume fichier (/js/custom.js) Javascript:

$(function() { 
    $('#your-form').submit(function() { 
    // make your ajax call 
    $.post(...); 

    return false; // prevent a new request 
    }); 
}); 

Enfin, créez un nouveau contrôleur et/ou une action pour gérer l'URL demandée par votre appel ajax. Ce ne sont que les faits saillants, bien sûr, mais ils illustrent la distribution clé des préoccupations:

  1. Inclure les fichiers JS nécessaires afin que votre vue a accès à eux.
  2. Fixez la forme d'effectuer son soumettre régulièrement programmé soumettre gestionnaire d'événements sur document.ready (non-ligne)
  3. Prévenir après l'appel ajax en retournant faux du gestionnaire d'événements.

Espérons que ça aide.

+0

Merci Rob. Je vais essayer et je reviens à vous: D –