×

Как выделить новые сообщения и заказы интернет-магазина на Laravel

Как выделить новые сообщения и заказы интернет-магазина на Laravel

При создании админ панели сайта интернет магазина, была поставлена задача помечать новые поступившие заказы товаров, еще не просмотренные менеджерами магазина. К примеру, как на картинке, не обработанные, точнее не просмотренные менеджерами магазина товары в админ-панели сайта подсвечены значком зеленого цвета.

Реализовать это достаточно просто. Достаточно в поле таблицы, модели создать дополнительное поле, с булевым значением. И при первом просмотре информации, открытии страницы детальной информации, изменять данное значение на противоположное.

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

Админ панель сайта

А теперь более детально

Первоначально в таблицу базы данных с информацией о заказах, было добавлено поле типа – 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)
            <span class="green-icon"><i class="fas fa-circle"></i></span>
        @else
            <span class="pale-icon"><i class="far fa-circle"></i></span>
        @endif
		
	//... 	
@endforeach

Тут происходит проверка, если значение модели $booking->shown == 0 – верно, в blade шаблоне отображается значок с css классом .green-icon, иначе с классом .pale-icon, то есть зеленый или бледно серого цвета.

Автор: Максим Волков

Категории

Laravel

Комментарии