Bu yardımcı kullanarak doğru yolu nedir?

0 Cevap php

Ben bir web sitesi zekâ CodeIgniter'ı inşa ediyorum ve ben bir veritabanından çekilir ne dayalı veri döndüren bir işlevi vardır, bir yardımcıya yazdı, ve ben iyi MVC tutmak için bu yatıyordu nasıl emin değilim.

Denetleyici:

    $char = $this->uri->segment(4);
    $q = $this->kal_db_model->get_char($this->session->userdata('uid'), $char);
    $q_row = $q->row();

    $data['items'] = $this->kal_db_model->get_items($q_row->PID);
    $data['page'] = 'control_view_char';

Model:

function get_items($pid)
{
$kal_db = $this->load->database('kal_db', TRUE); 
$sql = "
        SELECT i.*, n.Name, n.Grade, n.type, p.Name AS PrefixName, m.Name AS MixName
        FROM dbo.Item as i
        INNER JOIN dbo.ItemName as n
        ON i.[Index] = n.[Index]
        INNER JOIN dbo.PrefixName as p
        ON i.[Prefix] = p.[Prefix]
        INNER JOIN dbo.MixName as m
        ON i.[Info] = m.[Info]
        WHERE i.PID = '". $pid ."'
        ";         
$query = $kal_db->query($sql);
return $query;
}

Görünüm:

<?php if ($items->num_rows() > 0)
          {
             foreach ($items->result() as $item): ?>
          <tr class="odd">
            <td><img src="<?php echo base_url(); ?>/assets/items/<?php echo $item->Index; ?>.bmp" alt="" /></td>
            <?php if($item->type == 1)
                  {
                    echo '<td>G' . $item->Grade . '<span style="color:blue">' . $item->PrefixName . '</span>&nbsp;<span style="color:red">' . $item->XAttack . '/' . $item->UpgrLevel . '/' . $item->XHit . '</span>&nbsp;' .$item->Name; if($item->Info > 50000){ echo '&nbsp;<span style="color:green">' . $item->MixName . '</span>'; } echo '</td>';
                  }
                  elseif($item->type == 2)
                  {
                    echo '<td>G' . $item->Grade . '<span style="color:blue">' . $item->PrefixName . '</span>&nbsp;<span style="color:red">' . $item->XDefense . '/' . $item->XDodge . '</span>&nbsp;' .$item->Name . '</td>';
                  }
                  elseif($item->type == 3)
                  {
                    echo '<td>' .$item->Name . '</td>';
                  }
                  elseif($item->type == 4)
                  {
                    echo '<td><span style="color:blue">G' . $item->Info . '</span>&nbsp;' .$item->Name . '</td>';
                  }

            ?>
          </tr>
        <?php endforeach;
            } ?> 

Basitçe söylemek gerekirse, ben görünümünde $item->Name değerini göstermez istiyorum, ama yerine bir şey yardımcısı döndü.

yardımcı fonksiyon şöyle:

parse_item($Index, $Prefix, $Info)

ve böyle bir şey verir:

Array ( [name] => Short Iron Sword [prefix] => The King, GuhBalHan's [mix] => Shadow )

I-$Index $item->Index, $Prefix $item->Prefix ve $Info olarak $item->Info şeklinde olsun

Ben bir görünüme bir yardımcıya yüklemek ve tabii ki orada mantık sürü var, onun kötü bir uygulama biliyorum ben, bunu nasıl emin değilim, ama sağlayacaktır olarak, döndürülen her öğe için bu fonksiyon çağırmak zorunda $item->Name olarak $data['name'], $item->Prefix olarak $data['prefix'] ve $item->MixName olarak $data['mix']

Ben sadece foreach deyimi içinde işlevini çağırarak olmadan bunu yapmanın bir yolunu bulmak gibi olamaz. Ben bir şey eksik?

Düşünceler / öneri?

Şimdiden teşekkürler.

-------------- Bölüm çözüldü

Bu kısmen çözüldü, ben modelinde bu koyuyorum, ama sadece, 17 kez ilk sırayı dönüyor. $ Q sadece ilk satırı neden ben anlamıyorum, bir dizi olmamalı?

$query = $kal_db->get('Item');
$q = $query->row();
$i = 1;
foreach($q as $row)
{  
  $item[$i]['IID'] = $q->IID;
  $i = $i + 1;
} 
return $item;

0 Cevap