
При создании админ панели сайта интернет магазина, была поставлена задача помечать новые поступившие заказы товаров, еще не просмотренные менеджерами магазина. К примеру, как на картинке, не обработанные, точнее не просмотренные менеджерами магазина товары в админ-панели сайта подсвечены значком зеленого цвета.
Реализовать это достаточно просто. Достаточно в поле таблицы, модели создать дополнительное поле, с булевым значением. И при первом просмотре информации, открытии страницы детальной информации, изменять данное значение на противоположное.
В данном примере, рассматривается внедрение указанного функционала. Для примера взята реализация просмотра заказов сделанных в один клик. По такому же принципу работают заказы товаров из корзины, обратного звонка, информация о новых подписчиках и другое. Данный функционал делает работу менеджеров магазина более удобной, так как информация требующая внимания, на пример о новых не обработанных заказах выделена и заметна.

А теперь более детально
Первоначально в таблицу базы данных с информацией о заказах, было добавлено поле типа – integer, беззнаковое unsigned, с название shown, со значением по дефолту: 0.
Учитывая, что на момент внедрения данного функционала, таблица данных уже была, была создана новая миграция для добавления данного поля.
Создаем миграцию.
php artisan make:migration add_field_shown_to_table_bookings --table=bookings
Миграция для добавления нового поля в таблицу.
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class AddFieldShownToTableBookings extends Migration
{
public function up()
{
Schema::table('booking', function (Blueprint $table) {
$table->integer('shown')->unsigned()->default(0);
});
}
public function down()
{
Schema::table('booking', function (Blueprint $table) {
$table->dropColumn('shown');
});
}
}
Теперь, при поступлении нового заказа, при сохранении данных в поле shown таблицы bookings сохраняется дефолтное значение 0, то есть информация не просмотрена.
Обработка информации о заказах производится контроллером: BookingController, в частности просмотр детальной информации методом контролера:
class BookingController extends Controller
{
//.......
public function detail($id)
{
$booking = Booking::where('id', '=', $id)->with('product')->first();
if($booking->shown == 0 ) {
$booking->shown++;
$booking->update();
}
return view('admin.store.booking.detail', compact('booking'));
}
//.......
}
Как вы можете видеть, после получения модели заказа, проводится проверка значения поля shown, и если данное значение соответствует 0, изменяется на 1 и сохраняется. Таким образом, после просмотре детальной информации о заказе, значение поля shown изменяется, что значит – просмотрено.
В Админ-панели, получение списка заказов осуществляется методом контроллера:
class BookingController extends Controller
{
//.......
public function list()
{
$bookings = Booking::with('product')->orderBy('id', 'desc')->paginate(40);
return view('admin.store.booking.index', compact('bookings'));
}
//.......
}
То есть, получаем данные, сортируем по ID и выводим данные с пагинацией во view – шаблоне, в виде таблицы.
Полный код шаблона я указывать не буду, покажу лишь часть кода, который выводит ячейку таблицы – с отметкой о просмотренном или нет заказе.
@foreach ($bookings as $booking)
//...
if($booking->shown == 0)
@else
@endif
//...
@endforeach
Тут происходит проверка, если значение модели $booking->shown == 0 – верно, в blade шаблоне отображается значок с css классом .green-icon, иначе с классом .pale-icon, то есть зеленый или бледно серого цвета.
Комментарии
Admin
Гость
Регистрация Войти