2012-05-15 2 views
4

Можно ли пометить плагин? У меня есть мобильная тема для мобильных устройств, и я хотел бы использовать разные файлы представлений для приложений/представлений плагинов. Я пробовал приложение/views/themed/THEME/plugin/... и /app/plugins/PLUGIN/views/themed/THEME/ ... никто, похоже, не работает. Заранее спасибо.CakePHP тематический плагин view

ответ

4

CakePHP 2.x поддерживает это без необходимости вносить какие-либо изменения коды:

Если вы (можете) преобразовать с помощью CakePHP 2.x, то да, вы можете (автоматически). В представлении пути для темы «MyTheme» и плагин «Права доступа» будет:

Array 
(
    [0] => /var/vhosts/Project/htdocs/app/View/Themed/Mytheme/Plugin/Permissions/ 
    [1] => /var/vhosts/Project/htdocs/app/View/Themed/Mytheme/ 
    [2] => /var/vhosts/Project/htdocs/app/View/Plugin/Permissions/ 
    [3] => /var/vhosts/Project/htdocs/app/Plugin/Permissions/View/ 
    [4] => /var/vhosts/Project/htdocs/app/View/ 
    [5] => /var/vhosts/Project/htdocs/lib/Cake/View/ 
    [6] => /var/vhosts/Project/htdocs/lib/Cake/Console/Templates/skel/View/ 
) 

Так что, если вы имели пользователей/index.ctp в плагине и хотел заменить его вы бы изменить:

/var/vhosts/Project/htdocs/app/View/Themed/Mytheme/Plugin/Permissions/Users/index.ctp 

для тематической версии ИЛИ:

/var/vhosts/Project/htdocs/app/View/Plugin/Permissions/Users/index.ctp 

для не тематической версии

5

Копирование содержимого вашей темы для: приложения/просмотры/тематического/THEMENAME/плагины/PLUGINNAME/ Создать ThemePluginsView класса на приложении/ЛИЭС/вид/theme_plugins.php

// app/libs/view/theme_plugins.php 
if (!class_exists('ThemeView')) 
    App::import('Core', 'view/theme'); 

class ThemePluginsView extends ThemeView { 

    function __construct(&$controller, $register = true) { 
     parent::__construct($controller, $register); 
    } 

    function _paths($plugin = null, $cached = true) { 
     $paths = parent::_paths($plugin, $cached); 
     if (!is_string($plugin) || empty($plugin) || empty($this->theme)) 
      return $paths; 
     // add app/plugins/PLUGIN/views/themed/THEME path 
     $dirPath = APP . 'plugins' . DS . $plugin . DS . 'views' . DS . 'themed' . DS . $this->theme . DS; 
     if (is_dir($dirPath)) 
      $paths = array_merge(array($dirPath), $paths); 
     return $paths; 
    } 
} 

Затем вызовите его на app_controller на beforeFilter() или обычного контроллера на beforeFilter(), как:

function beforeFilter() { 
    if (!class_exists('ThemePluginsView')) 
    App::import('Core', 'view/theme_plugins'); 
    $this->view = 'ThemePlugins'; 
    $this->theme = 'THEME_NAME'; 
} 

Надеется, что это помогает