2012-06-05 5 views
0

У меня есть вкладки, содержимое которых является полностью функциональными частями моего сайта.codeigniter и содержимое вкладки

Например, в моей области администрирования у меня есть вкладки [добавить/удалить альбом] [добавить фото] [удалить фото]. Я технически разделяю админ-зону через вкладки.

Я использую ajax для загрузки содержимого на эти вкладки. область содержимого вкладки - это div.

Точка зрения внутри область содержимого вкладки также использует ajax для загрузки материала. Это вызовы ajax, которые работают внутри области содержимого вкладки.

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

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

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

Я был бы признателен, если бы кто-нибудь мог помочь мне объяснить, как это можно решить или как содержимое внутри вкладок управляется в CI.

adminTabsview.php 

<ul id="adminTabs"> 
    <li ><?php echo anchor('#album_addDelete', 'Album Add/Delete'); ?></li>  
</ul> 
<div id="adminTabsContent"></div> 

$(document).ready(function(){ 
$('#adminTabs a').on({  
    click: function (evt){   
     evt.preventDefault();   
     var page = this.hash.substr(1);   
     adminTabsAjaxCall(page);   
    } 
}); 
}); 

function adminTabsAjaxCall ($data){ 

$.ajax({ 
    type: "POST", 
    url: "index.php/adminsite_controller/"+ $data + "/", 
    dataType: "html", 
    data: $data, 
    statusCode: {removed} 
      }, 
    success: adminTabContent   

}); 

function adminTabContent (data){    
    $('#adminTabsContent').html(data); 
} 

albumsEditDeleteView.php 
(this is a view that gets loaded into the tab contentarea div) 

<div id="adminTabsContent"> 
<div id="albumList"> 
<ul> 
<li> 
<a href="#">Asdf</a> 
<a class="add" href="http://localhost/myPHP/photoalbums/index.php/Albums_Controller/add_album/301/Asdf/1/28/0">[ add ]</a> 
<a class="delete" href="http://localhost/myPHP/photoalbums/index.php/Albums_Controller/delete_album/301/Asdf/1/28/0">[ delete ]</a> 
</li> 
</ul> 
</div> 
</div> 

$(document).ready(function(){ 
$('#albumList').on({   
    click: function (evt){   
     evt.preventDefault(); 
var $clickedElement = evt.target.tagName; 
if ($clickedElement == 'A'){     
    var urlarray = url.split('/');  
    $chosen.albumid  = urlarray[8]; 
    $chosen.albumname = urlarray[9]; 
    $chosen.lft  = urlarray[10]; 
    $chosen.rgt  = urlarray[11]; 
    $chosen.nodeDepth = urlarray[12]; 
      if ($class == 'add'){     
    albumajaxcall($chosen); 
     } 
      if ($class == 'delete'){    
    deleteajaxcall($chosen); 
     }    
    }    
} 
}); 
}); 


function albumajaxcall($data){ 
$.ajax({ 
    type: "POST", 
    url: "index.php/Adminsite_Controller/add_album/", 
    dataType: "json", 
    data: $data, 
    statusCode: {removed} 
      }, 
    success: adminTabContent 
}); 
} 

function adminTabContent(data){   
$('#adminTabsContent').html(data); 
} 

//heres the view file that has to replace the original view inside 
//tabcontent area 
//addnode_view.php 
    <?php echo form_open('Albums_Controller/update_albumSet');?>         
     <input type="text" name="newAlbum" id="newAlbum" value=""/>    
     <input type="submit" name="submit" value="Submit" />   
    <?php echo form_close();?> 
    <?php 


//heres the controller function 
function add_album(){   
    $levelData ['albumid']  = $this->input->post('albumid'); 
    <!-- removed--> 

    $levelData ['main_content'] = 'addnode_view'; 
    $this->load->view('includes/template', $levelData); 
} 


//And heres the controller method that loads 
//the original page (albumsEditDeleteView.php) - this is the original view 
//that gets loaded into the tab- I get stuck when this view 
//has to be **totally** replaced through links in the view) 

function album_addDelete(){ 
    $allNodes ['myAlbumList'] = $this->Albums_Model->get_albumList(); 
    echo $this->load->view('albumsEditDelete_view', $allNodes); 
} 

спасибо заранее.

+2

Было бы больно, если бы вы уточнили вопрос, о котором вы просите. Также, пожалуйста, разместите соответствующий код. –

+0

Как я могу передать новый вид области содержимого вкладки? –

+0

Второй раз, прочитав вопрос и все еще немного нечеткий, но спасибо за то, что он вставил код. 1. Вы предупредили «данные» от adminTabContent, чтобы узнать, заполнено ли что-то? 2. Вы уверены, что хотите использовать php-стиль «$ data» в adminTabsAjaxCall? 3. С первого взгляда, похоже, есть дополнительный} в коде ajax? – MikeCruz13

ответ

0

в основном то, что вам нужно сделать, это загрузить любой новый вид, который вы ставите на вкладке в функции контроллера (adminsite_controller/любая функция), которая обрабатывает ваш ajax.

Это будет в основном вызывать файл вида, который будет рассматриваться как переменная успеха вашей функции ajax.

поэтому у вас есть что-то подобное, то для успеха части вашего AJAX

success:function(msg){adminTabContent(msg);} 

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

$data['some_data'] = $this->some_model->some_function(); 
$this->load->view('someview', $data); 
+0

поблагодарить u за ответ. что я предложил, это то, что я уже сделал. как я сказал в сообщении, у меня уже есть переменная успеха моей функции ajax. Я вижу весь вид, используя firebug. То, что я не могу сделать, это получить это в div, который отображает содержимое вкладки (что также означает, что существующее представление в области содержимого будет полностью заменено). Если вы посмотрите в мой код, вы можете видеть, что вкладки находятся в отдельном файле вида, а содержимое, загруженное на вкладку, является другим файлом вида. Я думаю, я не должен пытаться передать эти данные в div div вкладки. –

+0

то, что я говорю, это отдельная часть, которую вы пытаетесь обновить с помощью ajax из файла представления табуляции и сделать его собственным файлом вида. Если все еще не имеет смысла, perhpas отправляет код контроллера, который обрабатывает запрос ajax, и файл с его загрузкой, а также файл представления, загружающий исходную страницу. – Rooster

+0

благодарю вас за попытку помочь мне. Я опубликовал код. сделайте еще один взгляд. –

Смежные вопросы