Я разрабатываю новостной сайт с помощью CodeIgniter 3. Почти на каждой странице есть доска объявлений, содержимое которой одинаково на всех страницах. Я создал представление для этого раздела с именем "noteboard.php". И разные страницы контролируются разными контроллерами. т.е. Home, Post, Gallery, Poll и т.д. Проблема с использованием контроллера здесь - мне нужно выполнить две операции на каждом контроллере для создания HTML-доски объявлений.
Контроллер выглядит так:
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class SomeController extends CI_Controller {
/* .. */
public function index() {
/* .. */
$noticeboard['notice'] = $this->noticeboard_model->getNotice(); // Gets Notice HTML
$data['noticeboard'] = $this->load->view( 'sidebar/noticeboard', $noticeboard, TRUE );
/* .. */
/* $data is served to main page template */
}
/* .. */
}
И views/sidebar/noticeboard.php
выглядит так:
<div class="noticeboard">
<h3>Notice</h3>
<?php echo $notice; ?>
</div>
Я мог бы решить этот код избыточности, просто имея getNoticeboardHTML()
на обьявлений модели и имеющей модель принести вид и вернуть HTML. Но это хорошая практика?
Лучше вы создадите пользовательскую библиотеку и поместите getNoticeboardHTML()
в этот класс. После этого позвоните туда, где вам нужно. Не загрязняйте свою модель с помощью HTML.
Теоретически, нет. Вы не должны это делать. Это нарушение MVC. Вы можете использовать класс библиотеки, чтобы избежать дублирования кода.