Temel yolu nasıl edinebilirim?


16

Temel yolu bir Drupal 8 şablon dosyasında kullanmak istiyorum. Aşağıdakileri denedim, ama doğru sonucu elde edemiyorum.

{{ app.request.baseUrl  }}

{{base_path}}

İhtiyacım olan şey düğüme giden mutlak yoldur {{ app.request.baseUrl }}/{{ url }}.

Bulduğum bir çözüm, bu kodu bir önişleme kancasına koymak ve temaya aktarmak.

 $host = \Drupal::request()->getHost(); 
$response = \Drupal::httpClient()

Daha iyi bir çözüm arıyorum. Kullandığımın yerine ne kullanmalıyım?

Yanıtlar:


27

url()Drupal'daki herhangi bir rotaya bir temel url oluşturmak için kullanabilirsiniz . Gerçekte <front>temel URL'niz olacak rotayı sağlayabilirsiniz .

{{ url('<front>') }}

Ama işlemek bunu birleştirerek eğer ilk önce:

{{ url('<front>')|render ~ file_url('public://image.jpg') }}

Örneğin:

{{ 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"

1
ve eğer düğüm mutlak yolunu almak istersem?
Yusef

2
Bir düğüm bağlamında, path()işlev düğüm yolunu almak için uygulanabilir:{{ path('entity.node.canonical', {'node': node.id}) }}
Shawn Conn

12

Neredeyse hiçbir zaman Drupal 8'deki parçalardan yollar oluşturmanıza gerek yoktur. Böyle bir şeyle giderdim:

function FOO_preprocess_node(&$variables) {
  /** @var \Drupal\node\NodeInterface $node */
  $node = $variables['node'];
  $variables['url'] = $node->toUrl('canonical', [
    'absolute' => TRUE,
    'language' => $node->language(),
  ])->toString();
}

Cevabınızı düzenlemek için beni pologize edin, ancak url artık bir nesne, onu dizeye dönüştürmeliyiz.
Yusef

2
Hayır, bunu yapmak zorunda değilsiniz, şablon url nesnesini işleyebilir.
4k4

@ 4k4 ama toStringşov yapmadan denedim , sonra kint (url) denedim ve nesne olduğunu gördüm.
Yusef

@ 4k4 ile dize dönüştürülmemeli ve nesne olarak bırakılmamalıdır, böylece onu tüketen diğer yöntemler / işlevler etkilenmez.
Vishal Kumar Sahu

10

Gelen page.html.twigsen will bir çalışma var {{ base_path }}değişkeni. Neden her şablonda mevcut değil, hiçbir fikrim yok. Bence olması gerektiği ve her şey dağınık görünüyor gibi, benim tercih edilen çözüm tam olarak Drupal ihtiyacım olan herhangi bir yer için önişleme sayfa işlevinde yaptığı gibi yapmaktır.

Yapmak için {{ base_path }}bir tema adlı örnekte blok şablonlara mevcuttur, bu kodu eklemek example.themedosyası:

/**
 * Implements hook_preprocess_block().
 */
function example_preprocess_block(&$variables) {

  $variables['base_path'] = base_path();
}

MPD tarafından sağlanan kabul edilen cevapta belirtildiği gibi, bir düğümün veya başka bir varlığın URL'sinin alınması, sizin için her şeyi yapmanın yöntemleri vardır.

Ancak, tema klasörünüzde yaşayan görüntüleri görüntülerken, base_path öğesinin alınmasının nedenleri vardır. {{ directory }}tema klasörünün yolunu sağlar, ancak temel yoldan ayrılır (genellikle yalnızca / ancak Drupal'ın düzgün çalışmaması için bir etki alanının alt kodundan sabit kodlanmaması gerekir). Açık page.html.twigya da yukarıdaki preprocesser olan herhangi şablonda bu bu amaçla çalışır:

<img src="{{ base_path ~ directory }}/images/nsf1.svg"
     alt="National Science Foundation logo" height="80" width="80" />

Ve tabii ki güzel şablonlar için arzunuzu bastırırsanız Shawn Conn'ın cevabı iyi çalışıyor, ancak yapamadım.


3

8.2.x'deki Sayfa Belgelerine göre , ön sayfaya ve Temel Yol URL'lerine dönmek için iki genel değişken eklendi:

ön_sayfa: Ön sayfanın URL'si. Ön sayfaya bağlanırken base_path yerine bunu kullanın. Buna dil etki alanı veya öneki de dahildir.

base_path: Drupal kurulumunun temel URL yolu. Drupal'ı bir alt dizine yüklemediyseniz genellikle "/" olur.

Böylece yazı tipi sayfası URL'sini front_pageve temel URL'yibase_url

Not

ön sayfa url'sini almak {{ url('<front>') }}, örneğin başka bir yolla birleştirmek istediğinizde bir sorun yaşıyor

{%  set base_url = url('<front>')  %}
{% set url = [ base_url,'/landing-page?invitecode=' ,invite_code] | join  %}
{{ url }}

dönüş

Array/landing-page?invitecode= 

varsayılan olarak bu metin değildir ve işlenebilen diziyi dallara döndürür


2

İçinde

function hook_preprocess(&$variables) {
  $variables['base_path'] = base_path();
}

& şablon dosyasında

{{ base_path ~ directory }}

2

Şimdiye kadar bu iplik uygun bir çözüm getirmiyor. Render_val () kullanarak bitiştirebiliriz

Bir varlık görüntüsünün mutlak yolunu elde etmek için bunu kullandığım yol:

{% 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)  %}

1. sitenin temel URL'sini alıyoruz. Sonra bir ekstra / kaldırmak gerekir. Sonra temel yolumuzu göreli göreli yolumuzla birleştiririz.


2

Dil yolları ayarladığım için yukarıdakilerin hepsi benim için başarısız oldu, bu yüzden ön sayfa URL'm gibi görünüyor https://example.com/en.

Sitem için gerçek temel URL'yi almak için bu kodu kullandım:

{% set base_url = url('<front>')|render|split('/', -1)|join('/') %}

1
{{ path('<front>') }}

Bunu zaten doğru olarak işaretlediğinizi biliyorum, ancak bu herhangi bir ekstra çalışma olmadan bir şablon dosyasında bir dal öğesi olarak kullanılabilir. Classy tema sistem-branding-block.html.twig blokta buldum. Böylece şu şekilde kullanabilirsiniz:

<a href="{{ path('<front>') }}" title="{{ 'Home'|t }}" rel="home">{{ site_name }}</a>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.