我正在使用CodeIgniter 3.1.8和Bootstrap 4开发在线报纸/博客应用程序。我决定添加主题。应用程序是而不是HMVC,只有MVC。
我认为将Twig模板引擎用于主题是个好主意。为此,我使用CodeIgniter Simple and Secure Twig。
我希望与每个主题相对应的视图和资产与主题的名称一起放置在同一目录中。
我正在尝试从视图目录加载主题的资产,例如:application/views/themes/mytheme/assets/css/main.css
。
在后控制器中,我添加了线路$this->twig->addGlobal('maincss', base_url('application/views/themes/mytheme/assets/css/main.css'))
;
public function index() {
//call initialization method
$config = $this->_initPagination("/", $this->Posts_model->get_num_rows());
$data = $this->Static_model->get_static_data();
$data['pages'] = $this->Pages_model->get_pages();
$data['categories'] = $this->Categories_model->get_categories();
//use limit and offset returned by _initPaginator method
$data['posts'] = $this->Posts_model->get_posts($config['limit'], $config['offset']);
$this->twig->addGlobal('siteTitle', 'My Awesome Site');
//CSS, JS and other resources add to twig here, because PHP and Codeigniter functions are not available from Twig templates
$this->twig->addGlobal('maincss', base_url('application/views/themes/mytheme/assets/css/main.css'));
$this->twig->display('themes/mytheme/layout', $data);
}
在布局.twig我有:
<link rel="stylesheet" href="{{maincss}}">
我得到的不是期望的结果,而是403 Forbidden页面。为了解决这个问题,我将application/views/themes
添加到.htaccess:
RewriteEngine on
RewriteCond $1 !^(index.php|assets|application/views/themes/|images|js|css|uploads|favicon.png)
RewriteCond %(REQUEST_FILENAME) !-f
RewriteCond %(REQUEST_FILENAME) !-d
RewriteRule ^(.*)$ ./index.php/$1 [L]
上述解决方案失败的原因我无法理解。
我做错了什么?
创建一个文件夹并将其命名为应用程序外的资产,然后使用base_url链接它,如下所示:
<link rel="stylesheet" href="<?php echo base_url('assets/back/css/bootstrap.min.css"')?>">
根据khawaja umar的建议,我将主题划分为视图和资产:我在myapp/themes/mytheme/assets
中拥有主题的资产(css、图像、脚本(,在myapp/application/views/themes/mytheme
中拥有主题视图。
在控制器中,我有这两条线来处理团队的每个部分(资产和视图(:
$this->twig->addGlobal('maincss', base_url('themes/mytheme/assets/css/main.css'));
$this->twig->display('themes/mytheme/layout', $data);
在layout.twig
文件中,我有:
<link rel="stylesheet" href="{{maincss}}">
我得出的结论是,这是最好的方法,包括从安全的角度来看。