CodeIgniter: Створити нового помічника?


178

Мені потрібно різними способами зациклювати безліч масивів і відобразити їх на сторінці. Масиви генеруються класом модулів. Я знаю, що краще не включати функції на "види", і я хочу знати, куди потрібно вставити файл функцій.

Я знаю, що можу "поширити" помічників, але не хочу розширювати помічника. Я хочу, щоб створити помічник з моїми функціями циклу. Давайте назвемо його loops_helper.php


Чому ви не можете просто передати ці масиви перегляду?
Майк Гордецький

Я можу, але це пропускає точку відокремлення погляду від функцій ..
Джонатан

Відповіді:


378

Помічник CodeIgniter - це файл PHP з декількома функціями. Це не клас

Створіть файл і вставте в нього наступний код.

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

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

Збережіть це у програмі / helpers / . Ми назвемо це "new_helper.php"

Перший рядок існує, щоб переконатися, що файл не може бути включений і запускається за межі області CodeIgniter. Все після цього пояснюється само собою.

Використання помічника


Це може бути у вашому контролері , моделі чи зображенні (не бажано)

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

echo test_method('Hello World');

Якщо ви використовуєте цей помічник у багатьох місцях, ви можете його автоматично завантажувати, додаючи його у файл налаштування автозавантаження, тобто <your-web-app>\application\config\autoload.php.

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

-Матьє


33
Завжди використовуйте, що ім'я файлу помічника додається до "_helper", інакше ви отримаєте помилку. Тож "helper_name" не буде працювати, але назвіть ваш файл "name_helper".
Bhumi Singhal

3
Що стосується CI2, вам також потрібно буде придбати екземпляр CI, щоб використовувати помічник у моделі: $ ci = get_instance (); $ ci-> load-> helper ('ім'я_хельпер');
Evernoob

3
Просто зауважте, що помічник не повинен бути функцією. Це може бути і клас. Наприклад, ознайомтеся зі стратегією створення "віджетів" на форумі EllisLab . Тоді ви можете використовувати цей клас у будь-якому місці ... Також з технічної точки зору, ви можете завантажити свого помічника в екземпляр CI, якщо захочете, зробивши отримання екземпляра, а потім встановивши його $thisяк його властивість ... Все, якщо ви хочете, звичайно.
Генерал Реднек

2
Для чого використовувати перевірку if_ function існує? Це річ із розпалювачем коду, чи це загальна справа з хорошої практики php? Навіщо вам це потрібно?
скрилн

2
@skrln є ймовірність, що у вас є автозавантажений помічник (давайте назвемо його cool_helper), і якщо ви забудете це і вручну зателефонуєте $this->load->helper('cool_helper')після його автоматичного завантаження, ви отримаєте "вже визначену" помилку PHP або щось подібне. Це запобігає завантаженню одного і того ж коду двічі (це щось на зразок функції include_once()PHP, але для помічників CodeIgniter, щоб уникнути проблем). В основному, переклад трохи: якщо функція не існує, це означає, що помічник раніше не завантажувався. Давайте визначимо це.
Алехандро Іван

79

Деякий код, що дозволяє використовувати екземпляр CI всередині помічника:

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

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

1
@ r4ccoon, так правильно. Навіть мені не потрібно було 5 хвилин, щоб повернутися до визначень екземплярів. :)
користувач1048839

@ r4ccoon, і це фантастична порада
Арун

17

Добре для мене працює лише додавання тексту "_helper"після у файл php на зразок:

Помічники кодежинітера

А для автоматичного завантаження помічника в додаток до папки -> файл autoload.php додайте в масив помічник імені без "_helper", наприклад:

$ autoload ['helper'] = масив ('comunes');

І з цим я можу використовувати всі функції помічника


1
Я щойно виявив, що, як ви сказали, CodeIgniter вимагатиме _helperв кінці імені файлу.
Джаред Етьньє

@Jared, так, це теж було для мене, він вимагає _helper в кінці імені файлу!
pollux1er

11

Щоб створити нового помічника, ви можете слідувати вказівкам The Pixel Developer , але моя порада не створювати помічника лише для логіки, необхідної певній частині певної програми. Натомість використовуйте цю логіку в контролері для встановлення масивів на їх кінцеві призначені значення. Як тільки ви це отримаєте, ви переносите їх у подання за допомогою класу «Parser Template Class» (і, сподіваємось,), ви зможете зберегти подання очищення від усього, що схоже на PHP, використовуючи прості змінні або пари тегів змінних замість відлуння та передбачень. тобто:

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

замість

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

Ще одна перевага від цього підходу полягає в тому, що вам не доведеться турбуватися про додавання екземпляра CI, як це було б, якби ви використовували власні помічники, щоб виконати всю роботу.


3

Створіть файл із іменем вашого помічника в / застосуванні / helpers та додайте його до конфігураційного файлу автозавантаження / завантажте його вручну.

Наприклад, розмістіть файл з назвою user_helper.php в / application / helpers з цим вмістом:

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

Тепер ви можете або завантажити помічник через $this->load->helper(‘user’);або додати його в config / auto / autoload.php config.


3

Просто визначте помічника в каталозі помічників програми, а потім зателефонуйте з контролера просто назвою функції, як

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

в контролер завантажують помічник

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

вихід буде

Hello World!

3

Щоб отримати елемент із конфігураційного файлу, скористайтеся такою функцією:

$this->config->item('item name'); Де назва елемента - це індекс масиву $ config, який ви хочете отримати. Наприклад, для вибору мови ви зробите це:

$lang = $this->config->item('language'); Функція повертає FALSE (булева), якщо елемент, який ви намагаєтеся отримати, не існує.

Якщо ви використовуєте другий параметр функції $ this-> config-> load для присвоєння елементів конфігурації певному індексу, ви можете отримати його, вказавши ім'я індексу у другому параметрі $ this-> config- > item () функція. Приклад:

// Завантажує конфігураційний файл під назвою blog_settings.php і призначає його до індексу з назвою "blog_settings"

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

// Отримайте елемент конфігурації з назвою site_name, що міститься в масиві blog_settings

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

// Альтернативний спосіб вказати той самий елемент:

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

$ site_name = $ blog_config ['site_name'];

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.