codeigniter和标签内容

时间:2012-06-05 19:45:27

标签: codeigniter tabs

我有一些标签,其内容是我网站的完整功能部分。

例如,在我的管理区域,我有标签[添加/删除相册] [添加照片] [删除照片]。我在技术上通过标签划分管理区域。

我使用ajax将内容加载到这些标签中。标签内容区域是div。

内部标签内容区域的视图也使用ajax加载内容。 这些是在选项卡内容区域内运行的ajax调用。

只要选项卡内容区域内的视图保持相同或仅部分内容发生更改,一切正常。但是当选项卡内容区域内的某些交互返回全新视图时,选项卡内容区域将不会显示它们。

我知道发生的事情是这个返回的新视图没有传递到选项卡内容区域div。

在firebug中,我可以看到ajax success function response显示返回的新视图。 但我不知道如何将新视图传递给标签内容区域。

如果有人可以帮我解释如何解决这个问题,或者如何在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); 
}

提前完成。

1 个答案:

答案 0 :(得分:0)

基本上你需要做的是在处理你的ajax的控制器函数(adminsite_controller /无论什么函数)的选项卡中加载任何新的视图。

这基本上会回显视图文件,视图文件将被视为ajax函数的成功变量。

所以你有类似的东西然后是ajax的成功部分

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

并且在codeigniter中的控制器中,您将以标准方式加载视图,但由于这只是加载页面的一部分,您可能需要创建一个新的视图文件,该文件只包含将存在的div。您将以不同于ajax的方式收集所有数据。

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