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> <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!
Но если надо - все по аналогии описаного выше, только кроме файлов админки править надо и файлы View и design