当前位置: 首页 > 知识库问答 >
问题:

自定义模块中的Prestashop 1.7 hookModuleRoutes

拓拔嘉颖
2023-03-14

当我想使用一些自定义URL时,我很难理解应用于自定义模块的逻辑中的错误

所以,我在我的自定义模块“页面”中使用了像这样的钩子ModuleRoutes:

    public function hookModuleRoutes($params){
    $my_link = array(
        'module-vpages-dpage' => array(
            'controller' => 'dpage',
            'rule' => '{id_country:-}flower-delivery{-:country}{-:city}.html',
            'keywords' => array(
                'id_country' => array('regexp' => '[0-9]+', 'param' => 'id_country'),
                'setCountry' => array('regexp' => '[0-9]+', 'param' => 'setCountry'),
                'country' => array('regexp' => '[_a-zA-Z0-9-\pL]*', 'param' => 'country'),
                'city' => array('regexp' => '[_a-zA-Z0-9-\pL]*', 'param' => 'city'),
                'module_action' => array('regexp' => '[\w]+', 'param' => 'module_action')
            ),
            'params' => array(
                'fc' => 'module',
                'module' => 'vpages',
            )
        )
    );
    return $my_link;
}

和应该工作的模块控制器:

    class vpagesdpageModuleFrontController extends ModuleFrontController
{
    public $errors = array();
    public $display_column_left = false;
    public $display_column_right = false;
    public $ssl = true;
    public $php_self = 'dpage'; 

        
    public function __construct()
    {
        parent::__construct();
        $this->page_name = 'dpage';
        $this->context = Context::getContext();
    }

    public function initContent()
    {
        parent::initContent();

        $this->context->cookie->__set('productbycountry_id',Tools::getValue('id_country')); 
        $sql     = "SELECT DISTINCT ps_country_lang.id_country, ps_country_lang.name as country, city FROM ps_cms_target_world
                    LEFT JOIN ps_country_lang ON ps_cms_target_world.id_country = ps_country_lang.id_country
                    WHERE ps_country_lang.id_country=" . Tools::getValue('id_country') . "
                    ORDER BY country ASC";
        //die($sql);
        $cPages  = Db::getInstance()->ExecuteS($sql);                
        
        $get_url  = Db::getInstance()->ExecuteS('SELECT domain,physical_uri FROM '._DB_PREFIX_.'shop_url ');
        $protocol = (isset($_SERVER['HTTPS']) ? "https" : "http") ;
        $site_url = "$protocol://".$get_url[0]['domain'].$get_url[0]['physical_uri']."modules";

        $controller_url = $this->context->link->getModuleLink('vpages', 'vPagesController', array(), true);
        $this->context->smarty->assign(array(
            'link' => $this->context->link,
            'controller_url' => $controller_url,
            'cPages' => $cPages,
            'SITEURL' => $site_url
        ));
        
        $country = urldecode(Tools::getValue('country'));        
        $city = urldecode(Tools::getValue('city'));
        if(isset($city) && !empty($city)) $title = " - " . $city; 
        
        $this->context->smarty->assign('meta_title', 'Flower delivery to ' . $country . $title);
       
        //$this->setTemplate('dPage.tpl'); 
        $this->setTemplate('module:vpages/views/templates/front/dPage.tpl');
    }


}

网址已正确创建,但当我试图访问该页面的内容时,我将最终出现在404错误页面我做错了什么吗?我想我错过了一些很明显的东西,但不明白是什么...

我已经做了研究,但仍然无法找到解决问题的方法。。似乎$route['controller']是“产品”,而不是自定义模块

谢谢你!

共有1个答案

曹臻
2023-03-14

我认为你必须在参数中添加“控制器”:

'params' => [
                'fc' => 'module',
                'module' => 'vpages',
                'controller' => 'dpage',
            ]
 类似资料:
  • 需要 10.2.0+ 您可以在*.vue文件中定义自定义语言块。 自定义块的内容将由在vue-loader'选项的loaders对象中指定的加载器处理,然后由组件模块require。 配置类似于[先进的Loader配置](../ configurations / advanced.md)中描述的配置,除了匹配使用标记名称而不是lang`属性。 如果找到一个自定义块的匹配加载器,它将被处理; 否则将

  • 主要内容:自定义模块编写说明文档到目前为止,读者已经掌握了导入 Python 标准库并使用其成员(主要是函数)的方法,接下来要解决的问题是,怎样自定义一个模块呢? 前面章节中讲过,Python 模块就是 Python 程序,换句话说,只要是 Python 程序,都可以作为模块导入。例如,下面定义了一个简单的模块(编写在 demo.py 文件中): 可以看到,我们在 demo.py 文件中放置了变量(name 和 add)、函数(

  • 我有以下项目结构: 以及以下 假设我在中安装了(甚至安装了)。当我尝试导入时,例如或,这两个导入都是错误的,并显示消息“Cannot find module…”等。 在编写导入字符串时,VSCode建议我使用中的模块,但不建议使用的文件夹。 相对导入仍然有效,但这是地狱,你知道。 我绝对是TypeScript的新手,但我正在根据“模块解析”TypeScript文档做事,它不起作用。 非常感谢这里的

  • 我在prestashop中创建了一个自定义模块,但我不知道如何处理对该模块的访问。我没有找到任何关于它的文档。我知道怎么在symfony做,但在prestashop不行。我只想让一组用户访问我的模块。有人知道怎么做吗,或者有一个文档链接来帮助我?

  • 在大于 10.2.0 中支持 在 .vue 文件中,你可以自定义语言块。自定义块的内容将由 vue-loader 的 options 中的 loader 对象中指定的 loader 处理,然后被组件模块依赖。类似 Loader 进阶配置中的配置,但使用的是标签名匹配,而不是 lang 属性。 如果找到一个与自定义块匹配的 loader,该自定义块将被处理;否则自定义块将被忽略。 另外,如果找到的

  • 本文向大家介绍Python import自定义模块方法,包括了Python import自定义模块方法的使用技巧和注意事项,需要的朋友参考一下 python包含子目录中的模块方法比较简单,关键是能够在sys.path里面找到通向模块文件的路径。 下面将具体介绍几种常用情况: (1)主程序与模块程序在同一目录下: 如下面程序结构:     若在程序test1.py中导入模块mod1, 则直接使用im