2010-05-23 94 views
0

我读this post我想使用类似的解决方案,但与数据库。主题外应用程序

在我的网站控制器后():

$theme = $page->get_theme_name(); //Orange 
Kohana::set_module_path('themes', Kohana::get_module_path('themes').'/'.$theme); 
$this->template = View::factory('layout') 

我用萤火检查:

fire::log(Kohana::get_module_path('themes')); // D:\tools\xampp\htdocs\kohana\themes/Orange 

我相信路径存在。我直接在'orange'文件夹'views'文件夹中使用layout.php文件。

但我得到:所请求的视图布局找不到

扩展Kohana_Core就是:

public static function get_module_path($module_key) { 
return self::$_modules[$module_key]; 
} 

public static function set_module_path($module_key, $path) { 
self::$_modules[$module_key] = $path; 
} 

任何人可以帮助我解决这个问题?

也许这是一个问题的.htaccess:

# Turn on URL rewriting 
RewriteEngine On 

# Put your installation directory here: 
# If your URL is www.example.com/kohana/, use /kohana/ 
# If your URL is www.example.com/, use/
RewriteBase /kohana/ 

# Protect application and system files from being viewed 
RewriteCond $1 ^(application|system|modules) 

# Rewrite to index.php/access_denied/URL 
RewriteRule ^(.*)$/[PT,L] 
RewriteRule ^(media) - [PT,L] 
RewriteRule ^(themes) - [PT,L] 

# Allow these directories and files to be displayed directly: 
# - index.php (DO NOT FORGET THIS!) 
# - robots.txt 
# - favicon.ico 
# - Any file inside of the images/, js/, or css/ directories 
RewriteCond $1 ^(index\.php|robots\.txt|favicon\.ico|static) 

# No rewriting 
RewriteRule ^(.*)$ - [PT,L] 

# Rewrite all other URLs to index.php/URL 
RewriteRule ^(.*)$ index.php/$1 [PT,L] 

有人能帮忙吗? 我做错了什么?

问候

[编辑]

我的控制器代码:

class Controller_Site extends Controller_Fly { 

    public static $meta_names = array('keywords', 'descriptions', 'author'); 


    public function action_main() { 
     $this->m('page')->get_main_page(); 
    } 

    public function action_page($page_title) { 
     $this->m('page')->get_by_link($page_title); 
    } 

    public function after() { 
     $page = $this->m('page'); 
     $metas = ''; 
     foreach(self::$meta_names as $meta) { 
      if (! empty($page->$meta)) { 
       $metas .= html::meta($page->$meta, $meta).PHP_EOL; 
      } 
     } 
     $theme = $page->get_theme_name(); 
     Kohana::set_module_path('themes', Kohana::get_module_path('themes').'/'.$theme); 
     $menus = $page->get_menus(); 
     $this->template = View::factory('layout') 
          ->set('theme', $theme) 
          ->set('metas', $metas) 
          ->set('menus', $menus['content']) 
          ->set('sections', $page->get_sections()) 
          ->set_global('page', $page); 
     if ($page->header_on) { 
      $settings = $this->m('setting'); 
      $this->template->header = View::factory('/header') 
               ->set('title', $settings->title) 
               ->set('subtitle', $settings->subtitle) 
               ->set('menus', $menus['header']); 
     } 
     if ($page->sidebar_on) { 
      $this->template->sidebar = View::factory('sidebar', array('menus' => $menus['sidebar'])); 
     } 
     if ($page->footer_on) { 
      $this->template->footer = View::factory('footer'); 
     } 
     parent::after(); 
    } 

} 

和父控制器:

abstract class Controller_Fly extends Controller_Template { 

     protected function m($model_name, $id = NULL) { 
      if (! isset($this->$model_name)) { 
        $this->$model_name = ORM::factory($model_name, $id); 
      } 
      return $this->$model_name; 
     } 

     protected function mf($model_name, $id = NULL) { 
      return ORM::factory($model_name, $id); 
     } 

} 

[编辑2] Previous链接后死了,链接为: http://forum.kohanaframework.org/comments.php?DiscussionID=5744&page=1#Item_0

回答

0

我的猜测是,你的控制器具有__construct()方法,你是不是叫parent::__construct

其实,我认为Kohana的V3 __construct需要也可以通过$ request对象如下:

public function __construct(Request $request) 
{ 
    parent::__construct($request); 
} 
+0

感谢您的回答。我添加了控制器代码。 – Marek 2010-05-24 00:58:49

0

我意识到,我需要再次初始化所有模块:

$theme = $page->get_theme_name(); 
    Kohana::set_module_path('themes', Kohana::get_module_path('themes').'/'.$theme); 
    Kohana::modules(Kohana::get_modules()); 

现在我没有错误。相反,我正在死亡的白色屏幕:

$this->template is null 

:(

[编辑]

现在我知道,我有:

$this->template = View::factory('layout') 
->set('theme', $theme) 
->set('metas', $metas) 
->set('menus', $menus['content']) 
->set('sections', $page->get_sections()) 
->set_gobal('page', $page); 

Ofcourse我忘了set_global不返回$this:D

无论如何所有的工作现在:)

我还有一个关于效率的问题。我在请求流中第二次打电话Kohana::modules()。根据效率这是一个大问题吗?

Regards

+0

@效率,不,它是一种非常有效的方法,经过测试 – Kemo 2011-03-13 00:28:21