[英]What is the correct way to modify variables in a Codeigniter helper?
[英]What is the correct way of using this helper?
我正在使用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;
我不確定我是否明白,但是這件事
我不太確定該怎么做,因為我知道將助手加載到視圖並在其中顯然有很多邏輯的做法很糟糕,但是我需要為返回的每個項目調用此函數,因為它將提供$ item->名稱為$ data ['name'],$ item->前綴為$ data ['prefix'],$ item-> MixName為$ data ['mix']
不需要幫助程序,因為PHP提供了多維數組。 您可以:
在某些模型中使用循環,以便將數組$items
返回到控制器。 $items
數組將類似於array(1 => array('name' => 'foo', 'prefix' => 'bar', 'mixname' => 'foobar')
;
將該數據作為$data['items']
傳遞給視圖;
循環瀏覽視圖中的項目。 假裝您需要顯示每個名稱: foreach ($items as $item) { echo $item['name']; }
foreach ($items as $item) { echo $item['name']; }
需要澄清的是:在模型的循環中,您將在捕獲數據的循環內執行以下操作:
$item[$i]['name'] = $name;
$item[$i]['prefix'] = $prefix;
$item[$i]['mixname'] = $mixname;
(其中$i
是迭代次數)。
另外,您實際上是在循環中進行查詢,這表明您應該看一下SQL IN
運算符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.