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

Помочь в доработке самописа-костыля для звука в админке после оформления заказа


Recommended Posts

Здравствуйте.
Таки попытался сделать функцию проигрывания звука в админке на главной странице при поступлении заказа.

Все работает, но только не могу корректно получить ид последнего заказа. на главной выводятся 5 последних заказов, и почему то опенкарт при таком коде выводит последний 5й ид заказа.

../public_html/admin/controller/extension/dashboard/recent.php
 

<?php
class ControllerExtensionDashboardRecent extends Controller {
	private $error = array();

	public function index() {
		$this->load->language('extension/dashboard/recent');

		$this->document->setTitle($this->language->get('heading_title'));

		$this->load->model('setting/setting');

		if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validate()) {
			$this->model_setting_setting->editSetting('dashboard_recent', $this->request->post);

			$this->session->data['success'] = $this->language->get('text_success');

			$this->response->redirect($this->url->link('extension/extension', 'token=' . $this->session->data['token'] . '&type=dashboard', true));
		}

		$data['heading_title'] = $this->language->get('heading_title');
		
		$data['text_edit'] = $this->language->get('text_edit');
		$data['text_enabled'] = $this->language->get('text_enabled');
		$data['text_disabled'] = $this->language->get('text_disabled');

		$data['entry_width'] = $this->language->get('entry_width');
		$data['entry_status'] = $this->language->get('entry_status');
		$data['entry_sort_order'] = $this->language->get('entry_sort_order');

		$data['button_save'] = $this->language->get('button_save');
		$data['button_cancel'] = $this->language->get('button_cancel');

		if (isset($this->error['warning'])) {
			$data['error_warning'] = $this->error['warning'];
		} else {
			$data['error_warning'] = '';
		}

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

		$data['breadcrumbs'][] = array(
			'text' => $this->language->get('text_home'),
			'href' => $this->url->link('common/dashboard', 'token=' . $this->session->data['token'], true)
		);

		$data['breadcrumbs'][] = array(
			'text' => $this->language->get('text_extension'),
			'href' => $this->url->link('extension/extension', 'token=' . $this->session->data['token'] . '&type=dashboard', true)
		);

		$data['breadcrumbs'][] = array(
			'text' => $this->language->get('heading_title'),
			'href' => $this->url->link('extension/dashboard/recent', 'token=' . $this->session->data['token'], true)
		);

		$data['action'] = $this->url->link('extension/dashboard/recent', 'token=' . $this->session->data['token'], true);

		$data['cancel'] = $this->url->link('extension/extension', 'token=' . $this->session->data['token'] . '&type=dashboard', true);

		if (isset($this->request->post['dashboard_recent_width'])) {
			$data['dashboard_recent_width'] = $this->request->post['dashboard_recent_width'];
		} else {
			$data['dashboard_recent_width'] = $this->config->get('dashboard_recent_width');
		}

		$data['columns'] = array();
		
		for ($i = 3; $i <= 12; $i++) {
			$data['columns'][] = $i;
		}
				
		if (isset($this->request->post['dashboard_recent_status'])) {
			$data['dashboard_recent_status'] = $this->request->post['dashboard_recent_status'];
		} else {
			$data['dashboard_recent_status'] = $this->config->get('dashboard_recent_status');
		}

		if (isset($this->request->post['dashboard_recent_sort_order'])) {
			$data['dashboard_recent_sort_order'] = $this->request->post['dashboard_recent_sort_order'];
		} else {
			$data['dashboard_recent_sort_order'] = $this->config->get('dashboard_recent_sort_order');
		}

		$data['header'] = $this->load->controller('common/header');
		$data['column_left'] = $this->load->controller('common/column_left');
		$data['footer'] = $this->load->controller('common/footer');

		$this->response->setOutput($this->load->view('extension/dashboard/recent_form', $data));
	}

	protected function validate() {
		if (!$this->user->hasPermission('modify', 'extension/analytics/google_analytics')) {
			$this->error['warning'] = $this->language->get('error_permission');
		}

		return !$this->error;
	}
	
	public function dashboard() {
		$this->load->language('extension/dashboard/recent');

		$data['heading_title'] = $this->language->get('heading_title');

		$data['text_no_results'] = $this->language->get('text_no_results');

		$data['column_order_id'] = $this->language->get('column_order_id');
		$data['column_customer'] = $this->language->get('column_customer');
		$data['column_status'] = $this->language->get('column_status');
		$data['column_date_added'] = $this->language->get('column_date_added');
		$data['column_total'] = $this->language->get('column_total');
		$data['column_action'] = $this->language->get('column_action');

		$data['button_view'] = $this->language->get('button_view');

		$data['token'] = $this->session->data['token'];

		// Last 5 Orders
		$data['orders'] = array();

		$filter_data = array(
			'sort'  => 'o.date_added',
			'order' => 'DESC',
			'start' => 0,
			'limit' => 5
		);

		$this->load->model('sale/order');
		
		$results = $this->model_sale_order->getOrders($filter_data);

		foreach ($results as $result) {
			$data['orders'][] = array(
				'order_id'   => $result['order_id'],
				'customer'   => $result['customer'],
				'status'     => $result['order_status'],
				'date_added' => date($this->language->get('date_format_short'), strtotime($result['date_added'])),
				'total'      => $this->currency->format($result['total'], $result['currency_code'], $result['currency_value']),
				'view'       => $this->url->link('sale/order/info', 'token=' . $this->session->data['token'] . '&order_id=' . $result['order_id'], true),
			);
		}
		
		$data['zvuk1'] = $result['order_id'] + '5';

		return $this->load->view('extension/dashboard/recent_info', $data);
	}
}


Как видно из кода, добавил $data['zvuk1'] = $result['order_id'] + '5';
+5 сделал так как вместо 140 ида берет 135, и чтобы уровнять суммирую +5.

Код ../admin/view/template/extension/dashboard/recent_info.tpl

<script type="text/javascript">
    function getCookie(startzvuk) {
    var cookie = " " + document.cookie;
    var search = " " + startzvuk + "=";
    var setStr = null;
    var offset = 0;
    var end = 0;
    if (cookie.length > 0) {
        offset = cookie.indexOf(search);
        if (offset != -1) {
            offset += search.length;
            end = cookie.indexOf(";", offset)
            if (end == -1) {
                end = cookie.length;
            }
            setStr = unescape(cookie.substring(offset, end));
        }
    }
    return(setStr);
}
</script>
<script type="text/javascript">
    function getCookie(panelzvuk) {
    var cookie = " " + document.cookie;
    var search = " " + panelzvuk + "=";
    var setStr = null;
    var offset = 0;
    var end = 0;
    if (cookie.length > 0) {
        offset = cookie.indexOf(search);
        if (offset != -1) {
            offset += search.length;
            end = cookie.indexOf(";", offset)
            if (end == -1) {
                end = cookie.length;
            }
            setStr = unescape(cookie.substring(offset, end));
        }
    }
    return(setStr);
}
</script>
<script type="text/JavaScript"> 
  $(document).ready(function (){
  var startzvuk= getCookie("startzvuk");
      if(startzvuk == 'on'){
        var panelzvuk= getCookie("panelzvuk");
        var date = new Date(new Date().getTime() + 5000 * 5000 * 5000);
        var audio = new Audio('/image/catalog/samzvuk.mp3');
        var zvukid= <?php echo $zvuk1; ?>;
        var superyo = document.getElementById('superyo');
            if(zvukid > panelzvuk){
                audio.play();
                document.cookie = "panelzvuk=<?php echo $zvuk1; ?>; path=/; expires=" + date.toUTCString();
                superyo.classList.remove('nn');
            } else {
                setTimeout(function(){
		            location.reload();
	            },10000)
            }
	    $('#timer_inp').removeClass('nn');
      } else {
        
      }
  });
  function zvukStart() {
    var date = new Date(new Date().getTime() + 5000 * 5000 * 5000);
    document.cookie = "startzvuk=on; path=/; expires=" + date.toUTCString();
    document.cookie = "panelzvuk=<?php echo $zvuk1; ?>; path=/; expires=" + date.toUTCString();
    location.reload();
  };
  function zvukStop() {
    var date = new Date(new Date().getTime() + 5000 * 5000 * 5000);
    document.cookie = "startzvuk=off; path=/; expires=" + date.toUTCString();
    location.reload();
  };
  function hiddesuper() {
    $('#superyo').addClass('nn');
  };
</script>



<div class="panel panel-default">
  <div class="panel-heading">
    <h3 class="panel-title"><i class="fa fa-shopping-cart"></i> <?php echo $heading_title; ?></h3>
    <a id="startzvuk" onclick="zvukStart()" style="cursor:pointer"><i class="fa fa-play-circle" aria-hidden="true"></i> Включить мониторинг</a>
    <a id="stoptzvuk" onclick="zvukStop()" style="cursor:pointer"><i class="fa fa-minus-circle" aria-hidden="true"></i> Отключить мониторинг</a>
    <script type="text/javascript">
function timer(){
 var obj=document.getElementById('timer_inp');
 obj.innerHTML--;
 
 if(obj.innerHTML==0){setTimeout(function(){},1000);}
 else{setTimeout(timer,1000);}
}
setTimeout(timer,1000);
</script>
<div id="timer_inp" class="nn">10</div>
<div id="superyo" class="nn" onclick="hiddesuper()">Хорошие новости! Вы получили один или несколько новых заказов.<br>Проверьте список заказов в разделе: Продажи > Заказы.</div>
<style>
#timer_inp {float: right;
    background-color: #f56b6b;
    color: white;
    font-weight: 700;
    font-size: 14px;
    width: 20px;
    height: 20px;
    text-align: center;
    border-radius: 50%;}
#superyo {position: fixed;
    bottom: 5%;
    left: 5%;
    background-color: #f56b6b;
    color: white;
    padding: 20px;
    z-index: 1000;
    font-size: 20px;
    font-weight: 100;}
.nn {display:none;}
</style>
  </div>
  <div class="table-responsive">
    <table class="table">
      <thead>
        <tr>
          <td class="text-right"><?php echo $column_order_id; ?></td>
          <td><?php echo $column_customer; ?></td>
          <td><?php echo $column_status; ?></td>
          <td><?php echo $column_date_added; ?></td>
          <td class="text-right"><?php echo $column_total; ?></td>
          <td class="text-right"><?php echo $column_action; ?></td>
        </tr>
      </thead>
      <tbody>
        <?php if ($orders) { ?>
        <?php foreach ($orders as $order) { ?>
        <tr>
          <td class="text-right"><?php echo $order['order_id']; ?></td>
          <td><?php echo $order['customer']; ?></td>
          <td><?php echo $order['status']; ?></td>
          <td><?php echo $order['date_added']; ?></td>
          <td class="text-right"><?php echo $order['total']; ?></td>
          <td class="text-right"><a href="<?php echo $order['view']; ?>" data-toggle="tooltip" title="<?php echo $button_view; ?>" class="btn btn-info"><i class="fa fa-eye"></i></a></td>
        </tr>
        <?php } ?>
        <?php } else { ?>
        <tr>
          <td class="text-center" colspan="6"><?php echo $text_no_results; ?></td>
        </tr>
        <?php } ?>
      </tbody>
    </table>
  </div>
</div>

 

 

Подскажите пожалуйста как брать именно последний ид, а не последний 5й ид? 
Есть вариант  'limit' => указать 1, и тогда не нужно суммировать. Но тогда на главной выводиться только 1 последний заказ.

$filter_data = array(
            'sort'  => 'o.date_added',
            'order' => 'DESC',
            'start' => 0,
            'limit' => 1
        );
 

Понимаю что код костыльный, но это единственный бесплатный вариант для Opencart 2.3.0.2

 

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


как это выглядит: https://prnt.sc/qrytds
и когда срабатывает: https://prnt.sc/qryu0b
ну и естественно проигрывается звук. Если кто хочет себе такое, не забудьте заменить в коде адрес нужного файла звука: 
 

var audio = new Audio('/image/catalog/samzvuk.mp3');

 

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


8 минут назад, iPython сказал:

Как минимум можно сделать запрос на получения id.

 

 

Если я обратил Ваше внимание на участок "кода", как Вы думаете, не спроста ли я это сделал?

 

Извините если я чего то не понимаю, в просто в этом не силен, делаю в меру своих возможностей...
Нужно что то так?: $data['zvuk1'] = $result['last_order_id'];

или что то типа того: $data['zvuk1'] = $result['order_id'][0];

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


Вам каждый раз нужно получать последний id со статусом новый, проверять в сессии сохраненное название
и выводить звук

Возможно, вам нужен аякс запрос по времени в фоне, чтобы он например раз в 5 минут проверял..
И... пробуйте , тренируйтесь, о результатах расскажете?
 

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

1 минуту назад, chukcha сказал:

Вам каждый раз нужно получать последний id со статусом новый, проверять в сессии сохраненное название
и выводить звук

Возможно, вам нужен аякс запрос по времени в фоне, чтобы он например раз в 5 минут проверял..
И... пробуйте , тренируйтесь, о результатах расскажете?
 

 

значит средствами php это не реализовать и получить последний ид можно только если выводить на главной 1 последний заказ... жаль, ну ладно, всем спасибо за ответы.

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


12 минут назад, iPython сказал:

 

Вы пытаетесь проткнуть пальцем воздух?)

 

 

Тут Вы прибавляете к целому числу СТРОКУ. Да, в этом случае php поймёт и простит. Python в такой же ситуации сразу будет возмущаться.

 

 

 


я добавляю потому, что как и написал 3 предыдущих раза и прикрепил картинку, этот код без добавления возвращает 5й ид заказа вместо последнего. Сайт возвращает вместо ида последнего заказа, ид заказа 5 размещенного на 5 позиций ниже.

И еще раз наглядно: Последний ид заказа 100
Если сделать так: $result['order_id']; сайт на странице выводит почему то 95 вместо 100 поэтому я и добавляю недостающих 5
Если сделать так: $result['order_id'] + '5'; тогда выводит нужный номер заказа 100

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


Все это через функцию выше:
 

$filter_data = array(
			'sort'  => 'o.date_added',
			'order' => 'DESC',
			'start' => 0,
			'limit' => 5
		);

 

Можно сделать так:
 

$filter_data = array(
			'sort'  => 'o.date_added',
			'order' => 'DESC',
			'start' => 0,
			'limit' => 1
		);

и так:

$result['order_id'];


Но тогда на главной будут выводиться не все последние заказы, а только один.
 

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


Делал такое для 2.1.0.2.1.

admin/controller/sale/order.php

    public function getNew() {
        $this->load->model('sale/order');
        $this->response->addHeader('Content-Type: application/json');
        $this->response->addHeader('Cache-Control: no-cache, no-store, must-revalidate');
        $this->response->addHeader('Pragma: no-cache');
        $this->response->addHeader('Expires: 0');
        $this->response->addHeader('X-Robots-Tag: noindex, nofollow');
        $this->response->setOutput(json_encode($this->model_sale_order->getNewOrdersCount()));
    }

admin/model/sale/order.php

    public function getNewOrdersCount() {
        $result = array();
        $query = $this->db->query("SELECT COUNT(*) AS count FROM " . DB_PREFIX . "order WHERE order_status_id = 1");
        if($query->num_rows) {
            $result['count'] = $query->row['count'];
        } else {
            $result['count'] = 0;
        }
        
        $query = $this->db->query("SELECT order_id FROM " . DB_PREFIX . "order WHERE order_status_id = 1 ORDER BY order_id DESC LIMIT 1");
        if($query->num_rows) {
            $result['last_id'] = $query->row['order_id'];
        } else {
            $result['last_id'] = 0;
        }
        
        return $result;
    }

admin/view/javascript/common.js

вставить в блок $(document).ready(...

        // Новые заказы
        var new_orders_popup_opened = false,
            new_orders_query_pending = false,
            notify_sound = new Audio('view/sounds/notify.ogg');
        setInterval(function(){
            if(new_orders_popup_opened || new_orders_query_pending) {
                return;
            }
            new_orders_query_pending = true;
            $.get('index.php', {
                route: 'sale/order/getnew',
                token: getURLVar('token')
            }, function(data){
                new_orders_query_pending = false;
                if(typeof data !== 'object') {
                    return;
                }
                var count   = parseInt(data.count),
                    last_id = parseInt(data.last_id),
                    current_id = window.sessionStorage && parseInt(sessionStorage.getItem('lastOrderID')) || 0;
            
                // Обновить количество заказов в верхней панели
                $('#header .new-orders-count').text(count);
                // Всплывающее окно
                if(last_id > current_id) {
                    sessionStorage.setItem('lastOrderID', last_id);
                    if($('#new-orders-modal').length) {
                        $('#new-orders-modal .modal-body').html('<p>На сайте был оформлен новый заказ. Всего необработанных заказов: <b>' + count + '</b>.</p>');
                    } else {
                        $(document.body).append('\n\
<div id="new-orders-modal" class="modal fade" tabindex="-1" role="dialog">\n\
    <div class="modal-dialog" role="document">\n\
        <div class="modal-content">\n\
            <div class="modal-header">\n\
                <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>\n\
                <h4 class="modal-title">Оформлен новый заказ</h4>\n\
            </div>\n\
            <div class="modal-body">\n\
                <p>На сайте был оформлен новый заказ. Всего необработанных заказов: <b>' + count + '</b>.</p>\n\
            </div>\n\
            <div class="modal-footer">\n\
                <button type="button" class="btn btn-default" data-dismiss="modal">Закрыть</button>\n\
                <a class="btn btn-primary" href="index.php?route=sale/order&token=' + getURLVar('token') + '">Просмотреть заказы</a>\n\
            </div>\n\
        </div><!-- /.modal-content -->\n\
    </div><!-- /.modal-dialog -->\n\
</div><!-- /.modal -->\n\
');
                    }
                    $('#new-orders-modal').one('shown.bs.modal', function(){
                        new_orders_popup_opened = true;
                        notify_sound.play();
                    }).one('hidden.bs.modal', function(){
                        new_orders_popup_opened = false;
                    }).modal('show');
                }
            }, 'json');
        }, 30000);

 

  • +1 2
Надіслати
Поділитися на інших сайтах


iPython, я вам про картошку, вы мне про голубцы))

Спросил как вывести ид последнего заказа, вы мне о своих гениальных познаниях и игру в угадайку) Как вы думаете, если бы я знал ответ, я бы что то здесь писал?) Знаете ответ - подсказывайте, не знаете - лучше не пишите. Потому что с банальной проблемы, растянули тему на десятки сообщений. Только один человек написал решение, и то глобальное, по замене всего кода. В любом случае тема последнего ида не раскрыта. Установил лимит в 1 товар на главной и все, так как получить последний ид не получилось при 5 товарах. Столько проблем на форуме где по идее помогают а не хвастаться своими познаниями над другими участниками. Спасибо и удачи вам.

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


8 часов назад, sashamaximiv сказал:

iPython, я вам про картошку, вы мне про голубцы))

Спросил как вывести ид последнего заказа, вы мне о своих гениальных познаниях и игру в угадайку) Как вы думаете, если бы я знал ответ, я бы что то здесь писал?) Знаете ответ - подсказывайте, не знаете - лучше не пишите. Потому что с банальной проблемы, растянули тему на десятки сообщений. Только один человек написал решение, и то глобальное, по замене всего кода. В любом случае тема последнего ида не раскрыта. Установил лимит в 1 товар на главной и все, так как получить последний ид не получилось при 5 товарах. Столько проблем на форуме где по идее помогают а не хвастаться своими познаниями над другими участниками. Спасибо и удачи вам.

$data['zvuk1'] = $data['orders'][0]['order_id'];

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

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

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

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

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

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

Вхід

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

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

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

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

Important Information

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