передача значений из модели для просмотра в CI - PullRequest
0 голосов
/ 27 октября 2010

У меня есть библиотека в CI, которая получает мои последние обновления в Твиттере. У него есть функция, которая отправляет мои последние обновления в виде объектов на мой контроллер.

Я бы хотел показывать эти обновления в Твиттере в нижней части моей страницы, чтобы они всегда были видны.

Теперь мой вопрос: как я называю их прямо из представления? Я знаю, что это не очень хорошая практика в MVC, но я не понимаю, как еще я мог бы это сделать. Мой контроллер в настоящее время заботится обо всех моих разных страницах (это небольшой веб-сайт), и я не думаю, что будет хорошей практикой вызывать мой класс twitter в конце каждой функции страницы в контроллере, а затем отправлять его на просмотр .

Обычно я делаю это в моем контроллере:

<?php
    function index(){
    $data['page'] = 'home';
    //i don't want to call my twitter class here every single time I write a new page. (DRY?!)
    $this->load->view('template', $data);
    }
?>

И он загружает «шаблонное» представление, которое выглядит так:

<?php
$this->load->view('header');

$this->load->view('pages/'.$page);

$this->load->view('footer');
?>

Так какие-нибудь предложения, как я должен сделать это?

Ответы [ 2 ]

1 голос
/ 27 октября 2010

У меня есть вспомогательная библиотека, которая берет страницу частично и оборачивает ее в основную тему.Вы можете использовать необязательный параметр в load->view для рендеринга в строку.

Затем, когда вы рендерите свою главную страницу, вы можете загрузить обновления Twitter и отобразить их.Хотя я настоятельно рекомендую кэшировать ваш ответ в Твиттере как минимум на 5 минут, это сэкономит вам много лишних затрат.

Пример:

// Controller somwhere:
$content = $this->load->view('pages/'.$page, array(), true);
$this->myLibrary->masterPage($content);


// Your library:
function masterPage($content)
{

    $twitterData = $this->twitter->loadStuff(); // whatever your function is

    $twitter = $this->load->view('twitter_bar', array('data' => $twitterData), true);

    $this->load->view('master', array('content' => $content, 'twitter' => $twitter);
}
0 голосов
/ 02 ноября 2010

Альтернативный подход заключается в использовании базового контроллера.Все мои контроллеры расширяют мой пользовательский базовый контроллер, который содержит вещи, которые мне нужны на каждой странице, например, объект, содержащий текущего пользователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...