CodeIgniter: utworzyć nowego pomocnika?


178

Muszę zapętlać wiele tablic na różne sposoby i wyświetlać je na stronie. Tablice są generowane przez klasę modułów. Wiem, że lepiej nie włączać funkcji do „widoków” i chcę wiedzieć, gdzie wstawić plik funkcji.

Wiem, że mogę „rozszerzyć” pomocników, ale nie chcę przedłużać pomocnika. Chcę stworzyć pomocnika z moimi funkcjami pętli. Nazwijmy go loops_helper.php


Dlaczego nie możesz po prostu przekazać tych tablic do widoku?
Mike Hordecki

Mogę, ale nie rozumiem sensu oddzielania widoku od funkcji.
Jonathan

Odpowiedzi:


378

Pomocnik CodeIgniter to plik PHP z wieloma funkcjami. To nie jest klasa

Utwórz plik i umieść w nim następujący kod.

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

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

Zapisz to w aplikacji / helpers / . Nazwiemy to „new_helper.php”

Pierwszy wiersz istnieje, aby upewnić się, że plik nie może zostać dołączony i uruchomiony poza zakresem CodeIgniter. Wszystko po tym jest oczywiste.

Korzystanie z pomocnika


Może to być w twoim kontrolerze , modelu lub widoku (nie preferowane)

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

echo test_method('Hello World');

Jeśli korzystasz z tego pomocnika w wielu lokalizacjach, możesz go załadować automatycznie, dodając go do pliku konfiguracyjnego automatycznego ładowania, tj <your-web-app>\application\config\autoload.php.

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

-Mathew


33
Zawsze używaj, że do nazwy pliku pomocnika dołączona jest „_helper”, w przeciwnym razie pojawi się błąd. Tak więc „nazwa pomocnika” nie będzie działać, ale nazwa pliku „nazwa pomocnika”.
Bhumi Singhal,

3
Począwszy od CI2, będziesz musiał również pobrać instancję CI, aby użyć pomocnika w modelu: $ ci = get_instance (); $ ci-> load-> helper ('name_helper');
Evernoob 24.04.13

3
Tylko uwaga: pomocnik nie musi być funkcją. Może to być także klasa. Na przykład sprawdź strategię tworzenia „widżetów” na forum EllisLab . Następnie możesz użyć tej klasy w dowolnym miejscu ... także Technicznie, możesz załadować swojego pomocnika do instancji CI, jeśli chcesz uzyskać instancję, a następnie ustawić ją $thisjako właściwość ... Wszystko, jeśli chcesz.
Generał Redneck,

2
Do czego służy sprawdzanie if function_exists? Czy jest to rzecz zapalająca kod, czy jest to ogólna dobra praktyka php? Dlaczego miałbyś tego potrzebować?
skrln

2
@skrln istnieje szansa, że ​​pomocnik zostanie załadowany automatycznie (nazwijmy go cool_helper), a jeśli go zapomnisz i zadzwoń ręcznie $this->load->helper('cool_helper')po jego automatycznym załadowaniu, otrzymasz błąd „już zdefiniowany” PHP lub coś takiego. Zapobiega to dwukrotnemu załadowaniu tego samego kodu (jest to coś w rodzaju include_once()funkcji PHP, ale dla pomocników CodeIgniter, aby uniknąć problemów). Zasadniczo, tłumacząc trochę: jeśli funkcja nie istnieje, oznacza to, że pomocnik nie był wcześniej ładowany. Zdefiniujmy to.
Alejandro Iván

79

Niektóre kody, które pozwalają na użycie instancji CI wewnątrz pomocnika:

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

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

1
@ r4ccoon, więc dobrze. Nie zajęło mi nawet 5 minut, aby wrócić do definicji instancji. :)
user1048839,

@ r4ccoon, i to jest fantastyczna wskazówka
Arun

17

Cóż, dla mnie działa tylko dodawanie tekstu "_helper"po w pliku php, takiego jak:

Pomocnicy Codeiginiter

Aby automatycznie załadować pomocnika do aplikacji folderu -> plik autoload.php dodaj do pomocnika tablicy nazwę bez „_helper”, np .:

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

I dzięki temu mogę korzystać ze wszystkich funkcji pomocnika


1
Właśnie odkryłem, że tak jak powiedziałeś, CodeIgniter będzie wymagał _helperna końcu nazwy pliku.
Jared Eitnier

@Jared, tak, tak też było w moim przypadku, wymaga _helper na końcu nazwy pliku!
pollux1er

11

Aby utworzyć nowego pomocnika, możesz postępować zgodnie z instrukcjami od The Pixel Developer , ale moja rada nie polega na stworzeniu pomocnika tylko dla logiki wymaganej przez określoną część konkretnej aplikacji. Zamiast tego użyj tej logiki w kontrolerze, aby ustawić tablice na ich ostateczne zamierzone wartości. Gdy to osiągniesz, przekazujesz je do widoku za pomocą klasy parsera szablonów i (mam nadzieję) możesz utrzymać widok czysty od wszystkiego, co wygląda jak PHP, używając prostych zmiennych lub par znaczników zmiennych zamiast echa i foreach. to znaczy:

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

zamiast

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

Inną korzyścią z tego podejścia jest to, że nie musisz się martwić o dodanie instancji CI, tak jak gdybyś używał niestandardowych pomocników do wykonania całej pracy.


3

Utwórz plik o nazwie pomocnika w / application / helpers i dodaj go do pliku konfiguracyjnego autoload / załaduj go ręcznie.

Np. Umieść plik o nazwie user_helper.php w / application / helpers z tą zawartością:

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

Teraz możesz albo załadować pomocnika za pomocą, $this->load->helper(‘user’);albo dodać go do application / config / autoload.php config.


3

Wystarczy zdefiniować pomocnika w katalogu pomocnika aplikacji, a następnie wywołać z kontrolera po prostu nazwę funkcji jak

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

w sterowniku załaduj pomocnika

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

wyjście będzie

Hello World!

3

Aby pobrać element z pliku konfiguracyjnego, użyj następującej funkcji:

$this->config->item('item name'); Gdzie nazwa elementu to indeks tablicy $ config, który chcesz pobrać. Na przykład, aby pobrać wybrany język, wykonaj następujące czynności:

$lang = $this->config->item('language'); Funkcja zwraca FALSE (boolean), jeśli element, który próbujesz pobrać, nie istnieje.

Jeśli używasz drugiego parametru funkcji $ this-> config-> load w celu przypisania elementów konfiguracji do określonego indeksu, możesz go odzyskać, podając nazwę indeksu w drugim parametrze $ this-> config- > funkcja item (). Przykład:

// Ładuje plik konfiguracyjny o nazwie blog_settings.php i przypisuje go do indeksu o nazwie „blog_settings”

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

// Pobierz element konfiguracji o nazwie nazwa_strony zawarty w tablicy blog_settings

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

// Alternatywny sposób określenia tego samego elementu:

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

$ site_name = $ blog_config ['site_name'];

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.