Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Ajax пагинация


Recommended Posts

Добрый вечер, дорогие друзья. Появилась проблема с ajax пагинацией. Если она включена, то переход на следующую страницу не работает. Часть дива просто обновляется. Если ее отключить - работает.

Контроллер

public function chat () {
        $this->load->model('catalog/admin_chat');
        $vendor_id = $this->user->getId();
        $this->load->language('catalog/admin_chat');

        if (isset($this->request->get['page'])) {
                   $page = $this->request->get['page'];
       } else {
                   $page = 1;
             }

        $data['chats'] = array();

        $chats = $this->model_catalog_admin_chat->getMessages($this->request->get['vendor_id'], $this->request->get['customer_id'], $this->request->get['order_id'], ($page - 1) * 5, 5);

        foreach ($chats as $chat) {
            if ($chat['who'] == '1') {
                $class = 'admin_chat';
            } elseif ($chat['who'] == '2') {
                $class = 'vendor_chat';
            } else {
                $class = 'customer_chat';
            }
            $data['chats'][] = array (
                'text'                  => $chat['text'],
                'sender'                => $chat['sender'],
                'date_modificated'      => $chat['date_modificated'],
                'class'                 => $class
            );

        }

        $product_id = (int)$this->request->get['product_id'];
        $order_id = (int)$this->request->get['order_id'];
        $customer_id = (int)$this->request->get['customer_id'];
        $vendor_id = (int)$this->request->get['vendor_id'];
        $token = $this->session->data['token'];

        $message_total = $this->model_catalog_admin_chat->getTotalMessages($vendor_id, $customer_id, $order_id);

        $pagination = new Pagination();
              $pagination->total = $message_total;
            $pagination->page = $page;
          $pagination->limit = 5;
        $pagination->url = $this->url->link('catalog/admin_chat/chat', 'product_id=' . $product_id . '&customer_id=' . $customer_id . '&order_id=' . $order_id  . '&vendor_id=' . $vendor_id . '&token=' . $token . '&page={page}');

           $data['pagination'] = $pagination->render();

        $this->response->setOutput($this->load->view('catalog/admin_chat_chat', $data));
    }

Модель:

 public function getMessages ($vendor_id, $customer_id, $order_id, $start = 0, $limit = 5) {
               if ($start < 0) {
                $start = 0;
           }

            if ($limit < 1) {
              $limit = 5;
           }

        $query = $this->db->query("SELECT vendor_id, product_id, order_id, customer_id, sender, date_modificated, text, who FROM " . DB_PREFIX . "chats WHERE vendor_id = '" . (int)$vendor_id ."' AND customer_id = '" . (int)$customer_id ."' AND order_id = '" . (int)$order_id . "' ORDER BY date_modificated LIMIT " . (int)$start . "," . (int)$limit);

        return $query->rows;
    }

TPL:

<?php echo $header; ?><?php echo $column_left; ?>
<div id="content">
    <div class="page-header">
        <div class="container-fluid">
            <h1><?php echo $heading_title_form; ?></h1>
            <ul class="breadcrumb">
                <?php foreach ($breadcrumbs as $breadcrumb) { ?>
                    <li><a href="<?php echo $breadcrumb['href']; ?>"><?php echo $breadcrumb['text']; ?></a></li>
                <?php } ?>
            </ul>
        </div>
    </div>
    <div class="container-fluid">
        <div id="chat"></div>
        <div class="tab-pane" id="tab-review">
            <div id="collapseOne" class="panel-collapse">
                <div class="well message-helper">
                    <form class="form-horizontal" id="message-form">
                        <div class="form-group required">
                            <label class="col-sm-2 control-label" for="input-message"><?php echo $entry_message; ?></label>
                            <div class="col-sm-10">
                                <textarea name="text" rows="2" id="input-message" class="form-control" onkeydown="keyDown(event)" onkeyup="keyUp(event)"></textarea>
                            </div>
                        </div>
                        <div class="form-group" style="margin-bottom: 0;">
                            <div class="col-sm-10 col-sm-offset-2">
                                <button type="button" id="button-message" data-loading-text="<?php echo $text_loading; ?>" class="btn btn-primary"><?php echo $button_continue; ?></button>
                            </div>
                        </div>
                    </form>
                </div>
            </div>
        </div>
    </div>

</div>

<script type="text/javascript">
    function keyDown(e){
        if(e.keyCode == 17)
            ctrl = true;
        else if(e.keyCode == 13 && ctrl)
            document.getElementById("button-message").click();
    }
    function keyUp(e){
        if(e.keyCode == 17)
            ctrl = false;
    }

    $('#chat').delegate('.pagination a', 'click', function(e) {
        e.preventDefault();

        $('#chat').fadeOut('slow');

        $('#chat').load(this.href);

        $('#chat').fadeIn('slow');
    });
    function show() {
        $('#chat').load('index.php?route=catalog/admin_chat/chat&product_id=<?php echo $product_id; ?>&customer_id=<?php echo $customer_id; ?>&order_id=<?php echo $order_id; ?>&vendor_id=<?php echo $vendor_id; ?>&token=<?php echo $token; ?>');
    }
    $(document).ready(function(){
        show();
        setInterval('show()',1000);
    });
    $('#button-message').on('click', function() {
        $.ajax({
            url: 'index.php?route=catalog/admin_chat/write&product_id=<?php echo $product_id; ?>&customer_id=<?php echo $customer_id; ?>&order_id=<?php echo $order_id; ?>&vendor_id=<?php echo $vendor_id; ?>&token=<?php echo $token; ?>',
            type: 'post',
            dataType: 'json',
            data: $('#message-form').serialize(),
            beforeSend: function() {
                $('#button-message').button('loading');
            },
            complete: function() {
                $('#button-message').button('reset');
            },
            success: function(json) {
                $('.alert-success, .alert-danger').remove();

                if (json['error']) {
                    $('.message-helper').before('<div class="alert alert-danger"><i class="fa fa-exclamation-circle"></i> ' + json['error'] + '<button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button></div>');
                }

                if (json['success']) {
                    $('#chat').load('index.php?route=catalog/admin_chat/chat&product_id=<?php echo $product_id; ?>&customer_id=<?php echo $customer_id; ?>&order_id=<?php echo $order_id; ?>&vendor_id=<?php echo $vendor_id; ?>&token=<?php echo $token; ?>');

                    $('textarea[name=\'text\']').val('');
                }
            }
        });
    });
</script>

Я не очень силен в JS, поэтому делал по аналогии с отзывами

Надіслати
Поділитися на інших сайтах


1 час назад, grechanyuk сказал:

Я не очень силен в JS, поэтому делал по аналогии с отзывами

А это пагинация чего должна быть?

Вы выложили код от какого-то чата.

Надіслати
Поділитися на інших сайтах


5 часов назад, Dotrox сказал:

А при чём тут тогда пагинация? В чатах пагинации не бывает.

Длинная переписка - постраничная навигация. Если у Вас есть вариант лучше - я открыт предложениям)

Но так или иначе: по моему вопросу не подскажите?

Надіслати
Поділитися на інших сайтах


6 часов назад, grechanyuk сказал:

Длинная переписка - постраничная навигация. Если у Вас есть вариант лучше - я открыт предложениям)

Посмотрите на любой мессенджер: никакой пагинации - только бесконечная лента с подгрузкой при прокрутке.

 

 

6 часов назад, grechanyuk сказал:

Но так или иначе: по моему вопросу не подскажите?

Я не уверен, какой эффект вы хотите получить, но вот это:

 

$('#chat').load(this.href);

Просто загрузит кусок html по соответствующей ссылке и воткнёт его весь в блок #chat, при этом удалив всё содержимое этого блока, которое было изначально.

И как я понимаю, тот кусок html - это весь ваш шаблон чата, а вам нужны только сообщения.

Чтоб вставить сообщения, нужно грузить так:

 

$('#chat').load(this.href + ' #chat > *');

 

 

Но! Это только часть проблемы. Вторая часть проблемы в том, что у вас в шаблоне сообщения вообще не выводятся!

<div id="chat"></div>

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

 

 

Надіслати
Поділитися на інших сайтах


17 часов назад, Dotrox сказал:

 

Но! Это только часть проблемы. Вторая часть проблемы в том, что у вас в шаблоне сообщения вообще не выводятся!


<div id="chat"></div>

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

 

 

для этого есть отдельный tpl, все выводится через php массив. Он работает, поэтому я его сюда не стал приписывать

а по поводу подгрузки сообщений при пролистывании - я согласен, но, как я уже писал - я не силен в js, поэтому я тупо не знаю как это правильно реализовать)

Змінено користувачем grechanyuk
Надіслати
Поділитися на інших сайтах


1 час назад, grechanyuk сказал:

для этого есть отдельный tpl, все выводится через php массив. Он работает, поэтому я его сюда не стал приписывать

Я в вашем контроллере вижу использование только одного шаблона! Если вы говорите, что оно работает, значит всё, что вы выложили не имеет смыла, ибо контроллер, который вы выложили работает только с шаблоном, который вы выложили и js в этом шаблоне всё время обращается только к этому контроллеру.

 

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

Правда, не факт, что вы выложили именно тот шаблон, который использует выложенный контроллер, но тогда совсем дебилизм получается!

Надіслати
Поділитися на інших сайтах


3 часа назад, Dotrox сказал:

Я в вашем контроллере вижу использование только одного шаблона! Если вы говорите, что оно работает, значит всё, что вы выложили не имеет смыла, ибо контроллер, который вы выложили работает только с шаблоном, который вы выложили и js в этом шаблоне всё время обращается только к этому контроллеру.

 

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

Правда, не факт, что вы выложили именно тот шаблон, который использует выложенный контроллер, но тогда совсем дебилизм получается!

Послушайте, код весь есть. Это далеко не весь контроллер. Я не вижу смысла засирать форум лишним кодом, который и так работает. Первая страница сообщений выводится - я это уже говорил, не выводятся последующие. Но если убрать JS код, который отвечает за пагинацию, то перелистывание идет нормально

Надіслати
Поділитися на інших сайтах


10 минут назад, grechanyuk сказал:

Послушайте, код весь есть. Это далеко не весь контроллер. Я не вижу смысла засирать форум лишним кодом, который и так работает.

Вы тему создали, чтоб поморочить людям голову?

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

 

Если вы так уверены, что для решения проблемы достаточно исключительно тех кусков кода, который вы выложили, так, может, вы и решение сами знаете? А если нет, то на чём основаны ваши утверждения?

 

 

14 минут назад, grechanyuk сказал:

если убрать JS код, который отвечает за пагинацию, то перелистывание идет нормально

Потому что без аякса за вывод сообщений отвечает как раз тот кусок кода, который вы не выложили!

А тот код который вы выложили, ни в каком формате не будет выводить сообщения - нет в нём вывода, в принципе! Формирование массива с сообщениями в контроллере есть, а вывода содержимого этого массива - нет.

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.