CodeIgniter: Создать нового помощника?


147

Мне нужно собрать множество массивов по-разному и отобразить их на странице. Массивы генерируются классом модуля. Я знаю, что лучше не включать функции в «представления», и я хочу знать, куда вставить файл функций.

Я знаю, что могу «продлить» помощников, но я не хочу распространять помощника. Я хочу создать помощник с моими функциями цикла. Давайте назовем его loops_helper.php

  0

Почему вы не можете просто передать эти массивы в представление? 29 апр. 092009-04-29 22:07:44

  0

Я могу, но это не подходит для разметки представления из функций. 29 апр. 092009-04-29 22:37:32

322

Помощник CodeIgniter - это PHP-файл с несколькими функциями. Это не класс

Создайте файл и вставьте в него следующий код.

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

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

Сохранить в приложений/хелперы/. Мы назовем его «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'); 

-Mathew

+21

Всегда используйте, чтобы имя вспомогательного файла было добавлено с помощью «_helper», иначе вы получите сообщение об ошибке. Поэтому «helper_name» не работает, но назовите ваш файл «name_helper». 11 дек. 122012-12-11 10:06:46

+3

Начиная с CI2 вам также понадобится получить экземпляр CI, чтобы использовать вспомогательный элемент внутри модели: $ ci = get_instance(); $ CI-> load-> помощник (»name_helper»); 24 апр. 132013-04-24 09:36:42

+3

Просто примечание. Помощник не имеет функции *. Это может быть класс. Например, ознакомьтесь с стратегией создания «Виджеты» на [Форуме EllisLab] (http://ellislab.com/forums/viewthread/109584/P70). Затем вы можете использовать этот класс в любом месте ... также Techincally, вы можете загрузить своего помощника в экземпляр CI, если хотите, чтобы получить экземпляр, а затем установить '$ this' как свойство этого ... Все, если вы хотите конечно. 26 апр. 132013-04-26 15:24:34

+2

Что такое проверка функции if_exists? Является ли это воспламенителем кода, является ли это общей практикой хорошей практики? Зачем вам это нужно? 14 апр. 142014-04-14 09:33:42

+1

@skrln есть шанс, что у вас есть помощник с автозагрузкой (назовем его 'cool_helper'), и если вы забудете это и вручную вызовите' $ this-> load-> helper ('cool_helper') 'после того, как он был авто -loaded, вы получите «уже определенную» ошибку PHP или что-то еще. Это предотвращает одновременную загрузку одного и того же кода (что-то вроде функции 'include_once()' PHP, но для помощников CodeIgniter, чтобы избежать проблем). В принципе, перевод немного: ** если функция не существует, значит, хелпер не был загружен раньше. Давайте определим это. ** 15 май. 142014-05-15 16:03:12


8

Для создания нового помощника вы можете следовать instructions from The Pixel Developer, но мой совет, чтобы не создавать помощник только для логики, требуемой определенной частью конкретного применения. Вместо этого используйте эту логику в контроллере, чтобы установить массивы в их конечные предполагаемые значения. После того, как вы получили это, вы передаете их в представление, используя Template Parser Class и (надеюсь), вы можете сохранить чистое представление из всего, что похоже на PHP, используя простые переменные или пары пар переменных вместо эхо и foreach. то есть:

{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; ?> 

Другое преимущество этого подхода заключается в том, что вам не придется беспокоиться о добавлении экземпляра элемента конфигурации, как если бы вы использовать пользовательские помощников, чтобы сделать всю работу ,


69

Получил назад через некоторое время?

Я просто хочу написать некоторые коды, которые позволяют использовать экземпляр CI внутри помощника

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

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

благодарим вас за то, что вы показываете, как использовать экземпляр CI. 28 янв. 102010-01-28 03:10:50

  0

no worries mate 30 янв. 102010-01-30 05:59:13

  0

WOW это полезно спасибо :) 12 мар. 112011-03-12 10:13:57

  0

@ r4ccoon, так что правильно. Даже не взял меня за 5 минут, чтобы вернуться к определениям экземпляров. :) 31 дек. 142014-12-31 14:01:08

  0

@ r4ccoon, и это фантастический совет 04 мар. 162016-03-04 11:44:37


2

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

E.g.разместить файл под названием user_helper.php в /приложения/хелперов с этим содержанием:

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

Теперь вы можете либо загрузить помощника через $this->load->helper(‘user’); или добавить его в приложения/Config/autoload.php конфигурации ,


13

Ну для меня работает только добавляя текст "_helper" после этого в файле PHP, как:

Codeiginiter Helpers

и автоматически загружать помощника в папке Aplication -> Файл autoload.php добавить в массив хелперного имени без «_helper»:

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

И с этим я могу использовать все функции помощника с

+1

Я только что обнаружил, что, как вы сказали, CodeIgniter потребует '_helper' в конце имени файла. 30 май. 132013-05-30 20:48:52

+4

+1 для использования NetBeans :) 08 ноя. 132013-11-08 12:21:43

  0

@ Jared, да, это было также для меня, для этого требуется _helper в конце имени файла! 19 сен. 142014-09-19 09:52:30


1

Просто определить помощник в прикладных хелперах директории затем вызвать из контроллера только имя функции, как

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! 

1

Чтобы получить элемент из файла конфигурации, используйте следующую функцию:

$this->config->item('item name'); Где имя элемента является $ индекс конфигурации массива вы хотите получить. Например, чтобы выбрать язык, вы сделаете следующее:

$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'];