Puncte:0

Afișați eticheta câmpului (nu cheia) ca titlul paginii de vizualizare în filtrul contextual

drapel gu

În continuarea acestor întrebări:

Am termeni de taxonomie ai jocurilor și o vizualizare care îi reprezintă.Fiecare joc are un câmp selectat numit „gen” cu formatul „cheie|etichetă”. Există 16 genuri, stocate astfel (limba implicită este rusă):

introduceți descrierea imaginii aici

Apoi mi-am configurat View-urile Filtru contextual ca aceasta:

introduceți descrierea imaginii aici

Incercat cu "Valoarea RAW de la URL" - nici o schimbare.

introduceți descrierea imaginii aici

introduceți descrierea imaginii aici

Și funcționează bine cu filtrul expus, precum și cu accesarea URL-urilor precum /joc/2 sau /jocuri/13. Dar afișează titlul paginii ca câmp KEY, ca număr.

Tot ce vreau să fac este să scot LABEL corespunzătoare.

Teoretic, aș putea folosi doar valori în acest domeniu, dar va oferi încă două probleme:

  1. Nu pot modifica opțiunile de stocare ale câmpului fără a pierde datele curente.
  2. Genurile sunt în rusă, deci vor exista probleme de URL ca aceasta - .../?field_genre_value=%D0%90+%D1%8D%D1%82%D0%BE+%D1%82%D1%80%D0%B5%D1%82%D0%B8%D0%B9

Există vreo modalitate de a rezolva asta?

Puncte:0
drapel gu

În sfârșit mi-am dat seama! Postează răspunsul meu pentru generațiile viitoare.

Tot ce ne trebuie este YOUR_TEMPLATE.theme dosar pentru asta.

Mai jos este codul meu cu comentarii. S-ar putea să nu fie perfect, așa că dacă cineva va corecta unele lucruri, voi aprecia asta.

utilizați \Drupal\views\ViewExecutable;

// Schimbarea titlului vizualizărilor. Nu schimbă eticheta HEAD <title>!
funcția YOUR_THEME_NAME_views_pre_render(ViewExecutable $view) 
{
  // checkRoute() și checkArg() sunt funcții personalizate și descrise mai jos
  if(checkRoute('view.VIEW_ID.VIEW_DISPLAY_ID') && checkArg())
  {
    // Aceasta modifică titlul vizualizării, precum și setarea $variables['page']['#title'] la aceeași valoare.
    // gamesGenreTitle() este o funcție personalizată și este descrisă mai jos.
    $view->setTitle(gamesGenreTitle($view->args[0]));
  }
}

// Aici putem schimba HEAD <titlu>
funcția YOUR_THEME_NAME_preprocess_html(&$variabile)
{
  // checkRoute() și checkArg() sunt funcții personalizate și descrise mai jos
  if (checkRoute('view.VIEW_ID.VIEW_DISPLAY_ID') && checkArg() && isset($variables['head_title'])) 
  {

    // Piesă inutilă, jetoane sunt necesare pentru scopul meu
    $token = Drupal::token();

    // $variables['page']['#title'] a fost schimbat în views_pre_render(), astfel încât să putem schimba HEAD <title>.
    // Folosesc simbolul [current-page:page-number] pentru a unic titlul
    // Pentru a îmbunătăți acest lucru, putem adăuga o logică pentru a include numărul actual al paginii numai dacă există mai mult de 1 pagină
    $variables['head_title'] = $variables['page']['#title'] . " | Pagina " . $token->replace('[pagina-curente:numar-pagina]');
  }
}

// În cazul în care utilizați titlul paginii curente în breadcrumbs, poate doriți să îl schimbați și pe acesta.
funcția YOUR_THEME_NAME_preprocess_breadcrumb(&$variabile)
{
  // checkRoute() și checkArg() sunt funcții personalizate și descrise mai jos
  if(checkRoute('view.VIEW_ID.VIEW_DISPLAY_ID') && checkArg() && isset($variables['breadcrumb']['2']['text']))
  {
    // Ați putea dori să vă var_dump($variables) înainte de a face acest truc pentru a vă găsi bucățica de pesmet.
    $variables['breadcrumb']['2']['text'] = gamesGenreTitle(getArg_0());
  }
}

// Obținerea valorilor permise ale câmpului (etichetelor) utilizate pentru a crea titlul
function gamesGenreTitle($val)
{
  $options = options_allowed_values(\Drupal::service('entity_field.manager')->getFieldStorageDefinitions('taxonomy_term')['field_NAME']);

  // Verificați dacă transmitem date corecte
  if(este_numeric($val) && $val <= count($opțiuni))
  {
    returnează $opțiuni[$val];
  }
}

// Verificați dacă argumentul necesar este setat și numeric.
funcția checkArg()
{
  $arg = Drupal::routeMatch()->getParameter('arg_0');
  // În cazul meu, argumentul din vizualizări a fost transmis la arg_0
  // Poate varia, așa că încercați să vă var_dump($arg) sau ksm($arg) pentru a verifica dacă este ceea ce aveți nevoie

  returnează isset($arg) && is_numeric($arg);
}

// Verificând ruta curentă, avem nevoie de vizualizare și afișare exactă, altfel titlul va fi schimbat pe fiecare pagină.
funcția checkRoute($check)
{
  $route = \Drupal::routeMatch()->getRouteName();
  returnează $rută == $verifică;
}

// Obținerea argumentelor, transmise vizualizărilor.
funcția getArg_0()
{
  // Și din nou, arg_0 ar putea să nu fie argumentul dvs., verificați-l cu var_dump() sau ksm()
  returnează Drupal::routeMatch()->getParameter('arg_0');
}

Și o altă metodă, dacă nu aveți o mulțime de etichete de câmp, puteți utiliza aceasta în câmpul de înlocuire a titlului vizualizărilor (cremură este acceptată acolo):

{% if arguments.field_NAME_value == 1 %} TITLUL DVS. 1 {% elseif arguments.field_NAME_value == 2 %} TITLUL DVS. 2 {% endif %}

Sper că asta va ajuta pe cineva!

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.