Buenas tardes compañeros;
Tengo un pequeño problema que no consigo solucionar. Estoy intentando redirigir un curso a una página externa de Moodle, es decir que al acceder al curso:
midominio.com/moodle/view.php?id=32
de forma automática me rediriga a midominio.com/formulario.php
He intentado varias opciones modificando el código de view.php y externservercourse.php pero de momento sin éxito. Si tenéis alguna idea de cómo poder redirigirlo os lo agradeceré.
Gracias de antemano
Hola Josep,
parece que deberías tocar el view.php, aunque si sólo deseas que lo haga con el course id = 32, tendrías que de alguna manera discriminarlo.
$id = optional_param('id', 0, PARAM_INT);
De esta manera podrías recuperarlo simplemente mediante el envío GET
Después, puedes utilizar las funciones Moodle para redirigir la navegación
$url = 'www.myweb.com';
$mymessage = 'Estás siendo redirigido... no sabemos muy bien por qué :)'
$time = 10 // integer in seconds
redirect($url, $mymessage e', $time);
Espero que pueda serte útil.
Saludos!!
Hola Paco,
Millones de gracias por tu respuesta, no obstante, no logro encontrar la fórmula para redirigir solamente el curso con una ID específica.
¿Alguna idea? De momento todo lo que he probado modificando el view.php no me ha dado resultado.
Gracias nuevamente por toda tu ayuda.
A ver si te podemos ayudar Josep
la variable id del Curso se debe encontrar en el propio view.php, prueba pej. en este mismo archivo con un
var_dump($course->id);
Obtendrás algo parecido a string(1) "7" (este 7 es, en este caso, el id del curso que también se encuentra en la url)
Con estos datos hacemos la condición de manera sencilla
if ($course->id == 7 ) { redirecciono a la página que deseo; }
Saludos!!
Buenos días Paco
Gracias nuevamente por el esfuerzo. He hecho lo que indicas y he probado alguna otra función, parece que la reconoce pero no redirige a la página externa, se queda la página del curso al que hago referencia completamente en blanco.
Lo reconoce pero no redirige a la página externa:
if ($course->id == 8 ) { http://moodle.midominio.com/course/view.php?id=14; }
Lo reconoce pero no funciona:
}
if ($course->id == 8) {
redirect(http://moodle.midominio.com/course/view.php?id=14);
} else if (!empty($return)) {
redirect($CFG->wwwroot . $return);
}
¿Alguna idea sobre qué debo hacer incorrecto?
Gracias nuevamente.
Buenas noches,
He conseguido solucionar la redirección en el view.php
No obstante, al activar la edición de cada curso me redirecciona también a la que he creado en la ID del curso.
¿Hay algo raro en el código? No lo localizo...
Gracias de antemano
// Redireccion del Curso a Otro Directorio
if( isset($_GET['id']) )
{
$id = (int) $_GET['id'];
if( $id == 32 )
{
redirect("http://midominio.com/moodle/sec2/externo.php");
exit;
}
}
else
{
redirect("http://midominio.com/moodle/sec2/externo.php");
exit;
}
Hola Josep,
nos es algo complicado ver que puede estar pasando al no tener todo el código, aunque como opción si te redirige y no persigues eso, cuando estás en modo edición trata de utilizar esta variable para impedirlo.
Trato de explicarme
if (!$PAGE->user_is_editing()) { // si no se está en modo edición del Curso
// opera la lógica del redirect
}
A ver si ahora,
Saludos!!
Hola Paco,
He probado lo que indicas insertándolo en el código, pero parece ser que evita la visualización de todos los cursos.
Adjunto el código de view.php a ver si así es más sencillo de discriminar la opción o lo ves mejor, yo no veo nada extraño.
Muchísimas gracias por tu ayuda.
¡Un saludo!
Hola,
a ver si conseguimos resolverlo.
En view.php aproximadamente por la línea 40
...
$course = $DB->get_record('course', $params, '*', MUST_EXIST);
$urlparams = array('id' => $course->id);
if ($id == 8 ){ // este es el código para redireccionar si el curso es id=8
$url = 'www.myweb.com';
$mymessage = 'Estás siendo redirigido... no sabemos muy bien por qué :)';
$time = 10; // integer in seconds (a los 10 segundos se producirá la redirección)
redirect($url, $mymessage, $time);
} // aquí termina el script para la redirección
// Sectionid should get priority over section number
if ($sectionid) {
$section = $DB->get_field('course_sections', 'section', array('id' => $sectionid, 'course' => $course->id), MUST_EXIST);
}
if ($section) {
$urlparams['section'] = $section;
}
$PAGE->set_url('/course/view.php', $urlparams); // Defined here to avoid notices on errors etc
...
Lo hemos probado y parece que funciona
Saludos!!
Funciona perfectísimamente.
Millones de gracias Paco.
Un saludo y un abrazo,
Josep
Buenas tardes Paco, inclui lo que explicas en la parte del codigo del View.php pero a pesar de que redirecciona no reconoce cuando esta en modo de edicion y me genera un conflicto PHP que no me deja cargar la vista del curso.
Este es el codigo:
$course = $DB->get_record('course', $params, '*', MUST_EXIST); $urlparams = array('id' => $course->id); if ($id == 26 ){ // este es el código para redireccionar si el curso es id=8 //if (!$PAGE->user_is_editing()) { // si no se está en modo edición del Curso // opera la lógica del redirect $url = 'http://www.idencorp.net/lms/mod/page/view.php?id=164'; $mymessage = 'Estás siendo redirigido...'; $time = 10; // integer in seconds (a los 10 segundos se producirá la redirección) redirect($url, $mymessage, $time); } // aquí termina el script para la redirección } // Sectionid should get priority over section number if ($sectionid) { $section = $DB->get_field('course_sections', 'section', array('id' => $sectionid, 'course' => $course->id), MUST_EXIST); } if ($section) { $urlparams['section'] = $section; }
Lo que esta en negrilla fue lo que inclui para la redireccion, pero como puedes ver tengo comentada la parte que valida si esta en modo edicion, pero no pude lograr que funcionara. Probe con el IF por fuera y por dentro, se supone la logica es: primero valida pagina y luego si esta en modo de edicion. Pero en cualquiera de los dos casos no funciona. Me gustaria pudises ayudarme.
Hola Oscar
El conflicto PHP debe referirse a que hay algún error en el código.
Revisa por favor este, a priori y por lo que nos muestras, un if está comentado aunque no parece que esté comentado el cierre de su propia llave
} // aquí termina el script para la redirección
Tal vez eso te genere el error
Saludos!!
Buenas tardes Paco,
Efectivamente no tengo comentada la linea de la llave porque era a modo de ejemplo que quería mostrarte. En el codigo que tengo actualmente no existe ni el IF comentando, ni la llave. Solo es la dirección ya que así me funcionó. Suponiendo que el IF no esta comentado en la linea donde se validasi esta en modo de edición el curso o no, es ahí cuando ya no funciona. Me gustaría por favor me pudieses explicar que tengo de malo en el código, solo quita el comentario del IF, no entiendo porque no valida si el curso esta en modo de edición. Este proceso también lo intente con un ELSE pero no funciona, es como si no la función que se evalúa no funcionase.
Agradezco tu ayuda.
Hola Oscar
Trata de introducir el código en el formato de curso en concreto, pej, en el topics en course/format/topics/format.php
Ahí, aproximadamente líneas 50 y ss, puedes introducir tu código
if ($id == 26 ){ // este es el código para redireccionar si el curso es id=26
if (!$PAGE->user_is_editing()) { // si no se está en modo edición del Curso
$url = 'http://myweb.com';
$mymessage = 'Estás siendo redirigido...';
$time = 1; // integer in seconds (a los 10 segundos se producirá la redirección)
redirect($url, $mymessage, $time);
}
} // aquí termina el script para la redirección
Saludos!!
Gracias franco por tu ayuda, me fue muy útil la respuesta. Aprendí bastante con el tema.
Feliz tarde.
Hola, si, el redireccionamiento funciona y te lleva a la url que necesites, pero de lo que yo trato es de aplicar la redirección SOLO al salir del curso. Y lo tengo incrustado en joomla con Joomdle
Es decir, que accedo al curso, de forma inmediata me lleva a la url indicada, pero eso me causa dos problemas.
1.- No me deja acceder al curso (Lo tengo en una ventana emergente para la visualización), ya que nada mas acceder al id del curso me salta la redirección.
2.- Al estar incrustado en joomla con joomdle, la redirección me incrusta la url redirigida dentro de joomla, por lo que tengo repetido la vista del joomla.
Si me indican como proceder estare muy agradecido.
Saludos