Ahora KumbiaPHP está en Slack!!

Si deseas contactar con nosotros y de forma rápida, estamos en Slack:

http://slack.kumbiaphp.com/

Problema con render_partial

edited noviembre 2007 in Desarrolladores
Como está implementado render_partial en este momento, no funciona cuando se quiere mostrar un partial de un controlador distinto del activo, debido al codigo siguiente:
function render_partial(){
$params = get_params(func_get_args());
if(isset($params['controller'])) {
$controller_name = uncamelize($params['controller']);
}elseif(preg_match("/^(.+)\/(.+)$/", $params[0], $data)) {
...
Fijense que si se pasa un parametro con nombre 'controller' para especificar que el partial es de otro controller, no se le asigna ningun valor a la variable $partial_view, y se lanza la excepcion que no se encontro la vista, esto se podría solucionar así:
...
if(isset($params['controller'])) {
$controller_name = uncamelize($params['controller']);
$partial_view = uncamelize($params['partial']);
//$partial_view = uncamelize($params['partial_view']);
}elseif(preg_match(
...

Comentarios

  • edited noviembre -1
    Lo probaste y te funciona?
    ya esto fue solucionado en la version 0.5...

    Gracias...
  • edited noviembre -1
    Lo probé y me funciona bien.
    El fragmento de codigo que puse arriba, es de la versión 5 que la bajé del svn ayer, si te fijas en el código verás lo que digo arriba
  • edited noviembre -1
    Perfecto realmente no hemos querido incorporarle nada nuevo a la versión 0.4x ya que seria muy recursivo cada vez que se agregue algo a la versión posterior retroceder a la versión anterior, todo lo nuevo viene para la versión 0.5...

    Éxito..
  • edited noviembre -1
    Al parecer no me he explicado bien, estoy probando la version 05, y no me funciona bien cuando trato de mostrar una vista parcial de otro controlador, revisé el código del render_partial, y me di cuenta que cuando se pasa un parámetro con nombre 'controller', no se le asigna un valor a la variable $partial_view, por lo que en este caso no muestra esa vista parcial, le añadí una línea de código, y funciona bien, al menos con las pruebas que hice.
  • edited noviembre -1
    Ah ok perfecto ahora si entiendo pensé que hablabas de la versión 0.4X que bueno que se halla encontrado un Bug y que este gracias a ti se pueda solucionar voy a revisar el problema y luego realizo los cambios que tu propones, Gracias...

    Éxitos...
  • edited noviembre -1
    Que raro, lo acabo de probar y funciona.

    Si te fijas bien:


    function render_partial(){
    $params = get_params(func_get_args());

    if(isset($params['controller'])) {
    $controller_name = uncamelize($params['controller']);
    }elseif(preg_match("/^(.+)\/(.+)$/", $params[0], $data)) {
    $controller_name = $data[1];
    $partial_view = $data[2];
    } else {
    $controller_name = Router::get_controller();
    }

    /** fijate aqui **/
    if(!isset($partial_view)) $partial_view = $params[0];

    $views_dir = Kumbia::$active_views_dir;
    $partial_file = join_path($views_dir, $controller_name, "_$partial_view.phtml");

    if(file_exists($partial_file)){
    if(is_array(Kumbia::$models)){
    foreach(Kumbia::$models as $model_name => $model){
    $$model_name = $model;
    }
    }

    if(is_subclass_of(Dispatcher::get_controller(), "ApplicationController")){
    foreach(Dispatcher::get_controller() as $var => $value) {
    $$var = $value;
    }
    }

    if(isset($params[1])) $$partial_view = $params[1];
    include $partial_file;
    } else {
    throw new kumbiaException('Kumbia no puede encontrar la vista parcial: "'.$partial_view.'"', 0);
    }
    }


    Fijate, la linea:
    if(!isset($partial_view)) $partial_view = $params[0];

    Cubre el caso del que hablas.

    De cualquier forma aun estan en fase de desarrollo, hay que agregar el soporte para los archivos .tpl

    Saludos.
  • edited noviembre -1
    El caso que tu dices, no es del que yo hablo,
    yo hablo del caso que se pase el parametro con nombre 'partial_view', y 'controller', si traceas el código, en ese caso, a $partial_view no se le asigna nada hasta llegar a la linea que tu mencionas, en ese linea, se le asigna el primer parámetro que perfectamente puede ser el nombre del controlador, y a la hora de incluir el fichero no lo encontraría
  • edited noviembre -1
    Te refieres a efectuar lo siguiente


    render_partial('controller: mi_controlador', 'partial_view: mi_partial');


    En ese caso tienes toda la razon, no esta contemplado.

    Ya lo resolvi.

    Ahora se puede hacer de las siguientes maneras:

    render_partial('mi_partial', $data);
    render_partial('partial_view: mi_partial', $data);
    render_partial('mi_controller/mi_partial', $data);
    render_partial('controller: mi_controller', 'mi_partial', $data);
    render_partial('controller: mi_controller', 'partial_view: mi_partial', $data);


    Esta para todos los gustos.

    Ya subi el cambio al svn.

    Pruebenlo a ver que tal funciona.

    Saludos.
Sign In or Register to comment.