El botón Cakephp no dirigirá a la vista, ¿función "automágica" para hacer esto?

Tengo una vista que quiero tener 3 botones; Guardar, Guardar y Siguiente, Guardar y Anterior. El botón Guardar es el botón de tipo de envío estándar y funciona. Los otros dos botones aparecen como botones, pero no realizan ninguna acción. Escribí un archivo llamado save_move_next.js para llamar a una acción, le di al botón una identificación y puse todas las cosas apropiadas donde deberían estar, pero no hace nada.

¿Hay alguna forma preconstruida de hacer eso? Básicamente, el usuario hace clic en el botón, la acción en el controlador toma el control, guarda la información y luego pasa al siguiente elemento.

¿Ponerlo encima del formulario solucionaría el problema? O cambiándolo para que se vea así:

$this->Form->submit('Button text', array(some controller, action);
$this->Form->submit('Button text', array(some controller, action);
$this->Form->submit('Button text', array(some controller, action);
$this->Form->end();

Parte de la vista:

<?php echo $this->Form->end(__('Submit', true));?>
<?php echo $this->Form->button('Save and next drug', array('type'=>'button','id'=>'save_move_next')); ?>

Función JS:

$(document).ready(function(){

    $("#save_move_next").click(function(){
        var drug_id = $(this).val();
        if(drug_id.length > 0)
        {
            window.location = "<?php echo Router::url(array('controller' => 'french_translations', 'action' => 'next'), true) ?>/" + drug_id;
        }
    });

});

En Head of default.ctp:

echo $javascript->link('save_move_next');

preguntado el 03 de mayo de 12 a las 15:05

¿Qué versión de CakePHP estás ejecutando? -

Lo que está tratando de lograr no es posible mediante el uso de un submit botón de tipo. Por definiciones HTML, un botón de envío envía los datos del formulario al usuario especificado. action atributo de la forma, sin excepciones! Lo que describe requiere botones 'regulares' (no enviar) con eventos de clic vinculados a ellos, como sugiere gvLearner en su respuesta. -

2 Respuestas

Cakephp no puede identificar la identificación del botón Enviar como tal. Lo que puede hacer es hacer los otros dos botones como llamadas ajax y cambiar la URL a un método diferente y escribir su lógica allí.

    <a href="#" id="saveNextBtn">Save & Next</a>


    jQuery("#saveNextBtn").bind('submit', function(event) {
            jQuery.ajax({
                beforeSend : function(XMLHttpRequest) {
                    jQuery("#sending").show();
                },
                data : jQuery("#saveNextBtn").closest("form").serialize(),
                dataType : "html",
                success : function(data) {
                    jQuery("#success").html(data);
                    jQuery("#sending").hide();
                },
                type : "post",
                url : "\/AppName\/ControllerName\/Method"
            });
            return false;
        });

ACTUALIZACIÓN

Di esta solución basándome en la suposición de que estás usando CakePHP 2.1. Si está utilizando CakePHP1.3, puede obtener los detalles del botón desde los parámetros del formulario.

Puede usar el siguiente código para lograrlo.

    echo $this->Form->submit('Save', array('name'=>'save');
    echo $this->Form->submit('Save & Next', array('name'=>'savenext');

    if (isset($this->params['form']['submit']) && $this->params['form']['submit'] == "Save") {
      // Save button Clicked
    }

contestado el 04 de mayo de 12 a las 03:05

¿Tendré que agregar ayudantes y/o componentes adicionales? ¿Todo esto entraría en la vista o en un archivo separado como js? No estoy muy familiarizado con el trabajo con ajax. - Jonathan

Además, ¿solo va a mostrar un enlace? Si es así, ya puedo hacer un enlace que funcione. - Jonathan

Acabo de ver tu actualización, ¿eso va todo a la vista? Todavía tengo problemas con esto, lol. - Jonathan

Me di cuenta de esto con la ayuda de la respuesta de Saanch. Si se está utilizando cakephp 1.3, puede determinar en qué botón se hizo clic y simplemente redirigir a la vista deseada. gvLearner me indicó la dirección correcta, pero tuvo algunos problemas con el código que proporcionó.

Botones a la vista:

echo $form->submit('Save', array('name'=>'save');
echo $form->submit('Save & Next', array('name'=>'saveNext');

Código para determinar el botón en el que se hizo clic y redirigir:

if (isset($this->params['form']['name-you-gave-the-button-in-the-view']) && $this->params['form']['name-you-gave-the-button-in-the-view'] == 'name-you-gave-the-button-in-the-view') {
  // The button was clicked and you can redirect or whatever here.
}

Respondido el 13 de junio de 16 a las 16:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.