我正在構建一個網站智商CodeIgniter,我寫了一個幫助器,它有一個函數,它根據從數據庫中提取的內容返回數據,我不知道我應該如何將它保留在良好的MVC中。什麼是使用這個幫手的正確方法?
控制器:
$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';
的型號:
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;
}
的觀點:
<?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> <span style="color:red">' . $item->XAttack . '/' . $item->UpgrLevel . '/' . $item->XHit . '</span> ' .$item->Name; if($item->Info > 50000){ echo ' <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> <span style="color:red">' . $item->XDefense . '/' . $item->XDodge . '</span> ' .$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> ' .$item->Name . '</td>';
}
?>
</tr>
<?php endforeach;
} ?>
簡單地說,我想在視圖中不顯示的$item->Name
值,而是從助手返回的東西。
輔助函數如下:
parse_item($Index, $Prefix, $Info)
和返回是這樣的:
Array ([name] => Short Iron Sword [prefix] => The King, GuhBalHan's [mix] => Shadow)
我可以得到$Index
爲$item->Index
,$Prefix
爲$item->Prefix
和$Info
爲$item->Info
我不太確定如何做到這一點,因爲我知道它不好的做法,加載一個幫助器視圖,顯然有很多的邏輯,但我需要調用這個函數爲每個返回的項目,作爲它將提供$item->Name
爲$data['name']
,$item->Prefix
作爲$data['prefix']
和$item->MixName
爲$data['mix']
我似乎無法找到這樣做不調用foreach語句中的函數的方法。我錯過了什麼嗎?
想法/建議?
在此先感謝。
--------------部分解決
這部分解決了,我把這個模型,但它只是返回第一行,17倍。我不明白爲什麼$ q只是第一行,它不應該是一個數組?
$query = $kal_db->get('Item');
$q = $query->row();
$i = 1;
foreach($q as $row)
{
$item[$i]['IID'] = $q->IID;
$i = $i + 1;
}
return $item;
您可以在控制器中加載幫助程序,並且該視圖仍然可以訪問這些功能。在視圖中使用這些函數並不是不好的做法 - 考慮CI的排版幫助器,URI助手......所有類型都適合在視圖中使用。 MVC是一個概念 - 不要以爲你有**要遵守它。 – Ross 2011-01-21 10:32:11