0

在我的 Drupal 8 站点中,我有部分标记有“治疗”和“团队”等术语,其中单个内容(每个治疗,每个人......)是带有锚点的节点。节点(例如整个团队)显示在一页上。在我的菜单中,附加锚标签以准确滚动到单个治疗或团队成员不是问题。

但是:我也使用实体引用来链接到不同的节点。这些链接在系统内部自动生成(例如therapy/massage.html)。我现在想创建一个重写规则,将所有节点链接重写为(例如)xxx.xxx.com/therapy#massage,其中“massage”是节点的标题。

提示:使用pathauto不可能做到这一点!我已经试过了。

在此先感谢和尊重, Fab

4

1 回答 1

0

看起来可以使用 Url::fromUserInput()

看看下面的链接:https ://api.drupal.org/api/drupal/core!lib!Drupal!Core!Url.php/function/Url%3A%3AfromUserInput/8.1.x

你的代码看起来像这样

$url = Url::fromUserInput('#' . $node->getTitle());

把它放在哪里取决于你如何创建你的页面。如果它是标准视图(我假设),则必须挂钩到链接的创建并更改 URL。

对于上述情况,您需要创建一个模块并将钩子添加到您的 .module 文件中。

你需要的钩子是 hook_link_alter(),你可以在这里找到文档:https ://api.drupal.org/api/drupal/core!lib!Drupal!Core!Menu!menu.api.php/函数/hook_link_alter/8.1.x

/**
 * Implements hook_link_alter().
 */
function module_link_alter(&$variables) {
  /** @var NodeInterface $node */
  $node = $variables['options']['node'];

  if ($node != NULL){
    $variables['url'] = Url::fromUserInput('#' . $node->getTitle());
  }

上面的代码应该能让你上路,我不完全确定它是否会工作,因为我还没有尝试过。

希望这可以帮助!

于 2016-05-02T07:05:20.703 回答