2 запроса Codeigniter на одном экране - PullRequest
1 голос
/ 12 ноября 2009

Как поместить два разных функциональных выхода из одного контроллера в один и тот же вид (страница)? Например, у меня есть функция, идущая в div «article», и другая функция, которую я пытаюсь использовать внутри div «aside». (здесь используется номенклатура HTML 5)

Я зашел так далеко, что использовал фактический запрос БД в (view) в стороне от div, и он по-прежнему отображает только функцию первой статьи.

Я изменил переменную $ data ('result') на отдельные переменные, и это не имеет значения.

Я показываю список задач, которые я должен выполнить в статье div, затем показываю названия завершенных задач в стороннем div.

Полагаю, я запутался в этом объяснении. Вы бы использовали функцию из другого контроллера?

Это первый код в контроллере

function index()
{
    $this->load->model('work_m');
    $data = array();
    $config['base_url'] = base_url() . 'index.php/work/index/';
    $config['total_rows'] = $this->db->count_all('work');
    $config['per_page'] = '10';
    $config['full_tag_open'] = '<div id="pagination">';
    $config['full_tag_close'] = '</div>';
    $this->pagination->initialize($config);
    $data['result'] = $this->work_m->get_records($config['per_page'], $this->uri->
        segment(3));

    $tmpl = array('table_open' =>
        '<table border="0" cellpadding="0" cellspacing="0">', 'heading_row_start' =>
        '<tr class="heading">', 'heading_row_end' => '</tr>', 'heading_cell_start' =>
        '<th>', 'heading_cell_end' => '</th>', 'row_start' => '<tr>', 'row_end' =>
        '</tr>', 'cell_start' => '<td>', 'cell_end' => '</td>', 'row_alt_start' =>
        '<tr class="alt">', 'row_alt_end' => '</tr>', 'cell_alt_start' => '<td>',
        'cell_alt_end' => '</td>', 'table_close' => '</table>');
    $this->table->set_template($tmpl);
    $this->table->set_caption("Work Items");

    //-- Header Row
    $this->table->set_heading('ID', 'Date', 'Title', 'Done', 'Item');

    //-- Content Rows

    $data['title'] = 'Page Display';
    $this->load->view('work_links', $data);

Обратите внимание, это указывает на work_links, представление

следующая функция это

function done()
{

    $data = array();
    if ($query = $this->work_m->dead_work()) {
        $data['dead'] = $query;
    }
    $tmpl = array('table_open' =>
        '<table border="0" cellpadding="0" cellspacing="0">', 'heading_row_start' =>
        '<tr class="heading">', 'heading_row_end' => '</tr>', 'heading_cell_start' =>
        '<th>', 'heading_cell_end' => '</th>', 'row_start' => '<tr>', 'row_end' =>
        '</tr>', 'cell_start' => '<td>', 'cell_end' => '</td>', 'row_alt_start' =>
        '<tr class="alt">', 'row_alt_end' => '</tr>', 'cell_alt_start' => '<td>',
        'cell_alt_end' => '</td>', 'table_close' => '</table>');
    $this->table->set_template($tmpl);
    $this->load->view('work_links', $data);
}

Модели, стоящие за ними, являются базовыми вызовами в базу данных

Теперь этот код в представлении идет с первой функцией выше (в статье div) и отлично работает

foreach($result as $row)
 {
 $this->table->add_row(
anchor("work/fill_form/$row->id", $row->id),
$row->date,
$row->title,
$row->compl,
$this->typography->auto_typography($row->item)
);
}
$table = $this->table->generate();
echo $table;

это второй код, который входит в сторонний div (и идет со вторым функционалом выше)

if (isset($dead)){

 foreach($dead as $row)
 {  
$this->table->add_row(
$row->id,
$row->title,
$row->finish
);
  }
 }  
$this->table->set_heading('ID', 'Title');
$table = $this->table->generate();
echo $table;

Последний код собирает данные только из первой функции независимо от того, что я делаю.

Ответы [ 2 ]

2 голосов
/ 12 ноября 2009

Чтобы дважды использовать представление на странице или использовать два разных представления из одного маршрута контроллера, вызывайте $this->load->view() один раз для каждого представления, но передавая $data только один раз. Это означает, что все данные вашей модели добавляются в одну переменную $data с использованием разных ключей или элементов массива.

Пример:

$this->data = array(
    'people' => $this->SomeModel->list1(),
    'dogs'   => $this->SomeModel->list2() );
$this->load->view('list-view', $this->data);
$this->load->view('list-view');
$this->load->view('footer');

Для многих моих собственных сайтов я использую специальный базовый контроллер, который реализует функцию view() для загрузки каждой из моих общих частей страницы, так что каждый маршрут контроллера должен заполнять только $this->data и вызывать $this->view('unique-part') большинство страниц будут иметь верхний колонтитул, нижний колонтитул, боковую панель, панель навигации, а затем какой-то уникальный вид в середине).

Пример:

function page($p, $extra) {
    $this->load->view('_parts/header', array_merge($this->data, $extra));
    $this->load->view("$base/sidebar");
    $this->load->view("$base/$p");
    $this->load->view('_parts/footer');
}

Обратите внимание, что верхний / нижний колонтитулы находятся в папке _parts, совместно используемой другими маршрутами. CodeIgniter кэширует данные представления так, чтобы данные были доступны любому представлению после первого, которое ссылается на него в данном маршруте.

0 голосов
/ 28 июля 2011

Я думаю, что это работа для модульного подхода: https://bitbucket.org/wiredesignz/codeigniter-modular-extensions-hmvc/wiki/Home

Q. Что такое модульный HMVC, почему я должен его использовать?

A. Модульная HMVC = Несколько триад MVC

Это наиболее полезно, когда вам нужно загрузить представление и его данные в Посмотреть. Подумайте о добавлении корзины покупок на страницу. Корзина покупок нужен собственный контроллер, который может вызывать модель для получения данных корзины. затем контроллер должен загрузить данные в представление. Так что вместо главный контроллер, обрабатывающий страницу и корзину, покупки корзину MVC можно загрузить прямо на странице. Главный контроллер ему не нужно об этом знать, и он полностью изолирован от него.

В CI мы не можем вызывать более 1 контроллера на запрос. Следовательно, чтобы Добившись HMVC, мы должны смоделировать контроллеры. Это может быть сделано с библиотеки, или с этим вкладом «Модульные расширения HMVC».

Различия между использованием библиотеки и модульной HMVC HMVC Класс: 1) Нет необходимости получать и использовать экземпляр CI в HMVC класс 2) Классы HMVC хранятся в каталоге модулей, в отличие от каталог библиотек.

Костер также использует HMVC.

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