【问题标题】:Additional path prefix on drupal 7drupal 7 上的附加路径前缀
【发布时间】:2013-07-24 23:13:39
【问题描述】:

我必须建立一个多语言网站,您必须在其中选择您所在的大陆。

因此,您可以在使用英语时选择美国,也可以选择使用西班牙语的美国。欧洲有法语,也有英语等。

我在 drupal 7 上设置了带有路径前缀的语言检测。所以我的网址就像 domain.com/en/path-alias

我网站上的某些内容将在某些大陆隐藏,但很多内容将是相同的,所以我不想做一个多站点。

我希望有像 domain.com/america/en/path-aliasdomain.com/america/es/path-alias 这样的网址>domain.com/europe/fr/path-alias。 我没有找到任何解决方案。

模块域访问看起来很酷,但不是我想要的,因为它可以与子域一起使用,而我想要路径前缀。

编辑: 好的,我在 drupal API 中找到了我的问题的解决方案。

这两个钩子正是我要找的hook_url_inbound_alterhook_url_outbound_alter

【问题讨论】:

    标签: url drupal path


    【解决方案1】:

    您应该使用这 2 个钩子,因为在 hook_url_inbound_alter(&$path, $original_path, $path_language) 中,您告诉 Drupal 它应该显示什么路径,并根据收到的来自 $original_path 的路径确定(例如:region/lang/path) Drupal 理解为有效路径的路径(例如:lang/path)并用它覆盖 $path

    接下来,我们需要来自我们页面的链接来包含我们的自定义路径格式,因此我们将使用hook_url_outbound_alter(&$path, &$options, $original_path) 将使用url() 生成的所有系统路径或别名转换为自定义路径格式(为url('lang/path')) 生成的路径将是region/lang/path。在$options数组中我们可以修改路径前缀,或者路径语言。

    【讨论】:

      【解决方案2】:

      这对我有用,但路径别名现在不起作用。这个http://localhost/en/australia/node/376 应该是http://localhost/en/australia/hotels-resorts

      function mymodule_url_inbound_alter(&$path, $original_path, $path_language){    
        $cluster = 'australia';
        $path = str_replace($cluster.'/','',$path);       
      } 
      
      function mymodule_url_outbound_alter(&$path, &$options, $original_path){
        $cluster = 'australia';   
        $path = $cluster.'/'.($path); 
        $options['alias'] = true;     
      } 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-05-27
        • 1970-01-01
        • 2019-08-14
        • 2014-05-07
        • 1970-01-01
        • 2015-01-30
        • 1970-01-01
        相关资源
        最近更新 更多