我正在使用CI Smarty
https://github.com/Vheissu/Ci-Smarty
据我所知,这有两个问题。但是我打开这个问题的问题是,如果.tpl
文件在另一个目录的目录中,我就无法加载.tpl
文件。
e-g这是我目前SmartyTemplate的目录结构
--Themes
--SomeOtherThemeName
--Default //Default Theme Directory i am currently using
--css
--js
--images
--views
--admin (directory)
--sitesettings (directory)
--site-settings.tpl (template file) //This Template file will Not Work
如果我将此模板文件移动到admin
的父目录,如果我调用它,它将起作用,但如果我从sitesettings
目录中调用它,它将无效。
我在此称呼它。
function functionName(){
$data['title']="Some Title";
$this->parser->parse('admin/sitesettings/site-settings.tpl',$this->data);
}
简单地说,仅限Smarty允许我在视图文件夹下的层次结构中有一个额外的目录,我想知道是否有任何修复,以便我可以在层次结构中拥有无限的或至少更多的目录,所以我不会' t搞砸了文件系统。
更新: 如果有人想看我的项目编码,请转到这个github项目。
https://github.com/pakistanihaider/HouseRentSystem
有关此项目的数据库。
http://www.mediafire.com/view/1jp9u906r8i10u0/houserentsystem.sql
注意:无法在此处附加文件,因此在mediafire上传了.sql
文件并添加了链接。如果有任何针对它的规则,管理员肯定可以删除该链接,但请让我知道提供文件链接的正确方法。
感谢@Sauryabhatt以某种方式找到了主要问题。
我认为问题存在于{{extends file='adminLayout.tpl'}}
它是如何知道文件存在的位置的,我的意思是如果我在大多数内部目录中移动文件,它将如何知道主布局文件退出到哪个子项。扩展文件时是否需要定义路径?
更新 还想尝试定义布局的路径,但似乎它也没有为我做好。
$this->parser->parse('extends:layouts/adminLayout.tpl|file:systemConfigurationSitePreferences.tpl',$this->data);
如果我将失败放在管理员目录中,它会起作用,但如果我将文件移到另一个管理目录目录中,它就会停止工作。
答案 0 :(得分:1)
更改
{{include file="../admin/ui_components/user-media.tpl" name="user media"}}
<!-- #menu -->
{{include file="../admin/ui_components/left_menu.tpl" name="left menus"}}
进入这个
{{include file="{{getBasePath()}}/themes/{{$themeName}}/views/admin/ui_components/user-media.tpl" name="user media"}}
<!-- #menu -->
{{include file="{{getBasePath()}}themes/{{$themeName}}/views/admin/ui_components/left_menu.tpl" name="left menus"}}
和
{{include file="../admin/ui_components/top_navigation.tpl" name="top navigation"}}
进入这个
{{include file="{{getBasePath()}}/themes/{{$themeName}}/views/admin/ui_components/top_navigation.tpl" name="top navigation"}}
然后在site_helper.php
文件中定义此代码
//Returns the BASEPATH for the Template
if (!function_exists('getBasePath')) {
function getBasePath()
{
return FCPATH;
}
}
最后在MY_Controller
$this->data['themeName'] = 'default';
然后你们都完成了。尝试并运行该应用程序。希望它现在适合你。
答案 1 :(得分:0)
答案似乎很简单:一个错字。您已经错误地写了模板文件的路径。根据你提供的目录结构,你应该有这个:
$this->parser->parse('admin/sitesettings/site-settings.tpl',$this->data);
而不是:
$this->parser->parse('admin/sitesitesettings/site-settings.tpl',$this->data);
我还使用CI-Smarty进行了快速的CI设置,以确保它与多个子目录一起正常工作。
答案 2 :(得分:0)
检查库,我认为你应该修改文件libraries/MY_Parser
(https://github.com/Vheissu/Ci-Smarty/blob/master/libraries/MY_Parser.php)。在那里,您可以找到以下方法:
当您调用parse
时,它会调用_find_view
从两个位置加载路径:在第307行,加载
$locations = $this->_template_locations;
其中_template_locations是第375行中方法_update_theme_paths()
中加载的数组:
$this->_template_locations = array(
config_item('smarty.theme_path') . $this->_theme_name . '/views/modules/' . $this->_module .'/layouts/',
config_item('smarty.theme_path') . $this->_theme_name . '/views/modules/' . $this->_module .'/',
config_item('smarty.theme_path') . $this->_theme_name . '/views/layouts/',
config_item('smarty.theme_path') . $this->_theme_name . '/views/',
APPPATH . 'modules/' . $this->_module . '/views/layouts/',
APPPATH . 'modules/' . $this->_module . '/views/',
APPPATH . 'views/layouts/',
APPPATH . 'views/'
// Here, load your custom path:
APPPATH . 'views/admin/sitesettings'
);
和第314行,使用$ new_locations:
$new_locations = array(
config_item('smarty.theme_path') . $this->_theme_name . '/views/modules/' . $current_module .'/layouts/',
config_item('smarty.theme_path') . $this->_theme_name . '/views/modules/' . $current_module .'/',
APPPATH . 'modules/' . $current_module . '/views/layouts/',
APPPATH . 'modules/' . $current_module . '/views/'
);
我还没有测试过,抱歉,但我认为如果你在那里添加文件夹的路径,它会找到你的文件,你就可以增加你的目录路径了。如果要在方法_update_theme_paths()
中自动将文件夹结构添加到数组中,请检查:
PHP SPL RecursiveDirectoryIterator RecursiveIteratorIterator retrieving the full tree并将其添加到_update_theme_paths()
,它会自动执行,XD
答案 3 :(得分:0)
如果您的智能版本是2.1或更高版本,则无需编写目录名称,只需文件名即可。
使用此
$this->parser->parse('site-settings.tpl',$this->data);
而不是
$this->parser->parse('admin/sitesettings/site-settings.tpl',$this->data);
前端控制器代码
class Frontend_Controller extends CI_Controller{
function __construct() {
parent::__construct();
$this->data['errors'] = array();
$this->data['site_name'] = array();
$this->load->library('Smarty.php');
$this->load->library('parser');
$this->load->model('Common_Model');
$this->load->model('users_management/login_check');
}
}
main.php index.php函数的代码
$myArray = array('Controller' => $this->router->fetch_class(), 'Method' => $this->router->fetch_method());
$this->smarty->assign('Fetch', $myArray);
$this->smarty->assign("lang", "english");
$data['template'] = "home.tpl";
$data['templateName'] = "Home template";
$this->parser->parse('test/test1/test2/testsaurabh.tpl', $data);
答案 4 :(得分:0)
但最后我终于看到了真正的问题, 当我试图将模板文件放在目录的另一个目录中时,相对路径在管理员布局中受到干扰。
我在单独的文件中有一些文件组件,比如菜单选项卡,我在主布局文件中包含了这些文件。 E-G:
{{include file="../admin/ui_components/user-media.tpl" name="user media"}}
所以如果模板位于1个目录中,那么模板正在工作但是当我尝试添加1个目录并将文件放入其中时,路径给出了错误。
CI Smarty的最大问题是,如果有关于tpl文件的任何错误,它永远不会给错误提供白色空白页。
如果错误系统会很好,我可能会更快地找到解决方案。
无论如何,现在只是添加了基本路径,所以无论我进入多少目录,它都不会给出任何问题..
感谢您的所有支持。看起来像我的Bounty Wasted xD ..