CodeIgniter: ¿Crear nuevo ayudante?


147

Necesito hacer un bucle de muchas matrices de diferentes formas y mostrarlas en una página. Las matrices son generadas por una clase de módulo. Sé que es mejor no incluir funciones en 'vistas' y quiero saber dónde insertar el archivo de funciones.

Sé que puedo 'ampliar' los ayudantes, pero no quiero extender un ayudante. Quiero crear un ayudante con mis funciones de bucle ... Vamos a llamarlo loops_helper.php

  0

¿Por qué no puedes pasar esas matrices a la vista? 29 abr. 092009-04-29 22:07:44

  0

Puedo hacerlo, pero eso no incluye el punto de separar la vista de las funciones .. 29 abr. 092009-04-29 22:37:32

322

Un CodeIgniter helper es un archivo PHP con múltiples funciones. No es una clase

Cree un archivo y coloque el siguiente código en él.

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 

if (! function_exists('test_method')) 
{ 
    function test_method($var = '') 
    { 
     return $var; 
    } 
} 

Guardar este a application/helpers/. Lo llamaremos "new_helper.php"

La primera línea existe para asegurarse de que el archivo no se puede incluir y ejecutar desde fuera del ámbito CodeIgniter. Todo después de esto se explica por sí mismo.

Utilizando el ayudante


Esto puede ser en su controlador, modelo o vista (no es preferible)

$this->load->helper('new_helper'); 

echo test_method('Hello World'); 

Si utiliza este helper en una gran cantidad de ubicaciones que puede hacer que se cargue automáticamente al agregarlo al archivo de configuración de autocarga, por ejemplo, <your-web-app>\application\config\autoload.php.

$autoload['helper'] = array('new_helper'); 

-Mathew

+21

Siempre use que el nombre del archivo auxiliar se adjunte con "_helper", de lo contrario obtendrá un error. Así que "helper_name" no funcionará, pero nombra tu archivo "name_helper". 11 dic. 122012-12-11 10:06:46

+3

A partir de CI2, también necesitará obtener la instancia de CI para usar un helper dentro de un modelo: $ ci = get_instance(); $ ci-> load-> helper ('name_helper'); 24 abr. 132013-04-24 09:36:42

+3

Solo una nota, El ayudante no * tiene * para ser una función. Puede ser una clase también. Por ejemplo, consulte la estrategia para crear "Widgets" en [EllisLab's Forum] (http://ellislab.com/forums/viewthread/109584/P70). Entonces puedes usar esa clase en cualquier lugar ... también Techincally, puedes cargar tu ayuda en la instancia de CI si deseas obtener la instancia y luego configurar '$ this' como una propiedad de ella ... Todo si quieres por supuesto. 26 abr. 132013-04-26 15:24:34

+2

¿Cuál es el uso de la comprobación if function_exists? ¿Es un encendedor de código, es una buena práctica general de php? Por que lo necesitarias? 14 abr. 142014-04-14 09:33:42

+1

@skrln existe la posibilidad de que tengas un asistente autocargado (llamémoslo 'cool_helper') y, si lo olvidas y llamas manualmente' $ this-> load-> helper ('cool_helper') 'después de que fuera automático -cargado, obtendrá un error de PHP "ya definido" o algo así. Esto evita cargar el mismo código dos veces (es algo así como la función PHP 'include_once()' pero para los ayudantes de CodeIgniter, para evitar problemas). Básicamente, traduciendo un poco: ** si la función no existe, significa que el asistente no se cargó antes. Vamos a definirlo. ** 15 may. 142014-05-15 16:03:12


8

Para crear un nuevo ayudante puede seguir el instructions from The Pixel Developer, pero mi consejo es no crear un ayudante sólo por la lógica requerida por una parte en particular de una aplicación en particular. En su lugar, use esa lógica en el controlador para establecer las matrices en sus valores finales deseados. Una vez que lo tienes, pasas a la vista usando el Template Parser Class y (con suerte) puedes mantener la vista limpia de todo lo que se parece a PHP usando variables simples o pares de etiquetas variables en lugar de echos y foros. es decir:

{blog_entries} 
<h5>{title}</h5> 
<p>{body}</p> 
{/blog_entries} 

en lugar de

<?php foreach ($blog_entries as $blog_entry): ?> 
<h5><?php echo $blog_entry['title']; ?></h5> 
<p><?php echo $blog_entry['body']; ?></p> 
<?php endforeach; ?> 

Otra ventaja de este enfoque es que usted no tiene que preocuparse por la adición de la instancia CI como lo haría si se utiliza ayudantes personalizados a hacer todo el trabajo .


69

Volví aquí después de un tiempo ¿eh?

Sólo quiero escribir algunos códigos que permiten utilizar instancia CI dentro del ayudante

function yourHelperFunction(){ 
     $ci=& get_instance(); 
     $ci->load->database(); 

     $sql = "select * from table"; 
     $query = $ci->db->query($sql); 
     $row = $query->result(); 
    } 
+8

gracias por mostrar cómo usar la instancia de CI. 28 ene. 102010-01-28 03:10:50

  0

sin preocupaciones mate 30 ene. 102010-01-30 05:59:13

  0

WOW que es útil gracias :) 12 mar. 112011-03-12 10:13:57

  0

@ r4ccoon, muy bien. Ni siquiera me llevó 5 minutos regresar para las definiciones de la instancia. :) 31 dic. 142014-12-31 14:01:08

  0

@ r4ccoon, y ese es un consejo fantástico 04 mar. 162016-03-04 11:44:37


2

Cree un archivo con el nombre de su ayudante en /aplicación/ayudantes y añadirlo al archivo de configuración de autocarga/cargarlo manualmente

E.g.colocar un archivo llamado user_helper.php en /aplicación/ayudantes con este contenido:

<?php 
    function pre($var) 
    { 
    echo '<pre>'; 
    if(is_array($var)) { 
     print_r($var); 
    } else { 
     var_dump($var); 
    } 
    echo '</pre>'; 
    } 
?> 

Ahora usted puede cargar el ayudante través $this->load->helper(‘user’); o añadirlo a application/config/config autoload.php .


13

Bueno, para mí sólo funciona añadiendo el texto "_helper" después en el archivo PHP como:

Codeiginiter Helpers

Y para cargar automáticamente el ayudante en la aplicacion carpeta -> archivo autoload.php añadir en el array helper es el nombre sin "_helper" como:

$ autoload ['helper'] = array ('comunes');

Y con que puedo usar todas las funciones del ayudante

+1

Acabo de descubrir que, como dijiste, CodeIgniter requerirá '_helper' al final del nombre del archivo. 30 may. 132013-05-30 20:48:52

+4

+1 para usar NetBeans :) 08 nov. 132013-11-08 12:21:43

  0

@Jared, sí, también fue el caso para mí, ¡requiere el _helper al final del nombre del archivo! 19 sep. 142014-09-19 09:52:30


1

Basta con definir un ayudante en el directorio ayudante aplicación luego llamar desde su controlador solo funcionan nombre como

helper name = new_helper.php 
function test_method($data){ 
return $data 
} 

en el controlador carga de la ayudante

$this->load->new_helper(); 
$result = test_method('Hello world!'); 
if($result){ 
echo $result 
} 

salida será

Hello World! 

1

Para recuperar un artículo de su archivo de configuración, utilice la siguiente función:

$this->config->item('item name'); Donde nombre del artículo es el índice de la matriz $ config desea recuperar. Por ejemplo, para recuperar su elección de idioma, hará esto:

$lang = $this->config->item('language'); La función devuelve FALSO (booleano) si el elemento que está intentando recuperar no existe.

Si está utilizando el segundo parámetro de la función $ this-> config-> load para asignar sus elementos de configuración a un índice específico, puede recuperarlo especificando el nombre del índice en el segundo parámetro de $ this -> config-> función item(). Ejemplo:

// carga un archivo de configuración llamado blog_settings.php y lo asigna a un índice llamado "blog_settings"

$this->config->load('blog_settings', TRUE); 

// recuperar un elemento de configuración nombre_del_sitio llamado contenida dentro de la matriz blog_settings

$site_name = $this->config->item('site_name', 'blog_settings'); 

// Una forma alternativa de especificar el mismo tema:

$blog_config = $this->config->item('blog_settings'); 

$ site_name = $ blog_config ['site_name'];