CodeIgniter: Yeni bir yardımcı oluşturulsun mu?


178

Dizileri çok farklı şekillerde döngü ve bir sayfada görüntülemek gerekir. Diziler bir modül sınıfı tarafından üretilir. Ben 'görünümler' fonksiyonlar dahil değil daha iyi biliyorum ve ben fonksiyonlar dosya nereye nereye bilmek istiyorum.

Yardımcıları 'uzatabileceğimi biliyorum, ama bir yardımcıyı uzatmak istemiyorum. Ben döngü fonksiyonları ile bir yardımcı oluşturmak istiyorum .. hadi loops_helper.php diyelim


Neden bu dizileri görünüme aktaramıyorsunuz?
Mike Hordecki

Yapabilirim, ama bu görünümü fonksiyonlardan ayırma noktasını kaçırıyor ..
Jonathan

Yanıtlar:


378

CodeIgniter yardımcısı, birden fazla işlevi olan bir PHP dosyasıdır. Bir sınıf değil

Bir dosya oluşturun ve içine aşağıdaki kodu koyun.

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

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

Bunu uygulamaya / yardımcılara / konumuna kaydedin . Biz buna "new_helper.php" diyeceğiz

İlk satır, dosyanın eklenemeyeceğinden ve CodeIgniter kapsamının dışından çalıştırıldığından emin olmak için vardır. Bundan sonraki her şey açıklayıcıdır.

Yardımcıyı Kullanma


Bu, kontrol cihazınızda , modelinizde veya görünümünüzde olabilir (tercih edilmez)

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

echo test_method('Hello World');

Bu yardımcıyı birçok yerde kullanırsanız, otomatik yükleme yapılandırma dosyasına ekleyerek otomatik olarak yüklenmesini sağlayabilirsiniz <your-web-app>\application\config\autoload.php.

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

-Mathew


33
Her zaman yardımcı dosya adının "_helper" ile eklendiğinden emin olun, aksi takdirde bir hata alırsınız. Yani "helper_name" işe yaramayacak ama dosyaya "name_helper" adını verecektir.
Bhumi Singhal

3
CI2'den itibaren, bir modelde yardımcı kullanmak için CI örneğini almanız gerekir: $ ci = get_instance (); $ CI-> load-> helper ( 'name_helper');
Evernoob

3
Sadece bir not, yardımcı değil sahip bir fonksiyon olmak. Bir sınıf da olabilir. Örneğin, EllisLab Forumunda "Widget'lar" oluşturma stratejisine göz atın . Daha sonra bu sınıfı her yerde kullanabilirsiniz ... Teknik olarak, örneği alıp sonra $thisbir özelliği olarak ayarlayarak isterseniz CI örneğine yardımcınızı yükleyebilirsiniz ... Elbette isterseniz.
General Redneck

2
İf function_exists denetiminin kullanımı nedir? Bu bir kod ateşleyici şey mi, genel bir php iyi uygulama şey mi? Neden ihtiyacın var?
skrln

2
@skrln, otomatik olarak yüklenen bir yardımcıya sahip olma şansınız var (diyelim cool_helper) ve bunu unutursanız ve $this->load->helper('cool_helper')otomatik olarak yüklendikten sonra manuel olarak çağırırsanız , "önceden tanımlanmış" bir PHP hatası veya benzeri bir şey alırsınız. Bu, aynı kodu iki kez yüklemeyi önler ( include_once()PHP işlevine benzer, ancak CodeIgniter yardımcıları için sorunlardan kaçınmak için). Temel olarak, biraz çeviri: işlev yoksa, yardımcı daha önce yüklenmemiş demektir. Bunu tanımlayalım.
Alejandro Iván

79

Yardımcı içinde CI örneğini kullanmanıza izin veren bazı kodlar:

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

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

1
@ r4ccoon, çok doğru. Hatta bana örnek tanımları için geri gelmek için 5 dakika sürmedi. :)
user1048839

@ r4ccoon ve bu harika bir ipucu
Arun

17

Eh benim için sadece "_helper"gibi php dosyasında sonra metin ekleyerek çalışır :

Codeiginiter Yardımcıları

Ve otomatik olarak aplikasyon klasörüne otomatik olarak yüklemek için -> file autoload.php dizi yardımcısına "_helper" olmadan isim ekleyin:

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

Ve bununla birlikte tüm yardımcıların işlevlerini kullanabilirim


1
Az önce söylediğin gibi, CodeIgniter _helperdosya adının sonunda gerekli olacağını keşfettim .
Jared Eitnier

@Jared, evet, benim için de böyleydi, dosya adının sonunda _helper gerekiyor!
pollux1er

11

Yeni bir yardımcı oluşturmak için Pixel Developer'ın talimatlarını takip edebilirsiniz , ancak tavsiyem sadece belirli bir uygulamanın belirli bir bölümünün gerektirdiği mantık için bir yardımcı oluşturmak değil. Bunun yerine, dizileri nihai amaçlanan değerlerine ayarlamak için denetleyicideki bu mantığı kullanın. Bunu aldıktan sonra, bunları Şablon Ayrıştırıcı Sınıfını kullanarak görünüme geçirirsiniz ve (umarım) echos ve foreachs yerine basit değişkenler veya değişken etiket çiftleri kullanarak görünümü PHP gibi görünen herhangi bir şeyden temiz tutabilirsiniz. yani:

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

onun yerine

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

Bu yaklaşımın bir başka yararı da, tüm işi yapmak için özel yardımcılar kullanırsanız, CI örneğini eklemek gibi bir endişe duymanıza gerek olmamasıdır.


3

/ Application / helpers içindeki yardımcınızın adıyla bir dosya oluşturun ve dosyayı autoload config dosyasına ekleyin / manuel olarak yükleyin.

Örneğin yer adlı bir dosya user_helper.php içinde / application / yardımcıları bu içerikle:

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

Artık yardımcıyı üzerinden yükleyebilir $this->load->helper(‘user’);veya application / config / autoload.php config dosyasına ekleyebilirsiniz .


3

Sadece uygulama yardımcı dizininde bir yardımcı tanımlayın ve sonra kontrol cihazınızdan çağrı yapın

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

denetleyicide yardımcıyı yükleyin

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

çıktı olacak

Hello World!

3

Yapılandırma dosyanızdan bir öğe almak için aşağıdaki işlevi kullanın:

$this->config->item('item name'); Burada öğe adı, almak istediğiniz $ config dizi dizinidir. Örneğin, dil seçiminizi getirmek için şunları yapabilirsiniz:

$lang = $this->config->item('language'); Getirmeye çalıştığınız öğe yoksa işlev FALSE (boole) değerini döndürür.

Yapılandırma öğelerinizi belirli bir dizine atamak için $ this-> config-> load işlevinin ikinci parametresini kullanıyorsanız, $ this-> config- > item () işlevi. Misal:

// blog_settings.php adlı bir yapılandırma dosyası yükler ve "blog_settings" adlı bir dizine atar

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

// blog_settings dizisinde bulunan site_name adlı bir yapılandırma öğesini alın

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

// Aynı öğeyi belirtmenin alternatif bir yolu:

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

$ site_name = $ blog_config ['site_name'];

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.