Codeigniter AJAX вкладки - PullRequest
       21

Codeigniter AJAX вкладки

0 голосов
/ 20 февраля 2012

Мне нужно создать несколько вкладок ajax с CodeIgniter. Проблема, с которой я сталкиваюсь, заключается в том, что мне нужно много информации, хранящейся на 1 вкладке, и информация отличается на каждой вкладке, поэтому я не могу использовать шаблон HTML и просто заполнить данные различными значениями. Дизайнер, предоставивший разметку, разработал ее так, чтобы каждая html-часть была скрыта. Итак, мой вопрос: как мне это сделать? Получите значения, которые мне нужны для каждого вызова ajax, и заполните каждую вкладку контекстом, или я должен загрузить отдельные страницы для каждой вкладки ... так что HTML и данные находятся на другой странице. Я пытался сделать это в CodeIgniter, но мне не удалось сделать это в контексте MVC.

Ответы [ 3 ]

0 голосов
/ 20 февраля 2012

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

$string = $this->load->view('myfile', '', true);

, в этом случае у вас есть все данные myfile в строку $.

Вы можете поместить данные вотделить представление от шаблона и затем загрузить его.

Например:

$info_tab['first_tab'] = $this->load->view('first_tab_content', '', true);
$info_tab['second_tab'] = $this->load->view('second_tab_content', '', true);
$this->load->view('html_template',$info_tab);

таким образом, у вас есть две новые переменные в представлении.

0 голосов
/ 21 февраля 2012

Лучший способ сделать это - загрузить частичные представления (вы загружаете частичное представление, передавая false в качестве третьего параметра представления, который дает вам строку) с условными выражениями. Возможно, Tab1 должен соответствовать 0 условиям, Tab2 может соответствовать 2 условиям и так далее. Лучше всего использовать плагин HMVC.

<ul class="tabs">
    <li><a href="#tab-one">Tab One</a></li>
    <li><a href="#tab-two">Tab Two</a></li>
    <li><a href="#tab-three">Tab Three</a></li>
</ul>

-

<div id="tab-one" class="tab-content">
    <?php echo Modules::run('module/tab_one'); ?>
</div>
<div id="tab-two" class="tab-content">
    <?php echo Modules::run('module/tab_two'); ?>
</div>
<div id="tab-three" class="tab-content">
    <?php echo Modules::run('module/tab_three'); ?>
</div>

-

public function tab_one(){
    $this->load->view('module/partials/view_one', array(), false)
}

-

view_one

PHP
    if(condition_is_meet):
    // do something
PHP
    else:
    //do something else
PHP
    endif;
0 голосов
/ 20 февраля 2012

решение 1. Загрузить все данные через контроллер Codeigniter и показать / скрыть вкладки с помощью Javascript. Когда JS отключен: показать все данные на одной странице

решение 2. совершать вызов на сервер через ajax для каждого щелчка, открывающего вкладку, а затем вызывать контроллер. Чтобы иметь возможность вызывать контроллер из Javascript, вам нужен базовый URL: http://www.jigniter.com/use-your-site-url-or-base-url-in-javascript-functions/comment-page-1/#comment-654

$.getJSON(CI.base_url + 'controller/method/', function(data) {
// ...
}

или используйте $ .ajax для более сложных вещей. Когда JS отключен: каждый щелчок загружает новый вид.

Сначала соберите это без JS, затем наложите его.

...