Folosesc un bloc de vizualizări pe site-ul meu, conținutul acestei vizualizări este filtrat programatic. Acum primesc mesaje de la utilizatori care văd informații greșite. Filtrul se bazează pe utilizatorul conectat în prezent. Deoarece am nevoie de aceste informații în filtrul obișnuit și nu în filtrul contextual, am creat un modul simplu pentru a schimba valoarea filtrului.
Filtrul meu este cam asa:
(
Tipul de conținut = tipul de conținut_a
ȘI
uid(autor de noduri) = */această valoare este adăugată programatic*/
)
SAU
(
Tipul de conținut = contenttype_b
ȘI
user_target_id(reference) = */această valoare este adăugată programatic*/
)
Deci folosesc asta în modulul meu:
*/
function entity_access_views_pre_view(ViewExecutable $view, $display_id, array &$args){
$currentUser = \Drupal::currentUser();
$cuid = $currentUser->id();
/* @ Vizualizare filtru: Media */
if ($view->id() == 'my_view_id') {
dacă ($display_id == 'bloc_1' || $display_id == 'pagina_1' || $display_id == 'pagina_2') {
$filtre = $view->display_handler->getOption('filtre');
$filters['uid']['value']['value'] = $cuid;
$filters['user_target_id']['value']['value'] = $cuid;
$view->display_handler->overrideOption('filtre', $filtre);
}
}
}
Deoarece se pare că nu pot găsi problema, am îndoieli dacă mai sus funcționează așa cum vreau. Așa că am vrut să verific dacă vezi ceva ciudat sau fals. Această valoare a filtrului poate fi stocată în cache într-un fel? Sau poate că există o modalitate mai bună de a face asta.
Nu pot folosi filtrul contextual, pe care l-aș prefera, deoarece vizualizarea arată două tipuri de conținut, unde pentru fiecare tip de conținut filtrul ar trebui să fie diferit.
Mulțumesc anticipat.