FuelPHP - ธีม

ธีมใช้เพื่อเปิดใช้งานรูปลักษณ์ที่หลากหลายสำหรับแอปพลิเคชัน มีตัวเลือกสำหรับผู้ใช้ / ผู้พัฒนาในการเปลี่ยนรูปลักษณ์ของแอปพลิเคชันโดยไม่รบกวนการทำงานของแอปพลิเคชัน แอปพลิเคชันสามารถมีได้ตั้งแต่หนึ่งธีมขึ้นไป แต่ละธีมอยู่ในโฟลเดอร์ของตัวเอง ให้เราเรียนรู้วิธีสร้างธีมในบทนี้

การกำหนดค่าธีม

FuelPHP มีไฟล์การกำหนดค่าแยกต่างหากสำหรับธีม fuel/app/config/themes.php. การตั้งค่าที่เกี่ยวข้องกับธีมทั้งหมดได้รับการกำหนดค่าในไฟล์นี้ การตั้งค่าธีมหลักบางส่วนมีดังนี้ -

  • active - ชื่อของธีมที่ใช้งานอยู่

  • fallback - ชื่อของธีมทางเลือกหากไม่พบธีมที่ใช้งานอยู่

  • paths - อาร์เรย์ของเส้นทางในการค้นหาและค้นหาธีม

  • assets_folder- โดยปกติเนื้อหาต้องอยู่ใน DOCPATH จึงจะสามารถเข้าถึงได้ทางเว็บ หมายถึงโฟลเดอร์เนื้อหาสำหรับธีมภายใน DOCPATH

  • view_ext - ส่วนขยายของไฟล์มุมมองของธีม

  • info_file_name - ไฟล์ที่มีข้อมูลเพิ่มเติมเกี่ยวกับธีม

  • require_info_file - ต้องการไฟล์ข้อมูลธีมหรือไม่ info_file_name

  • use_modules - ไม่ว่าจะใช้โมดูลปัจจุบันหรือไม่

การกำหนดค่าอย่างง่ายสำหรับไฟล์ธีมมีดังนี้

<?php  
   return array ( 
      'active' => 'tpthemes', 
      'fallback' => 'tpthemes', 
      'paths' => array ( 
         APPPATH.'themes', 
      ), 
      'assets_folder' => 'assets', 
      'view_ext' => '.html', 
      'require_info_file' => false, 
      'info_file_name' => 'themeinfo.php', 
      'use_modules' => false, 
   );

ที่นี่เราได้ตั้งค่า

  • ชื่อของธีมที่แอ็คทีฟและทางเลือกเป็น tpthemes
  • เส้นทางของโฟลเดอร์ธีมเป็นเชื้อเพลิง / แอป / ธีม /
  • เส้นทางของโฟลเดอร์เนื้อหาเป็น / public / assets / tpthemes /

คลาสธีม

เมื่อกำหนดค่าเสร็จแล้วเราสามารถใช้คลาสซึ่งเป็นธีมที่ FuelPHP จัดเตรียมไว้เพื่อทำงานของธีมได้ แจ้งให้เราทราบเกี่ยวกับวิธีการที่มีอยู่ในคลาส Theme ในบทนี้

ตัวอย่าง

วิธีการอินสแตนซ์ช่วยให้สามารถสร้างธีมใหม่ มีสองพารามิเตอร์ต่อไปนี้

  • $name - ชื่อธีม (ไม่บังคับ)

  • $config - อาร์เรย์การกำหนดค่าธีม (เช่นเดียวกับที่เห็นในส่วนการกำหนดค่า)

พารามิเตอร์ทั้งสองเป็นทางเลือก หากไม่ได้ระบุพารามิเตอร์พารามิเตอร์จะพยายามรับธีมเริ่มต้นจากไฟล์คอนฟิกูเรชัน หากระบุชื่อธีมจะพยายามรับการตั้งค่าอื่น ๆ จากไฟล์คอนฟิกูเรชัน หากระบุคอนฟิกูเรชันด้วยก็จะใช้การตั้งค่าที่ผู้ใช้ระบุแทนการตั้งค่าจากไฟล์คอนฟิกูเรชัน

$theme = \Theme::instance(); 
$theme = \Theme::instance('tpthemes'); 
$theme = \Theme::instance ('mytheme', array ( 
   'active' => 'mytheme', 'view_ext' => '.php'));

ปลอม

การปลอมนั้นคล้ายกับอินสแตนซ์ยกเว้นว่าจะมีอาร์เรย์การกำหนดค่าเท่านั้น

$theme = \Theme::forge (array( 
   'active'   => 'tpthemes', 
   'fallback' => 'tpthemes', 
   'view_ext' => '.php', 
));

ดู

วิธีการดูใช้ไฟล์ View::forge()ในพื้นหลัง. API ทั้งสองเหมือนกันยกเว้นวิธีการดูค้นหาไฟล์มุมมองในโฟลเดอร์ธีม, fuel / app / themes / tpthemes / แทน fuel / app / views / folder

$theme = \Theme::instance(); 
$view = $theme->view('template/index'); 
// *fuel/app/themes/tpthemes/template/index.php

ผู้นำเสนอ

วิธีผู้นำเสนอใช้ไฟล์ Presenter::forge()ในพื้นหลัง. API ทั้งสองเหมือนกันยกเว้นวิธีของผู้นำเสนอค้นหาไฟล์มุมมองในโฟลเดอร์ธีม, fuel / app / themes / tpthemes / แทน fuel / app / views / folder

$theme = \Theme::instance(); 
$presenter = $theme->presenter('template/index');

asset_path

เมธอด asset_path ส่งคืนเส้นทางไปยังเนื้อหาที่ร้องขอโดยสัมพันธ์กับธีมที่เลือกในปัจจุบัน

$theme = \Theme::instance();  

// public/assets/tpthemes/css/style.css 
$style = \Html::css($theme->asset_path('css/style.css'));

add_path

เมธอด add_path อนุญาตให้เพิ่มพา ธ ธีมที่รันไทม์

$theme = \Theme::instance(); 
$theme->add_path(DOCROOT.'newthemes');

add_paths

เมธอด add_paths อนุญาตให้เพิ่มพา ธ ธีมหลายรายการในรันไทม์

$theme = \Theme::instance();   
$theme->add_path(DOCROOT.'newthemes');

คล่องแคล่ว

วิธีการใช้งานอนุญาตให้ตั้งค่าธีมที่ใช้งานอยู่

$theme = \Theme::instance(); 
$active = $theme->active('newtheme');

รั้งท้าย

วิธีการสำรองอนุญาตให้ตั้งค่าธีมทางเลือก

$theme = \Theme::instance();
$fallback = $theme->fallback('custom');

get_template

เมธอด get_template จะส่งคืนอินสแตนซ์ View ของเทมเพลตธีมที่โหลดในปัจจุบัน

$theme = \Theme::instance(); 
$theme->get_template()->set('body', 'Theme can change the look and feel of your app');

set_template

เมธอด set_template อนุญาตให้ตั้งค่าเทมเพลตธีมสำหรับเพจ

$theme = \Theme::instance(); 
$theme->set_template('layouts/index')->set('body', 'set theme template');

หา

ค้นหาผลตอบแทนจริงหากพบเส้นทางไปยังธีมมิฉะนั้นจะส่งกลับเท็จ

$theme = \Theme::instance(); 
$path = $theme->find('newtheme')

ทั้งหมด

วิธีการทั้งหมดจะส่งคืนอาร์เรย์ของธีมทั้งหมดในพา ธ ธีมทั้งหมด

$theme = \Theme::instance(); 
$themes = $theme->all();

รับข้อมูล

เมธอด get_info ส่งคืนตัวแปรเฉพาะจากอาร์เรย์ข้อมูลธีม หากไม่ได้ระบุธีมจะใช้อาร์เรย์ข้อมูลของธีมที่ใช้งานอยู่

$theme = \Theme::instance(); 
$var = $theme->get_info('color', 'green', 'newtheme');

ที่นี่วิธีการรับสีถูกกำหนดไว้ใน 'newtheme' หากไม่ได้กำหนดไว้ก็จะใช้ 'สีเขียว' เป็นสีเริ่มต้น

set_info

เมธอด set_info ตั้งค่าตัวแปรในธีมที่ใช้งานอยู่หรือธีมทางเลือก

$theme->set_info('color', 'green', 'fallback');

set_partial

วิธี set_partial อนุญาตให้ตั้งค่ามุมมองบางส่วนสำหรับส่วนที่มีชื่อของเทมเพลตเพจของคุณ โดยปกติจะดำเนินการผ่านทาง HMVC call

$theme = \Theme::instance(); 
$theme->set_template('layouts/homepage'); 
$theme->set_partial('navbar', 'homepage/navbar');

get_partial

เมธอด get_partial อนุญาตให้รับอินสแตนซ์มุมมองของบางส่วนที่ตั้งไว้ก่อนหน้านี้ในส่วนที่มีชื่อของเทมเพลตเพจ

$theme = \Theme::instance(); 
$theme->set_partial('sidebar', 'partials/menu'); 
$theme->get_partial('sidebar', 'partials/menu')->set('class', 'menu green');

ตัวอย่างการทำงาน

ให้เราเพิ่มการสนับสนุนธีมในแอปพลิเคชันพนักงานของเรา

Step 1 - เพิ่มไฟล์กำหนดค่าธีมใหม่ fuel / app / config / theme.php พร้อมเนื้อหาต่อไปนี้

<?php  
   return array ( 
      'active' => 'tpthemes',
      'fallback' => 'tpthemes', 
      'paths' => array (APPPATH.'themes', ), 
      'assets_folder' => 'assets', 
      'view_ext' => '.html', 
      'require_info_file' => false, 
      'info_file_name' => 'themeinfo.php', 
      'use_modules' => false, 
   );

Step 2 - เพิ่มโฟลเดอร์เนื้อหาใหม่ public / assets / tpthemes / css สำหรับธีม tpthemes

cd /go/to/app/root/path 
mkdir -p public/assets/tpthemes/css

Step 3 - ดาวน์โหลด bootstrap ล่าสุดและวาง bootstrap.min.css ไว้ใน public / assets / tpthemes / css

Step 4 - เพิ่มโฟลเดอร์ใหม่ tpthemes ภายใต้โฟลเดอร์ fuel / app / themes

cd /go/to/app/root/path   
mkdir -p fuel/app/themes/tpthemes

Step 5 - เพิ่มเทมเพลตเลย์เอาต์ใหม่ bootstrap.html ใต้ fuel / app / themes / tpthemes / layout / และเพิ่มโค้ดต่อไปนี้

<!DOCTYPE html> 
<html lang = "en"> 
   <head> 
      <title>Theme example</title> 
      <meta charset = "utf-8"> 
      <meta name = "viewport" content = "width = device-width, initial-scale = 1"> 
      <!-- Bootstrap core CSS --> 
      <?php echo \Theme::instance()->asset->css('bootstrap.min.css'); ?> 
   </head> 
   
   <body> 
      <?php echo $header; ?> 
      <div class = "container"> 
         <div class = "row">
            <div class = "col-sm-12"> 
               <?php echo $content; ?> 
            </div> 
         </div> 
      </div> 
   </body>
   
</html>

ที่นี่เราได้ใช้ธีมอินสแตนซ์และวิธีการเนื้อหาเพื่อรับเส้นทางของไฟล์ bootstrap เราได้กำหนดสองตัวแปรส่วนหัวและเนื้อหาheader ถูกกำหนดเพื่อตั้งค่ารายละเอียดส่วนหัวแบบไดนามิก content ถูกกำหนดเพื่อตั้งค่าเนื้อหาจริงของเพจแบบไดนามิก

Step 6 - เพิ่มเทมเพลตส่วนหัวใหม่ header.php ที่ fuel / app / themes / tpthemes / partials ดังนี้

<div class = "jumbotron text-center">
   <h1>Theme support in fuelphp</h1> 
   <p>bootstrap based template</p>  
</div>

Step 7 - สร้างตัวควบคุมใหม่ ThemeSample ที่ fuel / app / class / controller / themesample.php และ action ที่ action_index ดังนี้

<?php  
   class Controller_ThemeSample extends \Controller { 
      public function before() { 
         $this->theme = \Theme::instance(); 
         $this->theme->set_template('layouts/bootstrap');  
         $header = $this->theme->view('partials/header'); 
         $this->theme->get_template()->set('header', $header); 
      }  
      public function action_index() { 
         $content = $this->theme 
         ->view('themesample/index') 
         ->set('message', 'This data comes from action page');  
         $this->theme 
         ->get_template() 
         ->set('content', $content); 
      } 
      public function after($response) { 
         if (empty($response) or  ! $response instanceof Response) { 
            $response = \Response::forge(\Theme::instance()->render()); 
         } 
         return parent::after($response); 
      } 
   }

ที่นี่เราได้ใช้ before และ after วิธีการเริ่มต้นของธีมโดยใช้เมธอด Themeชั้นเรียน วิธีการบางอย่างที่ใช้ ได้แก่ อินสแตนซ์ get_template set_template และ view

Step 8 - สุดท้ายเพิ่มมุมมองสำหรับการดำเนินการดัชนี index.php ที่ fuel / app / themes / tpthemes / themesample ดังต่อไปนี้

<p>The data comes from *fuel/app/themes/tpthemes/themesample/index.html* file.</p> 
<p> 
   <?php echo $message; ?> 
</p>

ที่นี่เราได้กำหนดตัวแปรหนึ่งตัวคือข้อความซึ่งจำเป็นต้องตั้งค่าแบบไดนามิกในคอนโทรลเลอร์

เราได้สร้างธีมใหม่ tpthemes และใช้ใน ThemeSampleตัวควบคุม ตอนนี้ให้เราตรวจสอบผลลัพธ์โดยขอ URL http: // localhost: 8080 / themesample / index ผลลัพธ์เป็นดังนี้