Simpla 2: дата доставки

Simpla 2: дата доставки

Дата публикации:
Поделиться:

Первым шагом добавим в базу поле для даты доставки. Выполним запрос

ALTER TABLE  `s_orders` ADD  `delivery_date` DATE NULL DEFAULT NULL AFTER  `delivery_price`

Теперь будет оперировать датой, записанной в поле delivery_date.

Открываем api/Orders.php (api работы с заказами). Находим в 2 местах (~строки 24 и 80) запросы с выборкой полей и заменяем

o.delivery_price

на

o.delivery_price, o.delivery_date

Теперь в этом же файле сразу включим фильтрацию по датам доставки, чтобы иметь возможность выбирать число в заказах. Все правки в этом файле вносятся в 2 метода - выборки заказов get_orders и подсчета количества заказов count_orders. После кода (строки 42 и 100)

        $label_filter = ''; 

добавим инициализацию фильтрового значения

        $delivery_filter = '';

Перед кодом (строки 57 и 130)

        if(isset($filter['status']))

добавим обработчик параметра фильтра delivery

        if(isset($filter['delivery']))
            switch ($filter['delivery']){
                case 'today':
                    $delivery_filter = 'AND DATE(o.delivery_date) = DATE(NOW())';
                    break;
                case 'yesterday':
                    $delivery_filter = 'AND DATE(o.delivery_date) = DATE(DATE_SUB(NOW(),INTERVAL 1 DAY))';
                    break;
                case 'tomorrow':
                    $delivery_filter = 'AND DATE(o.delivery_date) = DATE(DATE_ADD(NOW(),INTERVAL 1 DAY))';
                    break;
                case 'past':
                    $delivery_filter = 'AND DATE(o.delivery_date) < DATE(NOW())';
                    break;
                case 'future':
                    $delivery_filter = 'AND DATE(o.delivery_date) > DATE(NOW())';
                    break;                                                                                                                                               
            } 

Далее добавим этот фильтр в наш запрос - заменим код (строки 106 и 162)

$label_filter

на код

$label_filter $delivery_filter

С этим файлом все. Переходим к файлам админки.

Открываем файл simpla/OrderAdmin.php и в нем после (строка 24)

            $order->delivery_price = $this->request->post('delivery_price', 'float');

добавляем

            $delivery_date = $this->request->post('delivery_date');
            if($delivery_date != '') $order->delivery_date = date("Y-m-d",strtotime($delivery_date));

Поправим шаблон simpla/design/html/order.tpl для этого раздела админки. Перед кодом (строка 134)

    {if $labels}
    <div class='layer'>

добавим поле указания даты

	<div class='layer'>
	<p style="margin-bottom: 12px;"><label>Дата доставки</label>&nbsp;<input type=text name=delivery_date value='{$order->delivery_date|date}'></p>
	</div>

И далее уже в разделе яваскриптов подключим календарик на это поле. После (384 строка)

<script src="design/js/autocomplete/jquery.autocomplete-min.js"></script>

добавим

<script src="design/js/jquery/datepicker/jquery.ui.datepicker-ru.js"></script>

Теперь прикрепим календарь к нашему полю даты доставки - после кода (395 строка)

$(function() {

добавим код

   $('input[name="delivery_date"]').datepicker({regional:'ru'});

С этим файлом все. Переходим к файлу simpla/design/html/orders.tpl. Перед кодом (строка 151)

    {if $labels}

добавим вывод фильтров

    <h4>Доставка</h4>
    <ul id="status-order">
         <li {if !$delivery}class="selected"{/if}><a href="{url delivery=null}">Все заказы</a></li>       
        <li {if $delivery=='yesterday'}class="selected"{/if}><a href="{url delivery='yesterday'}">Вчера</a></li>
        <li {if $delivery=='today'}class="selected"{/if}><a href="{url delivery='today'}">Сегодня</a></li>
        <li {if $delivery=='tomorrow'}class="selected"{/if}><a href="{url delivery='tomorrow'}">Завтра</a></li>
        <li {if $delivery=='future'}class="selected"{/if}><a href="{url delivery='future'}">Будущие</a></li>
        <li {if $delivery=='past'}class="selected"{/if}><a href="{url delivery='past'}">Просроченные</a></li>
    </ul>

Ну и для чистоты выведем в каждом заказе дату доставки. Перед кодом (строка 82)

                     {if $order->note}

добавим код

                    {if $order->delivery_date}<p>Дата доставки: <b>{$order->delivery_date|date}</b></p>{/if}

И последним файлом для правок будет файл simpla/OrdersAdmin.php - в нем нам надо обработать входные данные по фильтрации. Перед кодом (строка 23)

		// Фильтр по метке
	  	$label = $this->orders->get_label($this->request->get('label'));	

добавим

        // Фильтр под дате доставки
        $delivery_filter = $this->request->get('delivery');    
        if(!empty($delivery_filter))
        {
            $filter['delivery'] = $delivery_filter;
            $this->design->assign('delivery', $filter['delivery']);
        } 

Вот и все решение. При первом первом открытии нового заказа проставляется сегодняшняя дата и при сохранении заказа она вписывается автоматом.

Приятной работы с SimplaCMS!

Отзывы

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

Модули из этой тематики