2012-09-21 83 views
6

Tengo un formulario en la parte inferior de una página larga, si un usuario rellena el formulario pero no valida la página se vuelve a cargar en la forma típica codeigniter:Codeigniter PHP - cargando una vista en un punto de ancla

$this->load->view('template',$data);

sin embargo debido a la forma es camino hacia abajo en la parte inferior de la página necesito la página se cargue ahí abajo como se hace con las anclas HTML. ¿Alguien sabe cómo hacer esto en codeigniter?

No puedo usar la función de CodeIgniter

redirect();

porque pierde el objeto y los errores de validación se han ido. Otros marcos que he usado como Yii puede llamar a la función de redirección como:

$this->redirect();

que resuelve el problema, ya que se mantiene el objeto. He intentado usar:

$this->index()

dentro del controlador que funciona bien como una redirección, pero los errores de validación están en otro método que es donde la página actual se carga desde:

$this->item($labs)

pero cuando lo uso, se atasca en un bucle

¿Alguna idea? He visto mucho esta pregunta en la red pero no hay respuestas claras. Estoy investigando usando codeigniter "flash data" pero creo que es un poco exagerado.

aplausos.

+0

@ "overkill" ¿qué te hace pensar eso? OMI es una muy buena característica, que creo que está hecha exactamente para cosas como estas. – Prasanth

+0

¿Estás abierto a usar javascript? –

+0

@goldenparrot tal vez fui un poco exagerado con esa afirmación. No tengo nada en contra de los datos flash, pero pensé que podría hacerse de otra manera. –

Respuesta

5

No puedo responder personalmente por esto, pero de acuerdo con this thread si agrega el ancla al formulario action, funcionará.

CodeIgniter ayudante:

<?php echo form_open('controller/function#anchor'); ?> 

o vainilla HTML:

<form method='post' action='controller/function#anchor'> 

Si se va libre al uso de Javascript, que fácilmente podría detectar una variable $validation_failed y apropiadamente desplazarse. O, mejor aún, usa AJAX.

Otra opción es poner el formulario cerca de la parte superior de la página?

+0

¡Bonito encontrar jordania, que funcionó! Ni siquiera intenté eso porque estaba seguro de que no funcionaría. Codeigniter debe tenerlo incorporado en el controlador de ruta para dividir cualquier cadena de URL con un hash "#". Gracias amigo! –

+0

@JamesBillings feliz de ayudar :) –

0

Ok, por lo que entiendo su problema, no es mucho relacionado con el back-end (codeigniter). Desea que el formulario en la parte inferior de la página sea 'lo que los usuarios ven en la carga de la página' (ya que menciona anclas).

Ahora, lo que puede hacer es, se puede establecer delimitadores para los mensajes de error de validación usando:

echo validation_errors('<div id="bottom_form_error">', '</div>'); 

Usando jQuery ScrollTo, hacer:

$(function() { $('#bottom_form_error').ScrollTo(); }); 

Y, el usuario se desplazará a los errores en la parte inferior de la página. No olvides incluir jQuery también.

Anchor hash fragment click es diferente - se desplaza a velocidad.

Espero que sea eso lo que quería.


P.S. Estoy ignorando lo que dijo debajo de esta línea:

¿Alguien sabe cómo hacer esto en codeigniter?

ya que sentí que no es realmente relevante para la pregunta.

+0

El comentario está relacionado a la validación. Pero, creo que Aziz realmente preguntó si podía usar javascript para desplazarse. Incluso si Aziz no lo hizo, creo que es una pregunta válida: ¿el OP desea usar javascript para desplazarse a los errores de validación, si el formulario está en la parte inferior? Si es así, entonces aquí hay una manera de hacerlo. – Prasanth

+0

Gracias pero lo tengo todo cubierto con JS. ¿Y si el usuario no tenía JS esa era la pregunta? En lo que se trata es de codeigniter recargar la página en el lugar correcto que solo se logra con una etiqueta de anclaje si JS está deshabilitado. ¡Gracias por tu ayuda! –

Cuestiones relacionadas