Перейти к содержанию

Рекомендуемые сообщения

Добрый вечер, дорогие друзья. Появилась проблема с 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, поэтому делал по аналогии с отзывами

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
9 часов назад, Dotrox сказал:

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

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

Это чат и есть. Внутри магазинный чат

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
9 минут назад, grechanyuk сказал:

Это чат и есть. Внутри магазинный чат

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
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 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.