Puncte:0

Schimbați în mod programatic titlul principal de vizualizare

drapel gu

Am o vedere a termenilor de taxonomie cu filtru expus. Pagina principală de vizualizare: site.com/view

Am un câmp de text cu 16 valori și adrese URL diferite:

  • site.com/view/1
  • site.com/view/2
  • site.com/view/...
  • site.com/view/16

În funcție de argumentul transmis, schimb titlul de vizualizare astfel:


utilizați \Drupal\views\ViewExecutable;
function theme_views_pre_render(ViewExecutable $view) 
{
  
  if( $view->id() == 'MY_VIEW_ID' && $view->current_display === 'VIEW_DISPLAY' && $view->args[0] != 'Toate')
  {
    $view->setTitle(gamesGenreTitle($view->args[0]));
  }
}

function gamesGenreTitle($val)
{
  $options = options_allowed_values(\Drupal::service('entity_field.manager')->getFieldStorageDefinitions('taxonomy_term')['field_genre']);
  returnează $opțiuni[$val];
}

gamesGenreTitle() primește etichete ale domeniului meu pentru a le pune la titlu.

Funcționează, dar nu schimbă capul <title> etichetă!

Am încercat theme_preprocess_html(&$variabile) cu acest cod:

  $view_id = \Drupal::routeMatch()->getParameter('view_id');

  $view = \Drupal\views\Views::getView($view_id);

Dar primește doar vizualizați id și nu pot accesa argumentele acolo pentru a schimba titlul doar pe paginile necesare.

A doua mea presupunere, pe care nu am încercat-o încă, este să validez și să explodez la calea curentă a matricei, folosind \Drupal::service('path.current')->getPath();, obțineți ultima cifră și transmiteți-o către jocuriGenTitlu().

Sau poate există o cale mai bună?

Puncte:1
drapel cn

Nu trebuie neapărat să accesați obiectul vizualizare ($view) pentru a obține argumentele. Puteți verifica toate argumentele făcând acest lucru

$params = Drupal::routeMatch()->getParameters();

De obicei, veți găsi asta dacă accesați o vizualizare cu filtre/parametri contextuali vor exista taste de parametri „arg_0, arg_1”.

var_dump($params);
// obiect(Symfony\Component\HttpFoundation\ParameterBag)#323 (1) { ["parameters":protected]=> array(4) { ["view_id"]=> string(18) "sample_view" ["display_id" ] => string(6) "page_1" ["arg_0"] => string(26) "251" } }

Atunci poți face

$params = Drupal::routeMatch()->getParameter('arg_0');
bigboy avatar
drapel gu
Mulțumiri! Mi-ai salvat ziua! )))

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.