Учебники

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 — использовать текущий модуль или нет

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, 
   ); 

Здесь мы установили,

  • Название активной и резервной темы в виде тем
  • Путь к папке с темами как fuel / app / themes /
  • Путь к папке ресурсов как / public / assets / tpthemes /

Тематический класс

После завершения настройки мы можем использовать класс Theme, предоставленный FuelPHP, для выполнения функциональности темы. Сообщите нам о методах, доступных в классе Theme в этой главе.

пример

Метод экземпляра позволяет создать новую тему. Он имеет следующие два параметра,

  • $ name — название темы (необязательно)

  • $ config — массив конфигурации темы (такой же, как в разделе конфигурации)

$ name — название темы (необязательно)

$ config — массив конфигурации темы (такой же, как в разделе конфигурации)

Оба параметра являются необязательными. Если параметр не указан, он пытается получить тему по умолчанию из файла конфигурации. Если указано имя темы, он пытается получить другие параметры из файла конфигурации. Если конфигурация также указана, то она будет использовать заданную пользователем настройку вместо настройки из файла конфигурации.

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

ковать

forge похож на экземпляр, за исключением того, что он имеет только конфигурационный массив.

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

Посмотреть

Метод view использует View :: forge () в фоновом режиме. Оба API аналогичны, за исключением того, что метод view выполняет поиск в файле представлений в папке тем: fuel / app / themes / tpthemes / вместо топлива / app / views /.

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

ведущий

Метод Presenter использует Presenter :: forge () в фоновом режиме. Оба API похожи, за исключением того, что метод презентатора выполняет поиск в файле представлений в папке тем: fuel / app / themes / tpthemes / вместо топлива / app / views /.

$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'); 

отступать

метод fallback позволяет установить тему возврата.

$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');

находить

find возвращает true, если путь к теме найден, в противном случае возвращается false.

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

все

Метод all возвращает массив всех тем во всех путях.

$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.

$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');

Рабочий пример

Давайте добавим поддержку тем в наше приложение для сотрудников.

Шаг 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, 
   );

Шаг 2 — Добавьте новую папку ресурсов, public / assets / tpthemes / css для темы, tpthemes.

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

Шаг 3 — Загрузите последнюю версию начальной загрузки и поместите файл bootstrap.min.css в папку public / assets / tpthemes / css.

Шаг 4 — Добавьте новую папку, tpthemes в папку fuel / app / themes.

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

Шаг 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> 

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

Шаг 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> 

Шаг 7 — Создайте новый контроллер, ThemeSample в fuel / app / classes / controller / themesample.php и действие в 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); 
      } 
   }

Здесь мы использовали метод до и после, чтобы выполнить инициализацию темы, используя методы класса Theme . Некоторые из используемых методов — это instance, get_template, set_template и view.

Шаг 8 — Наконец, добавьте представление для действия index, 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>

Здесь мы определили одну переменную, message, которую нужно динамически устанавливать в контроллере.

Мы создали новую тему, tpthemes и использовали ее в контроллере ThemeSample . Давайте теперь проверим результат, запросив URL, http: // localhost: 8080 / themesample / index. Результат выглядит следующим образом.