วันพฤหัสบดีที่ 9 พฤษภาคม พ.ศ. 2556

Laravel::View Part1 The Basic


Views

               Views คือส่วนการแสดผลของเว็บไซต์ของเรานะครับ เราแยกออกมาเพื่อทำให้ง่ายต่อการจัดการได้ง่ายนะครับ ใน Laravel นี้จะมี template คือ blade engine ซึ่งจะไปพูดในบทพาร์ทหน้านะครับ ติดมาให้ด้วยเลย เรามาดูตัวอย่างกัน

สร้าง ไฟล์ index.html ขึ้นมาในโฟลเดอร์ home ที่เราสร้างขึ้นไว้ตรงที่ application/View มาสักไฟล์แล้วใส่โค้ดข้างล่างลงไปครับ

1.  <html>
2.      I'm stored in views/home/index.php!
3.  </html>

ต่อมาเราก็เข้าไปตั้งค่าใน Route นะครับ:

1.  Route::get('/', function()
2.  {
3.      return View::make('home.index');
4.  });

สร้างฟังชันขึ้นมารองรับค่าจาก view นั้น

1.  public function action_index()
2.  {
3.      return View::make('home.index');
4.  });

ใช้ฟังก์ชันข้างล่างตรวจว่ามี View อยู่ไหม

1.  $exists = View::exists('home.index');
 
 
 
 

Binding Data To Views

การส่งค่าจาก Controller หรือ Route  ขึ้นสู่ View ก็มีหลายวิธีเลยครับ
1.  Route::get('/', function()
2.  {
3.      return View::make('home')->with('name', 'James');
4.  });

ตัวแปร $name ที่มีค่าว่า jame ก็ถูกส่งมาละครับ:

1.  <html>
2.      Hello, <?php echo $name; ?>.
3.  </html>

สามารถส่งมาหลายๆตัวเลยก็ได้

1.  View::make('home')
2.      ->with('name', 'James')
3.      ->with('votes', 25);

ส่งมาเป็นอาเรย์

1.  View::make('home', array('name' => 'James'));

 

Nesting Views

ในเว็บเราจะมีส่วนหนึ่งอย่างเช่น Menu ที่เราต้องการแทรกไว้ทุกหน้า หรือว่าส่วนใดๆส่วนหนึ่งของ เว็บที่ต้องใช้ทุกหน้า เป็นส่วนที่อิสระจากหน้าหลักจะมีหรือไม่มีก็ได้ ใน Yii เรียก Partial ใน Cakephp เรียก Element ใน Laravel เรียก Nest ครับ

Binding a nested view using the "nest" method:

1.  View::make('home')->nest('footer', 'partials.footer');

Passing data to a nested view:

1.  $view = View::make('home');
2.   
3.  $view->nest('content', 'orders', array('orders' => $orders));
เราสามารถไปดึง View ของ  Controller อื่นมายัดลง View ของอีก Controller หนึ่งได้

โดยใช้ฟังก์ชัน Render

1.  <div class="content">
2.      <?php echo render('user.profile'); ?>
3.  </div>

เราสามารถใช้ partial view แสดงหลายอันได้โดยใช้ ฟัง render_each

1.  <div class="orders">
2.      <?php echo render_each('partials.order', $orders, 'order');
3.  </div>

พารามิเตอร์แรกเป็นชื่อของ partial view ตัวที่สองเป็นอาเรย์ของจ้อมูล ตัวที่สามเป็นตัวแปรที่เราจะฝากค่าจากตัวที่สองไปโชบน View

Named Views

คือการทำชื่อเล่นให้ View ครับ ข้างล่างเรา กำหนดให้ layout แทน layout.default
1.  View::name('layouts.default', 'layout');

of เป็นการเรียก ที่อยู่จริงของ layout คือ layouts.default 

1.  return View::of('layout');

สามารถแนบข้อมูลไปด้วยเลยก็ได้

1.  return View::of('layout', array('orders' => $orders));

View Composers

เมื่อเราใช้งาน composer ทุกครั้งที่มีการเรียก View มันจะถูกเรียกขึ้นมาด้วย เราสามารถใช้มันในการทำตัวแนะนำต่างๆ เช่น แนะนำเนื้อหาที่ใกล้เคียง. โดยผนวกความสามารถนี้เข้ากับ partial view เราต้องไปสร้างไว้ที่ application/routes.php.
ลองดูตัวอย่าง

ควบคุม  view ชื่อ home โดย composer

1.  View::composer('home', function($view)
2.  {
3.      $view->nest('footer', 'partials.footer');
4.  });
ถ้า home โหลดเสร็จแล้ว view ส่วน footer ก็จะตามมา

ให้ composer คุมหลายๆ view ได้นะครับ:

1.  View::composer(array('home', 'profile'), function($view)
2.  {
3.      //
4.  });

 ว่างเมื่อไหร่ผมจะมาต่อ เรื่อง blade template นะครับ

ไม่มีความคิดเห็น:

แสดงความคิดเห็น