模块的 "themes" 文件夹有什么用?
What is module's "themes" folder used for?
PS 文档说,在开发模块时,您可以创建 /themes/[theme_name]/modules
子文件夹,它用于:
"Sub-folder for overriding .tpl files and languages files, if necessary."
并且它:
"enables you to handle the module's template files in various ways, depending on the current theme.",
但是我不太明白它的实际用法。它的用例是什么?
谢谢
当您开发 Prestashop 网站时,永远不要更改核心文件。这意味着您只能在 /modules/
文件夹中创建新模块,而不能更改现有模块。因为如果您更新您修改过的模块,您所做的所有更改都将消失。
每次 Prestashop 需要加载模块模板文件时,它会首先查看当前主题 /themes/your_theme/modules/the_module/path_to_tpl.tpl
是否存在此模板的覆盖。如果不是,它将从 /modules
目录加载模板。
此建议也适用于 .css
和 .js
文件。
documentation you mentioned in the comment below 是错误的,应该更新。您不能将 themes
文件夹放入模块中。
这里是 Module
class 中的 _isTemplateOverloadedStatic()
方法,每次我们需要模块模板时调用:
/*
** Template management (display, overload, cache)
*/
protected static function _isTemplateOverloadedStatic($module_name, $template)
{
if (Tools::file_exists_cache(_PS_THEME_DIR_.'modules/'.$module_name.'/'.$template)) {
return _PS_THEME_DIR_.'modules/'.$module_name.'/'.$template;
} elseif (Tools::file_exists_cache(_PS_THEME_DIR_.'modules/'.$module_name.'/views/templates/hook/'.$template)) {
return _PS_THEME_DIR_.'modules/'.$module_name.'/views/templates/hook/'.$template;
} elseif (Tools::file_exists_cache(_PS_THEME_DIR_.'modules/'.$module_name.'/views/templates/front/'.$template)) {
return _PS_THEME_DIR_.'modules/'.$module_name.'/views/templates/front/'.$template;
} elseif (Tools::file_exists_cache(_PS_MODULE_DIR_.$module_name.'/views/templates/hook/'.$template)) {
return false;
} elseif (Tools::file_exists_cache(_PS_MODULE_DIR_.$module_name.'/views/templates/front/'.$template)) {
return false;
} elseif (Tools::file_exists_cache(_PS_MODULE_DIR_.$module_name.'/'.$template)) {
return false;
}
return null;
}
如您在此代码中所见,Prestashop 在加载模板时绝不会查看模块中的 themes
文件夹。
PS 文档说,在开发模块时,您可以创建 /themes/[theme_name]/modules
子文件夹,它用于:
"Sub-folder for overriding .tpl files and languages files, if necessary."
并且它:
"enables you to handle the module's template files in various ways, depending on the current theme.",
但是我不太明白它的实际用法。它的用例是什么?
谢谢
当您开发 Prestashop 网站时,永远不要更改核心文件。这意味着您只能在 /modules/
文件夹中创建新模块,而不能更改现有模块。因为如果您更新您修改过的模块,您所做的所有更改都将消失。
每次 Prestashop 需要加载模块模板文件时,它会首先查看当前主题 /themes/your_theme/modules/the_module/path_to_tpl.tpl
是否存在此模板的覆盖。如果不是,它将从 /modules
目录加载模板。
此建议也适用于 .css
和 .js
文件。
documentation you mentioned in the comment below 是错误的,应该更新。您不能将 themes
文件夹放入模块中。
这里是 Module
class 中的 _isTemplateOverloadedStatic()
方法,每次我们需要模块模板时调用:
/*
** Template management (display, overload, cache)
*/
protected static function _isTemplateOverloadedStatic($module_name, $template)
{
if (Tools::file_exists_cache(_PS_THEME_DIR_.'modules/'.$module_name.'/'.$template)) {
return _PS_THEME_DIR_.'modules/'.$module_name.'/'.$template;
} elseif (Tools::file_exists_cache(_PS_THEME_DIR_.'modules/'.$module_name.'/views/templates/hook/'.$template)) {
return _PS_THEME_DIR_.'modules/'.$module_name.'/views/templates/hook/'.$template;
} elseif (Tools::file_exists_cache(_PS_THEME_DIR_.'modules/'.$module_name.'/views/templates/front/'.$template)) {
return _PS_THEME_DIR_.'modules/'.$module_name.'/views/templates/front/'.$template;
} elseif (Tools::file_exists_cache(_PS_MODULE_DIR_.$module_name.'/views/templates/hook/'.$template)) {
return false;
} elseif (Tools::file_exists_cache(_PS_MODULE_DIR_.$module_name.'/views/templates/front/'.$template)) {
return false;
} elseif (Tools::file_exists_cache(_PS_MODULE_DIR_.$module_name.'/'.$template)) {
return false;
}
return null;
}
如您在此代码中所见,Prestashop 在加载模板时绝不会查看模块中的 themes
文件夹。