什么是模块"主题"文件夹用于?

时间:2017-11-14 10:23:17

标签: module prestashop

PS文档说,在开发模块时,您可以创建/themes/[theme_name]/modules子文件夹,并将其用于:

"如有必要,覆盖.tpl文件和语言文件的子文件夹。"

并且它:

"使您能够以各种方式处理模块的模板文件,取决于当前主题。"

但我真的不了解它的实际用法。它的用例是什么?

由于

1 个答案:

答案 0 :(得分:2)

开发Prestashop网站时,不应更改核心文件。这意味着您只能在/modules/文件夹中创建新模块,但不能更改现有模块。因为如果您更新了您更改的模块,则所有更改都将消失。

每次Prestashop需要加载模块模板文件时,如果存在该模板的覆盖,它将首先查看当前主题/themes/your_theme/modules/the_module/path_to_tpl.tpl。如果没有,它将从/modules目录加载模板。

此推荐也适用于.css.js个文件。

documentation you mentioned in the comment below错误,应该更新。您无法在模块中放置themes文件夹。

以下是每次我们需要模块模板时调用_isTemplateOverloadedStatic()类的Module方法:

/*
** 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文件夹。