CodeIgniter: ¿Crear un nuevo ayudante?

178

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

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

Jonathan
fuente
¿Por qué no puedes pasar esas matrices a la vista?
Mike Hordecki
Que pueda, pero que pierde el punto de sepparating la vista desde las funciones ..
Jonathan

Respuestas:

378

Un asistente CodeIgniter 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;
    }   
}

Guarde esto en application / helpers / . Lo llamaremos "new_helper.php"

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

Usando el ayudante


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

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

echo test_method('Hello World');

Si usa este asistente en muchas ubicaciones, puede hacer que se cargue automáticamente al agregarlo al archivo de configuración de carga automática, es decir <your-web-app>\application\config\autoload.php.

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

-Mateo

The Pixel Developer
fuente
33
Siempre haga uso de que el nombre del archivo auxiliar se agrega con "_helper", de lo contrario obtendrá un error. Así que "helper_name" no funcionará, pero nombra tu archivo "name_helper".
Bhumi Singhal
3
A partir de CI2, también necesitará obtener la instancia de CI para usar un asistente dentro de un modelo: $ ci = get_instance (); $ ci-> load-> helper ('name_helper');
Evernoob
3
Solo una nota, el ayudante no tiene que ser una función. Puede ser una clase también. Por ejemplo, revisa la estrategia para crear "Widgets" en el foro de EllisLab . Luego puede usar esa clase en cualquier lugar ... también Techincally, puede cargar su ayudante en la instancia de CI si lo desea al obtener la instancia y luego establecerla $thiscomo una propiedad de ella ... Todo si lo desea, por supuesto.
General Redneck
2
¿De qué sirve la comprobación if function_exists? ¿Es un encendedor de código, es una buena práctica general de php? Por que lo necesitarias?
skrln
2
@skrln existe la posibilidad de que tenga un asistente cargado automáticamente (llamémoslo cool_helper) y, si lo olvida y llama manualmente $this->load->helper('cool_helper')después de que se cargó automáticamente, obtendrá un error de PHP "ya definido" o algo así. Esto evita cargar el mismo código dos veces (es algo así como la include_once()función PHP 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
Alejandro Iván
79

Algún código que le permite usar la instancia de CI dentro del ayudante:

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

    $sql = "select * from table"; 
    $query = $ci->db->query($sql);
    $row = $query->result();
}
r4ccoon
fuente
1
@ r4ccoon, muy bien. Ni siquiera me tomó 5 minutos volver para las definiciones de instancia. :)
user1048839
@ r4ccoon, y ese es un consejo fantástico
Arun
17

Bueno, para mí solo funciona agregando el texto "_helper"después en el archivo php como:

Codeiginiter Helpers

Y para cargar automáticamente el asistente en la aplicación de carpeta -> archivo autoload.php agregue en el asistente de matriz el nombre sin "_helper" como:

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

Y con eso puedo usar todas las funciones del ayudante

Eduardo Chavira
fuente
1
Acabo de descubrir que, como dijiste, CodeIgniter requerirá _helperal final del nombre del archivo.
Jared Eitnier
@ Jared, sí, también fue el caso para mí, ¡requiere la ayuda _ al final del nombre del archivo!
pollux1er
11

Para crear un nuevo ayudante, puede seguir las instrucciones de The Pixel Developer , pero mi consejo no es crear un ayudante solo para la lógica requerida por una parte particular de una aplicación en particular. En su lugar, use esa lógica en el controlador para establecer las matrices a sus valores finales deseados. Una vez que tenga eso, los pasa a la vista usando la clase Template Parser y (con suerte) puede mantener la vista limpia de cualquier cosa que se parezca a PHP usando variables simples o pares de etiquetas variables en lugar de ecos y foreachs. es decir:

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

en vez de

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

Otro beneficio de este enfoque es que no tiene que preocuparse por agregar la instancia de CI como lo haría si usa ayudantes personalizados para hacer todo el trabajo.

lima
fuente
3

Cree un archivo con el nombre de su ayudante en / application / helpers y agréguelo al archivo de configuración de carga automática / cárguelo manualmente.

Por ejemplo, coloque un archivo llamado user_helper.php en / application / helpers con este contenido:

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

Ahora puede cargar el asistente mediante $this->load->helper(‘user’);o agregarlo a application / config / autoload.php config.

Sumit
fuente
3

Simplemente defina un asistente en el directorio auxiliar de la aplicación y luego llame desde su controlador solo el nombre de la función como

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

en controlador cargar el ayudante

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

la salida será

Hello World!
Khurshid Alam Jony
fuente
3

Para recuperar un elemento de su archivo de configuración, use la siguiente función:

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

$lang = $this->config->item('language'); La función devuelve FALSE (boolean) si el elemento que intenta 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);

// Recupere un elemento de configuración llamado nombre_sitio contenido dentro de la matriz blog_settings

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

// Una forma alternativa de especificar el mismo elemento:

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

$ site_name = $ blog_config ['site_name'];

usuario6280268
fuente