Foros del Web » Programando para Internet » PHP » CodeIgniter »

[SOLUCIONADO] Portar array a un helper no retorna datos

Estas en el tema de Portar array a un helper no retorna datos en el foro de CodeIgniter en Foros del Web. He intentado pasar un array a un helper, pero despues no consigo acceder al array controller.php Código PHP: $this -> load -> library ( 'pagination' ...
  #1 (permalink)  
Antiguo 27/05/2015, 11:28
 
Fecha de Ingreso: enero-2008
Mensajes: 580
Antigüedad: 16 años, 3 meses
Puntos: 9
Portar array a un helper no retorna datos

He intentado pasar un array a un helper, pero despues no consigo acceder al array

controller.php
Código PHP:
$this->load->library('pagination');
$this->load->helper('pagination');
echo 
$config['first_link']; #Message: Undefined variable: config 
pagination.php
Código PHP:
echo 'ESTO SI SE MUESTRA';
    return 
$config['use_page_numbers'] = true# Salta por unidad el vez de por $limite
    
return $config['base_url'] = base_url('blog/home');
    return 
$config['first_url'] = base_url('blog/home/1');
    return 
$config['total_rows'] = 99;#$this->db->get('post')->num_rows();
    
return $config['per_page'] = $limite;
    return 
$config['num_links'] = 5#Páginas adyacentes visibles

    
return $config['first_link'] = 'Primero';
    return 
$config['last_link'] = 'Ultimo';
    return 
$config['next_link'] = 'Siguiente';
    return 
$config['prev_link'] = 'Anterior';
    
    return 
$config['full_tag_open'] = '<ul class="pager">';
    return 
$config['full_tag_close'] = '</ul>';
    
    return 
$config['cur_tag_open'] = '<li><span>';
    return 
$config['cur_tag_close'] = '</span></li>';
    
    return 
$config['first_tag_open'] = '<li>';
    return 
$config['first_tag_close'] = '</li>';
    return 
$config['last_tag_open'] = '<li>';
    return 
$config['last_tag_close'] = '</li>';
    
    return 
$config['num_tag_open'] = '<li>';
    return 
$config['num_tag_close'] = '</li>';
    
    return 
$config['next_tag_open'] = '<li class="next">';
    return 
$config['next_tag_close'] = '</li>';
    return 
$config['prev_tag_open'] = '<li class="previous">';
    return 
$config['prev_tag_close'] = '</li>'
  #2 (permalink)  
Antiguo 27/05/2015, 12:48
Avatar de jamie_88  
Fecha de Ingreso: abril-2011
Ubicación: Lima
Mensajes: 161
Antigüedad: 13 años
Puntos: 28
Respuesta: Portar array a un helper no retorna datos

Hola, no he entendido muy bien que estas haciendo, me parece un archivo de configuración, pero no entiendo todos esos return.

si quieres crear tu propio helper, primero tienes que crear un archivo helper dentro de la carpeta helpers, del tipo prueba_helper.php. Luego, dentro del archivo, controlas que no exista otra función con el mismo nombre y cuando escribes la función le dices que recibirá un parámetro (en tu caso un array). Después, dentro de tu función implementas toda la logica necesaria. Por ultimo, devuelves lo deseado con un return.

ejemplo
Código PHP:
Ver original
  1. //applications/helpers/prueba_helper.php
  2. if  (!function_exists('funcion'))  {
  3.     function funcion ($array)
  4.     {
  5.         ... //logica
  6.         return $resultadoFinal;
  7.     }
  8.  
  9. }

en tu mismo archivo prueba_helper, podrás agregar mas funciones y bastará con que cargues una sola vez el helper en el controlador, o lo puedes cargar automáticamente para todo el proyecto desde el archivo autoload.
  #3 (permalink)  
Antiguo 27/05/2015, 13:12
 
Fecha de Ingreso: enero-2008
Mensajes: 580
Antigüedad: 16 años, 3 meses
Puntos: 9
Respuesta: Portar array a un helper no retorna datos

Gracias por responderme jamie_88

Es el segundo helper que creo, mi intención es almacenar en él el array de configuración de la libreria Pagination, y asi alijerar los controladores mediante un helper que puede ser aprobechado con la misma configuración mas adelante si fuese necesario


mi_controlador.php
Código PHP:
        $this->load->library('pagination');
        
$this->load->helper(['pagination']);
        
pagination($limite);
        echo 
$config['first_link']; #PERO NO CONSIGO RECUPERAR LOS DATOS 
pagination_helper.php
Código PHP:
<?php

function pagination($limite)
{
    return 
$config['use_page_numbers'] = true# Salta por unidad el vez de por $limite
    
return $config['base_url'] = base_url('blog/home');
    return 
$config['first_url'] = base_url('blog/home/1');
    return 
$config['total_rows'] = 99;#$this->db->get('post')->num_rows();
    
return $config['per_page'] = $limite;
    return 
$config['num_links'] = 5#Páginas adyacentes visibles

    
return $config['first_link'] = 'Primero';
    return 
$config['last_link'] = 'Ultimo';
    return 
$config['next_link'] = 'Siguiente';
    return 
$config['prev_link'] = 'Anterior';

    return 
$config['full_tag_open'] = '<ul class="pager">';
    return 
$config['full_tag_close'] = '</ul>';

    return 
$config['cur_tag_open'] = '<li><span>';
    return 
$config['cur_tag_close'] = '</span></li>';

    return 
$config['num_tag_open'] = '<li>';
    return 
$config['num_tag_close'] = '</li>';

    return 
$config['first_tag_open'] = '<li>';
    return 
$config['first_tag_close'] = '</li>';
    return 
$config['last_tag_open'] = '<li>';
    return 
$config['last_tag_close'] = '</li>';

    return 
$config['next_tag_open'] = '<li class="next">';
    return 
$config['next_tag_close'] = '</li>';
    return 
$config['prev_tag_open'] = '<li class="previous">';
    return 
$config['prev_tag_close'] = '</li>';
}

Última edición por quico5; 27/05/2015 a las 13:19
  #4 (permalink)  
Antiguo 27/05/2015, 15:58
Avatar de jamie_88  
Fecha de Ingreso: abril-2011
Ubicación: Lima
Mensajes: 161
Antigüedad: 13 años
Puntos: 28
Respuesta: Portar array a un helper no retorna datos

veamos, lo único que devuelve tu helper es true? Tu función siempre se detendrá al encontrar el primer return.
Lo que podrías hacer es algo de este tipo:

Código PHP:
<?php
function pagination($limite)
{
    
$conf = array(
        
'k-1' => 'v-1',
        
'k-2' => 'v-2',
        ...
    );
    return 
$conf;
}
Ahora, para este tipo de casos en CI puedes crear un archivo en la carpeta application/config, con nombre pagination (el mismo nombre de la librería si no erro) y la librería cargará en automático la configuración. Si quieres cambiar uno o más parámetros puedes usar el método inizialize (de la librería cargada), donde puedes pasar los parámetros deseados. Debería bastar pasar los parámetros distintos (o faltantes) respecto a los que se encuentran en el archivo de config, si ese no fuera el caso, deberías poder guardar en una variable el array contenido en el archivo con los parametros de default (config/pagination), así modificas la variable y usas el inizialize.


Saludos
  #5 (permalink)  
Antiguo 27/05/2015, 17:43
 
Fecha de Ingreso: enero-2008
Mensajes: 580
Antigüedad: 16 años, 3 meses
Puntos: 9
Respuesta: Portar array a un helper no retorna datos

Según tus recomendaciones:

application/config/pagination.php
Código PHP:
<?php defined('BASEPATH') OR exit('No direct script access allowed');

function 
pagination($limite)
{
    
$config = [
        
'use_page_numbers' => true# Salta por unidad el vez de por $limite
        
        
'base_url' => base_url('blog/home'),
        
'first_url' => base_url('blog/home/1'),
        
'total_rows' => $this->db->get('post')->num_rows(),
        
'per_page' => $limite,
        
'num_links' => 5#Páginas adyacentes visibles

        
'first_link' => 'Primero',
        
'last_link' => 'Ultimo',
        
'next_link' => 'Siguiente',
        
'prev_link' => 'Anterior',

        
'full_tag_open' => '<ul class="pager">',
        
'full_tag_close' => '</ul>',

        
'cur_tag_open' => '<li><span>',
        
'cur_tag_close' => '</span></li>',

        
'num_tag_open' => '<li>',
        
'num_tag_close' => '</li>',

        
'first_tag_open' => '<li>',
        
'first_tag_close' => '</li>',
        
'last_tag_open' => '<li>',
        
'last_tag_close' => '</li>',
        
        
'next_tag_open' => '<li class="next">',
        
'next_tag_close' => '</li>',
        
'prev_tag_open' => '<li class="previous">',
        
'prev_tag_close' => '</li>',

        
'display_pages' => false#Oculta las páginas
        
'first_link' => false#Oculta primero
        
'last_link' => false#Oculta ultimo
    
];

    return 
$config;
}
mi_controlador.php
Código PHP:
    public function home($pagina ''){
        
$data $this->data;
        
$data['imagen'] = base_url('clean_blog/img/'.__FUNCTION__.'-bg.jpg');
        
$limite 2;
        
$inicio $pagina ? --$pagina*$limite ;

        
$this->load->library('pagination');

        
$this->pagination->initialize($config);
        
        
$this->db->order_by('id','desc');
        if (
$inicio !== false && $limite !== false$this->db->limit($limite$inicio);
        
#$data['filas'] = $this->db->get('post',$limite,$inicio)->result_array();
        
$data['filas'] = $this->db->get('post',$limite,$inicio)->result();

        
views('blog',['head','nav','header',__FUNCTION__,'footer'],$data);
    } 
Código:
A PHP Error was encountered

Severity: Notice

Message: Undefined variable: config

Filename: controllers/blog.php

Line Number: 35

Backtrace:

File: C:\xampp\htdocs\anhida\application\controllers\blog.php
Line: 35
Function: _error_handler

File: C:\xampp\htdocs\anhida\index.php
Line: 292
Function: require_once
  #6 (permalink)  
Antiguo 27/05/2015, 17:54
 
Fecha de Ingreso: enero-2008
Mensajes: 580
Antigüedad: 16 años, 3 meses
Puntos: 9
Respuesta: Portar array a un helper no retorna datos

Uhmm, ahora no necesito:
#$this->pagination->initialize($config);

Asi no me da error por algo que no esta cargando

Muchas gracias Jamie_88 por tu gran ayuda
  #7 (permalink)  
Antiguo 27/05/2015, 18:11
 
Fecha de Ingreso: enero-2008
Mensajes: 580
Antigüedad: 16 años, 3 meses
Puntos: 9
Respuesta: Portar array a un helper no retorna datos

Oh vaya...

Con el config en application/system/pagination.php resulta que ahora no veo los botones de paginación, si traigo el array al controlador vuelve a verse

¿Cómo lo agreglo? Gracias
  #8 (permalink)  
Antiguo 27/05/2015, 18:39
 
Fecha de Ingreso: enero-2008
Mensajes: 580
Antigüedad: 16 años, 3 meses
Puntos: 9
Respuesta: Portar array a un helper no retorna datos

Solución final...

Me faltaban estas lineas asi y poner la consulta fuera del array para que funcione:
Código PHP:
        $rows $this->db->get('post')->num_rows();
        
$this->pagination->initialize(pagination($limite,$rows)); 

Etiquetas: helper, retorna
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:12.