Мне нужно 3 дисплея, отформатированные одним способом, и 3+, отформатированные другим способом на той же странице.
Это звучит как логика отображения, что означает, что это работа для вашего взгляда. Ваш контроллер может просто выполнить один запрос, получая все или некоторые записи (скажем, самые последние 10), и передать его представлению, чтобы решить, как отображать данные.
По вашему мнению, вы можете просто использовать условную логику в цикле foreach (), чтобы определить, как выводить данные поста.
$limit = 3; // how many posts should we show in full?
$i = 1; // count
foreach ($blog as $row):
if( $i < $limit ) // we are under our limit
{
echo $row->post; // show full post
}
else // we are over our limit
{
echo $this->typography->auto_typography($row->post); // show truncated post
}
$i++; // increase count
endforeach;
unset($limit,$i,$row)
Это означает, что ваш контроллер может передавать полные данные любому количеству представлений, каждое из которых имеет свой собственный способ отображения данных, и представление, приведенное выше, может вызываться любым контроллером и точно отображать сообщения, переданные ему в установленном порядке .
Если это не устраивает вас, тогда вы можете манипулировать данными в вашем контроллере или модели (или создать вспомогательную функцию) с использованием array_walk () и вспомогательной функции:
// user function for array_walk
function truncate_post(&$value,$key,$limit)
{
if($key >= $limit)
{
$value->post = $this->typography->auto_typography($value->post);
}
}
$query = $this->db->get('posts', 10); // get 10 posts
$results = $query->result();
array_walk($results, 'truncate_post', 3); // truncate all but top 3 posts
$data['blog'] = $results;
$this->load->view('template1', $data);