Monday, 2 December 2024

DAY13 แบ่ง segment เพจให้ง่ายต่อการทำงาน

05 Nov 2024
22
luminox watches

สวัสดีครับสำหรับวันนี้เราจะมาแบ่งหน้าเว็บออกเป็นส่วนๆ เป็ฯ header,footer,sidebar กันนะครับเพื่อให้ง่ายต่อการแก้ไขใช้งานกัน โดยเริ่มจาก สร้าง folder body ที่ admin ก่อน จากนั้นก็สร้างไฟล์ header.blade.php, sidebar.blade.php, footer.blade.php, navbar.blade.php กันครับ

cerate-segment-page

cerate-segment-page

จากนั้นก็ cut html ที่ไฟล์ admin_dashboard.blade.php แต่ละจุดไปไว้ที่ไฟล์แต่ละตัวกันครับ แล้วก็ทำการ @include เข้ามา

include-for-segment-page

include-for-segment-page

 

คำสั่ง @include('admin.body.sidebar') ใน Laravel Blade เป็นคำสั่งที่ใช้ในการ รวม (include) เนื้อหาจากไฟล์ View อื่นมาแสดงในตำแหน่งที่คำสั่งนั้นถูกเรียกใช้ ซึ่งช่วยให้สามารถจัดการกับโครงสร้างและส่วนต่าง ๆ ของหน้าเว็บได้อย่างสะดวกมากขึ้น โดยไม่ต้องเขียนโค้ดซ้ำหลายครั้ง

การทำงานของ @include ใน Laravel:

  1. @include(‘admin.body.sidebar’) หมายถึงการรวมไฟล์ View ที่มีชื่อว่า sidebar.blade.php ซึ่งอยู่ในโฟลเดอร์ resources/views/admin/body/ มาแสดงในไฟล์ที่เรียกคำสั่งนี้
  2. Laravel จะไปค้นหาไฟล์ที่ถูกระบุใน @include ในโฟลเดอร์ที่ตรงกับเส้นทางที่ให้ไว้ เช่น admin.body.sidebar หมายถึงการค้นหาไฟล์ sidebar.blade.php ในโฟลเดอร์ resources/views/admin/body/

ตัวอย่าง:

สมมุติว่าเรามีโครงสร้างไฟล์ดังนี้:

resources/
└── views/
└── admin/
└── body/
└── sidebar.blade.php
└── dashboard.blade.php

เนื้อหาของไฟล์ sidebar.blade.php:

<!-- resources/views/admin/body/sidebar.blade.php -->
<div class="sidebar">
<ul>
<li><a href="/dashboard">Dashboard</a></li>
<li><a href="/settings">Settings</a></li>
<li><a href="/profile">Profile</a></li>
</ul>
</div>

เนื้อหาของไฟล์ dashboard.blade.php:

<!-- resources/views/admin/dashboard.blade.php -->
@extends('admin.layout')
@section(‘content’)
<h1>Welcome to the Dashboard</h1>
@include(‘admin.body.sidebar’) <!– รวม sidebar ที่นี่ –>
<p>This is the main content of the dashboard page.</p>
@endsection

วิธีการทำงาน:

  • เมื่อไฟล์ dashboard.blade.php ถูกโหลด (ผ่าน URL หรือการนำเข้า), Laravel จะทำการรวมไฟล์ sidebar.blade.php ที่อยู่ในโฟลเดอร์ resources/views/admin/body/ เข้าไปในตำแหน่งที่ใช้คำสั่ง @include('admin.body.sidebar').
  • ผลลัพธ์คือไฟล์ sidebar.blade.php จะถูกนำเข้ามาแสดงในหน้า dashboard.blade.php ในส่วนที่คุณใส่คำสั่ง @include.

การใช้ @include พร้อมกับข้อมูล:

หากคุณต้องการส่งข้อมูลไปยังไฟล์ที่รวมเข้ามา (เช่น การส่งค่าตัวแปรไปยัง sidebar.blade.php), คุณสามารถทำได้ดังนี้:

ตัวอย่างการส่งข้อมูล:

<!-- resources/views/admin/dashboard.blade.php -->
@extends('admin.layout')
@section(‘content’)
<h1>Welcome to the Dashboard</h1>
@include(‘admin.body.sidebar’, [‘user’ => $user]) <!– ส่งตัวแปร $user ไปยัง sidebar –>
<p>This is the main content of the dashboard page.</p>
@endsection

ในไฟล์ sidebar.blade.php, คุณสามารถใช้ตัวแปร user ที่ถูกส่งมาจากไฟล์ dashboard.blade.php ได้:

<!-- resources/views/admin/body/sidebar.blade.php -->
<div class="sidebar">
<ul>
<li><a href="/dashboard">Dashboard</a></li>
<li><a href="/settings">Settings</a></li>
<li><a href="/profile">{{ $user->name }}</a></li> <!-- ใช้ตัวแปร $user -->
</ul>
</div>

สรุป:

  • คำสั่ง @include('admin.body.sidebar') ใช้เพื่อรวมไฟล์ View อื่น ๆ เข้ามาในตำแหน่งที่ต้องการในไฟล์ Blade.
  • คุณสามารถส่งข้อมูลไปยังไฟล์ที่รวมเข้ามาได้โดยการส่งตัวแปรในรูปแบบของอาร์เรย์, เช่น @include('admin.body.sidebar', ['user' => $user]).
  • วิธีนี้ช่วยให้การจัดการและการใช้ซ้ำส่วนต่าง ๆ ของหน้าเว็บ (เช่น sidebar, header) ง่ายขึ้นและสะดวกมากขึ้น.

ความแตกต่างระหว่าง @include และ @yield:

คุณสมบัติ @include @yield
จุดประสงค์ ใช้เพื่อรวมไฟล์ View ย่อยเข้ามาในไฟล์หลัก. ใช้เพื่อสร้างช่องที่สามารถแทรกเนื้อหาจากไฟล์ลูก (child view).
การใช้ ใช้สำหรับรวมไฟล์ View ที่มีการกำหนดไว้. ใช้ใน layout สำหรับสร้างพื้นที่ที่สามารถแทนที่ด้วยเนื้อหาจาก child view.
การส่งข้อมูล สามารถส่งข้อมูลไปยังไฟล์ที่รวมได้ (@include('view', ['data' => $data])). ไม่สามารถส่งข้อมูลผ่าน @yield โดยตรง แต่ข้อมูลจะถูกส่งผ่านการใช้ @section.
ตัวอย่างการใช้งาน @include('admin.body.sidebar') @yield('content')
การทำงานร่วมกับ @section และ @extends ไม่เกี่ยวข้องกับการขยาย layout หรือ sections. ใช้ร่วมกับ @extends และ @section เพื่อแทนที่เนื้อหาใน section.

สรุป:

  • @include: ใช้เพื่อรวมไฟล์ Blade อื่น ๆ เข้ามาในตำแหน่งที่ต้องการ (เหมาะสำหรับการรวมส่วนต่าง ๆ ที่ใช้ซ้ำ เช่น sidebar, footer, header).
  • @yield: ใช้เพื่อกำหนดพื้นที่สำหรับเนื้อหาที่จะถูกแทนที่ในไฟล์ layout (เหมาะสำหรับการสร้างโครงสร้างหน้าเว็บหลัก เช่น header, footer, และเนื้อหาหลักของแต่ละหน้า).
Thanat Sirikitphattana

แบ่งปันกัน เราอยู่กันไม่เกิน 100 ปีหรอกครับ
สุดท้ายก็ทิ้งไว้ที่โลก จะคงเหลือไว้แต่คุณงามความดีที่ให้ระลึกถึงกันครับ

Follow Us / Thanat Sirikitphattana