2

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

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

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

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

我希望有类似domain.com/america/en/path-aliasdomain.com/america/es/path-aliasdomain.com/europe/fr/path-alias的网址。我没有找到任何解决方案来做到这一点。

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

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

这两个钩子正是我正在寻找的hook_url_inbound_alterhook_url_outbound_alter

4

2 回答 2

0

您应该使用这 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数组中我们可以修改路径前缀或路径语言。

于 2015-12-15T14:39:00.467 回答
0

这对我有用,但路径别名现在不起作用。这个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;     
} 
于 2017-08-08T09:10:28.430 回答