Answers:
您可以url()
用来生成Drupal中任何路由的基础URL。您可以提供<front>
实际上是您的基本URL 的路由。
{{ url('<front>') }}
但是,如果要串联它,请首先渲染它:
{{ url('<front>')|render ~ file_url('public://image.jpg') }}
例如:
{{ url('<front>') ~ file_url('public://image.jpg') }}
# Outputs: "Array/sites/all/default/files/image.jpg"
{{ url('<front>')|render ~ file_url('public://image.jpg') }}
# Outputs: "http://example.com/sites/all/default/files/image.jpg"
path()
函数可用于检索节点路由:{{ path('entity.node.canonical', {'node': node.id}) }}
您几乎几乎不需要从Drupal 8的各个部分显式地构建路径。
function FOO_preprocess_node(&$variables) {
/** @var \Drupal\node\NodeInterface $node */
$node = $variables['node'];
$variables['url'] = $node->toUrl('canonical', [
'absolute' => TRUE,
'language' => $node->language(),
])->toString();
}
toString
但没有注意显示,然后尝试了kint(url)并看到它是对象。
在page.html.twig
您将有一个工作{{ base_path }}
变量。为什么它不是在每个模板中都没有,我不知道。正如我认为应该的那样,其他一切看起来都很混乱,我的首选解决方案是完全按照Drupal在预处理页面功能中的位置进行操作。
要{{ base_path }}
在名为example的主题中可用以阻止模板,请将以下代码添加到example.theme
文件中:
/**
* Implements hook_preprocess_block().
*/
function example_preprocess_block(&$variables) {
$variables['base_path'] = base_path();
}
正如MPD提供的已接受答案中指出的那样,如果获取节点或其他实体的URL,则有一些方法可以为您完成这一切。
但是,有一些获取base_path的原因,例如在显示主题文件夹中的图像时。 {{ directory }}
提供了到主题文件夹的路径,但是它保留了基本路径(通常只是一个/,但是为了保留不应被硬编码的域的子目录中的Drupal的正常功能)。在page.html.twig
具有上述预处理程序的任何模板上或其中,此模板可用于该目的:
<img src="{{ base_path ~ directory }}/images/nsf1.svg"
alt="National Science Foundation logo" height="80" width="80" />
当然,如果您可以抑制对漂亮模板的需求,Shawn Conn的答案就可以很好地工作,但是我做不到。
并且根据8.2.x上的页面文档,添加了两个全局变量以返回首页和基本路径Urls:
front_page:首页的URL。链接到首页时,使用它代替base_path。这包括语言域或前缀。
base_path:Drupal安装的基本URL路径。除非您在子目录中安装了Drupal,否则通常为“ /”。
因此,您可以获得带有的字体页面网址和带有的front_page
基本网址base_url
注意
{{ url('<front>') }}
当您想将其与其他路径合并时,获取首页URL 会出现问题
{% set base_url = url('<front>') %}
{% set url = [ base_url,'/landing-page?invitecode=' ,invite_code] | join %}
{{ url }}
返回
Array/landing-page?invitecode=
这意味着默认情况下不是文本,而是将可渲染的数组返回到树枝
到目前为止,该线程尚未带来任何适当的解决方案。我们可以使用render_val()连接它
这是我使用它的方法,用于获取实体图像的绝对路径:
{% set base_url = render_var(url('<front>')) %}
{% set url = base_url|trim('/', 'right')~file_url(content.field_media[0]['#media'].get('field_image').entity.uri.value) %}
首先,我们获得网站的基本URL。然后,我们需要删除一个多余的/。然后,我们将基本路径与图像相对路径连接起来。