无法在我的自定义 wordpress 主题中使用 smarty 模板引擎
Can't use smarty templating engine in my custom wordpress theme
我试图在我的自定义 wordpress 主题中使用 smarty 模板引擎,但我最终收到以下错误:
Fatal error: Uncaught --> Smarty: Unable to load template
'file:index.tpl' <-- thrown in
wordpresspath\inc\sysplugins\smarty_internal_template.php on line 195
对于好奇的人,这里是 smarty_internal_template.php 的第 195 行:
/**
* flag if compiled template is invalid and must be (re)compiled
*
* @var bool
*/
public $mustCompile = null;
/**
* Template Id <--------- Line 195!!
*
* @var null|string
*/
public $templateId = null;
在我的案例中调试后,错误来自 smarty_internal_templatebase.php 的第 134 行函数:
/**
* displays a Smarty template
*
* @param string $template the resource handle of the template file or template object
* @param mixed $cache_id cache id to be used with this template
* @param mixed $compile_id compile id to be used with this template
* @param object $parent next higher level of Smarty variables
*
* @throws \Exception
* @throws \SmartyException
*/
public function display($template = null, $cache_id = null, $compile_id = null, $parent = null)
{
// display template
$this->_execute($template, $cache_id, $compile_id, $parent, 1);
}
所以我的主题文件夹层次结构很简单我有主题文件夹,里面有:
mythemefolder/Inc : 包含 smarty
所需文件的文件夹
mythemefolder/templates : 包含 smarty 模板文件的文件夹
mythemefolder/index.php wordpress 主索引文件
所以在 index.file 中,我尝试使用以下 php 代码来执行 smarty 模板:
require 'inc/Smarty.class.php';
$smarty = new Smarty;
$smarty->display('index.tpl'); //index.tpl is my template file inside the templates folder
从上面的错误我得出的结论是 Smarty 没有找到我的模板,所以我尝试使用以下方法设置模板目录:
$smarty->setTemplateDir(get_template_directory_uri().'/templates');
// I also tried these lines
//$smarty->template_dir = get_template_directory_uri().'/templates';
//$smarty->setTemplateDir('./templates');
不幸的是它没有用,有什么想法吗??
所以我在工作中没有使用正确的绝对路径。基本上不是使用给我主题 URL 的 Worpress API get_template_directory_uri() (正确的是外部内容而不是内部 PHP 服务器)。我应该使用 get_theme_file_path() 函数。
我最终写了这段代码:
<?php
require 'inc/smarty/Smarty.class.php';
$smarty = new Smarty;
//$smarty->assign("Assign_your_vars","with something");
//..
$smarty->setTemplateDir(get_theme_file_path().'/templates/');
$smarty->setCompileDir(get_theme_file_path().'/templates_c');
$smarty->setCacheDir(get_theme_file_path().'/cache');
$smarty->setConfigDir(get_theme_file_path().'/configs');
$your_template = get_theme_file_path().'/templates/your_template.tpl';
$smarty->display($your_template );
?>
我试图在我的自定义 wordpress 主题中使用 smarty 模板引擎,但我最终收到以下错误:
Fatal error: Uncaught --> Smarty: Unable to load template 'file:index.tpl' <-- thrown in wordpresspath\inc\sysplugins\smarty_internal_template.php on line 195
对于好奇的人,这里是 smarty_internal_template.php 的第 195 行:
/**
* flag if compiled template is invalid and must be (re)compiled
*
* @var bool
*/
public $mustCompile = null;
/**
* Template Id <--------- Line 195!!
*
* @var null|string
*/
public $templateId = null;
在我的案例中调试后,错误来自 smarty_internal_templatebase.php 的第 134 行函数:
/**
* displays a Smarty template
*
* @param string $template the resource handle of the template file or template object
* @param mixed $cache_id cache id to be used with this template
* @param mixed $compile_id compile id to be used with this template
* @param object $parent next higher level of Smarty variables
*
* @throws \Exception
* @throws \SmartyException
*/
public function display($template = null, $cache_id = null, $compile_id = null, $parent = null)
{
// display template
$this->_execute($template, $cache_id, $compile_id, $parent, 1);
}
所以我的主题文件夹层次结构很简单我有主题文件夹,里面有:
mythemefolder/Inc : 包含 smarty
所需文件的文件夹
mythemefolder/templates : 包含 smarty 模板文件的文件夹
mythemefolder/index.php wordpress 主索引文件
所以在 index.file 中,我尝试使用以下 php 代码来执行 smarty 模板:
require 'inc/Smarty.class.php';
$smarty = new Smarty;
$smarty->display('index.tpl'); //index.tpl is my template file inside the templates folder
从上面的错误我得出的结论是 Smarty 没有找到我的模板,所以我尝试使用以下方法设置模板目录:
$smarty->setTemplateDir(get_template_directory_uri().'/templates');
// I also tried these lines
//$smarty->template_dir = get_template_directory_uri().'/templates';
//$smarty->setTemplateDir('./templates');
不幸的是它没有用,有什么想法吗??
所以我在工作中没有使用正确的绝对路径。基本上不是使用给我主题 URL 的 Worpress API get_template_directory_uri() (正确的是外部内容而不是内部 PHP 服务器)。我应该使用 get_theme_file_path() 函数。
我最终写了这段代码:
<?php
require 'inc/smarty/Smarty.class.php';
$smarty = new Smarty;
//$smarty->assign("Assign_your_vars","with something");
//..
$smarty->setTemplateDir(get_theme_file_path().'/templates/');
$smarty->setCompileDir(get_theme_file_path().'/templates_c');
$smarty->setCacheDir(get_theme_file_path().'/cache');
$smarty->setConfigDir(get_theme_file_path().'/configs');
$your_template = get_theme_file_path().'/templates/your_template.tpl';
$smarty->display($your_template );
?>