Доступ к функциям из представления? Я знаю, что правильный путь должен состоять в том, что контроллеры обрабатывают все вызовы функций, но Если мне нужно вызвать другую функцию и передать переменную, которая поступает из данных db в виде цикла, например.Как побить мои неправильные методы CodeIgniter
вид:
if($persons != ""){
foreach($persons as $p){
echo $p->name;
echo $p->lastname;
// Now I need to call a function and pass parameters from loop
$is_banned = $this->model_users->checkIfBanned($p->name);
echo $is_banned;
}
}
Как я должен сделать это правильный путь в контроллере?
Другая вещь - вызовы ajax для javascript. Я поставил много javascript в контроллерах, когда мне нужно получить более одного ответа. Например, если мне нужно получить все сообщения от пользователя через ajax и получить ответ на обновление сообщений div, а также получить количество сообщений и обновить поле count count.
Неверный путь, который я делал: например. ЯШИ:
function insertNewPost(){
var the_text = $('#post_text_input').val();
if(the_text != ""){
$.ajax({
type:"POST",
url:base_url+"controller/insertNewPost",
data: {post_text: the_text},
cache:false,
success:function(response){
$('#post_output').prepend(response);
$('#post_text_input').val('');
}
});
}
Контроллер:
function insertNewPost(){
if($this->session->userdata('is_logged_in')){
$this->load->model('model_users');
$this->load->model('model_posts');
$email = $this->session->userdata('email');
$myid = $this->model_users->getUserId($email);
$post_text= $this->FilterData($this->input->post('post_text'));
if($this->model_posts->insertNewPost($myid,$post_text)){
$count = $this->model_posts->countPosts($myid);
echo 'More recent: '.$post_text;?>
<script>
var count = "<?php echo $count;?>";
$('#posts_count').html(count);
</script>
<?php
}
}else{
redirect("inicio");
}
}
Можно ли получить 2 ответов в то же время и содержании обновления от 2 див в то же время? Как я могу получить переменную $count
и передать ее на тот же ответ ajax?
Любой легкий сарай был бы очень полезен. Заранее спасибо
Как было предложено @charlietfl:
Изменен контроллер:
function insertNewPost(){
if($this->session->userdata('is_logged_in')){
$this->load->model('model_users');
$this->load->model('model_posts');
$email = $this->session->userdata('email');
$myid = $this->model_users->getUserId($email);
$post_text= $this->FilterData($this->input->post('post_text'));
if($this->model_posts->insertNewPost($myid,$post_text)){
$content = 'More recent: '.$post_text;
$count = $this->model_posts->countPosts($myid);
$items = array($content,$count);
echo json_encode($items);
}
}else{
redirect("inicio");
}
}
И изменили функцию JS:
function insertNewPost(){
var the_text = $('#post_text_input').val();
var post_count = '#posts_count';
if(the_text != ""){
$.ajax({
type:"POST",
url:base_url+"controller/insertNewPost",
data: {post_text: the_text},
cache:false,
success:function(response){
var content = json_encode(response);
$('#post_output').prepend(content[0]);
$(post_count).html(content[1]);
$('#post_text_input').val('');
}
});
}
это не происходит, я должен делать что-то не так.
может создавать ассоциативный массив в php и выводить как json, тогда успех ajax может анализировать возвращаемые свойства объекта, чтобы делать все, что необходимо – charlietfl
@charlietfl Спасибо. Это звучит хорошо, попробуй и опубликуйте результаты. Любая идея для первой проблемы? – sunrisepoet
не совсем уверен, что ваша первая проблема. Передача данных с контроллера на просмотр хорошо документирована в документах CI – charlietfl