Разбиение кода на страницы и действие JQuery - PullRequest
2 голосов
/ 09 марта 2011

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

В моем контроллере у меня есть этот код:

<?php
class Books extends CI_Controller {

    function __construct()
    {
        parent::__construct();
                #$this->load->model('books_model');
                $this->load->helper('path');
    }

        function index() {

            $config['base_url'] = base_url().'books/index';
            $config['total_rows'] = $this->db->count_all('tbl_books');
            $config['per_page'] = 2;

            $this->pagination->initialize($config);

            $data['books'] = $this->db->get('tbl_books',$config['per_page'], $this->uri->segment(3));
            $data['pagination'] = $this->pagination->create_links();
            $data['page'] = 'Books';
            $this->load->view('books_view', $data);
        }

}
?>

в моих книгах, у меня есть этот код:

        <p class="pagination ta-right">
    <?=$pagination?>
    </p>
    <?php foreach($books->result() as $row): ?>
            <a href="<?=base_url()?><?=$row->image?>" class="nyroModal"> <img src="<?=base_url()?><?=$row->image?>" alt="" /></a>
            <a href="#<?=$row->id?>" title="<?=$row->title?>" class="nyroModal"><b class="big"><?=$row->title?></b></a> &middot; 
    <?php
      $sql = $this->db->query("select * from tbl_transactions where bookid=".$row->id." and (type='reserve' or type='borrowed')");
      $book_info = $sql->result();
            if($sql->num_rows() > 0) {
                    if($book_info[0]->type == 'reserve') { ?>
                           <span class="label label-red">Reserved</span>
                      <?php }elseif($book_info[0]->type == 'borrowed') { ?>
                            <span class="label label-blue">Borrowed</span>
                      <?php } else { ?>
                            <span class="label label-green">Available</span>
                      <?php }
                      } else { ?>
                            <span class="label label-green">Available</span>
                      <?php } ?>
                            Author: <b><?=$row->authors?></b> |  Category: </small><br/>
                      <div id="action-<?=$row->id?>">
                            <a href="" id="remove-<?=$row->id?>">remove</a> &middot; <a href="#">edit</a>
                      </div>
                            <img src="<?=base_url()?>img/small-loader.gif" style="display:none;" id="ajax-load-<?=$row->id?>" />
                 <div id="<?=$row->id?>" style='display: none;'><h3><?=$row->title?></h3><p align="justify"><?=$row->description?></p></div>
                     <?php endforeach; } ?>

<script type="text/javascript">
$(document).ready(function() {
<?php foreach($books->result() as $row): ?>
    $('#remove-<?=$row->id?>').click(function() {
        var stats = confirm('Are you sure you want to delete this entry?');

        if(stats) {

                        $('#action-<?=$row->id?>').hide();
                        $('#ajax-load-<?=$row->id?>').show();

                        $.ajax({
                         type: 'POST',
                         url: "<?=base_url()?>bookacts/delbook/",
                         data: ({id: <?=$row->id?>}),
                         cache: false,
                         success: function (msg){

                           if(msg == ""){
                                $('#ajax-load-<?=$row->id?>').hide();
                                $('.box-error').fadeIn("slow");
                                $('#action-<?=$row->id?>').fadeIn();
                            } else {
                                $('#ajax-load-<?=$row->id?>').hide();
                                $('.box-success').fadeIn("slow")
                                                 .animate({opacity: 1.0}, 2000)
                                                 .fadeOut('slow');
                                $('#action-<?=$row->id?>').fadeIn();
                            }
                         }
                        }); return false;
        } else {
            return false;
        }

    });
<?php endforeach; ?>
});
</script>

Моя проблема в том, что код удаляет запись только тогда, когда я на странице 2 и далее. Но когда я нахожусь на странице 1, сценарий просто не работает.

1 Ответ

1 голос
/ 10 марта 2011

Я не вижу проблемы сразу.Однако, на мой взгляд, вы неправильно используете CodeIgniter и Jquery, поэтому я просто дам вам несколько советов.

Прежде всего Codeigniter использует шаблон MVC, как вы, вероятно, знаете.И представление на самом деле не предназначено для SQL.Более того, в большинстве случаев контроллер даже не используется для SQL.Вы должны попытаться сохранить SQL в моделях.

Еще одна маленькая вещь Codeigniter.Я думаю, что лучше использовать:

function index($page=0) {

А потом:

$data['books'] = $this->db->get('tbl_books',$config['per_page'], $page);

Вместо использования $ this-> uri-> сегмент (3)

Во-вторых, выследует использовать Jquery «динамический» тоже.Теперь вы создаете функцию для каждой книги, в то время как вы всегда хотите выполнять одно и то же действие.

Добавить класс:

<a href="" id="remove-<?=$row->id?>" class="book-remove">remove</a>

Тогда как JS:

<script type="text/javascript">
    $(document).ready(function() {
        $('.book-remove').each(function() {
            $(this).click(function() {

            var stats = confirm('Are you sure you want to delete this entry?');

            if(stats) {
                var bookID = $(this).attr("id").replace("remove-", "");
                $('#action'+bookID).hide();
                $('#ajax-load-'+bookID).show();

                $.ajax({
                    type: 'POST',
                    url: "<?=base_url()?>bookacts/delbook/",
                    data: ({id: bookID}),
                    cache: false,
                    success: function (msg){

                        if(msg == ""){
                            $('#ajax-load-'+bookID).hide();
                            $('.box-error').fadeIn("slow");
                            $('#action-'+bookID).fadeIn();
                        } else {
                            $('#ajax-load-'+bookID).hide();
                            $('.box-success').fadeIn("slow")
                                 .animate({opacity: 1.0}, 2000)
                                 .fadeOut('slow');
                            $('#action-'+bookID).fadeIn();
                        }
                    }
                }); return false;
            } else {
                return false;
            }
        });
    });
</script>

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

Просто просмотрите исходный код, если javascript правильный (с идентификаторами) Проверьте, если вы даже получаете сообщение подтверждения JS.Проверьте, работает ли AJAX, сделайте несколько предупреждений.Проверьте, есть ли ошибка JavaScript.И т.д.

Удачи.

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