Puncte:0

Încărcarea conținutului într-o vizualizare printr-o referință a unei entități frate

drapel za

Cred că ceea ce trebuie să fac este să folosesc rezultatele unui Drupal View pentru a filtra rezultatele unei alte vizualizări. Iată ce încerc să realizez.

Am 3 tipuri de conținut (tipuri de noduri): blog, postare de blog, pagină de biografie (alias autor de blog)

Postarea de blog conține o referință la o entitate atât la blogul în care ar trebui să fie, cât și la una sau mai multe pagini de biografie ale autorului.

Ceea ce trebuie să pot face este să iau ID-ul pentru un anumit blog și să recuperez toți autorii care sunt asociați printr-o postare de blog asociată. Apoi eliminați orice duplicat pentru a afișa o listă cu toți autorii sub un anumit „blog”.

Cred că aș putea folosi o relație. Dar încă neclar cum ar funcționa asta.

Cum pot realiza asta?


UPDATE: Pentru a clarifica, trebuie să încep cu ID-ul blogului și să-l folosesc pentru a găsi autorii oricăror postări de blog care se asociază cu respectivul ID de entitate de blog. Apoi luați acel set de rezultate și deducăți-l. Nu sunt îngrijorat de deducție. Am nevoie doar de ajutor pentru a afla cum să încarc autorii prin acea relație.

Iată o diagramă a acestui lucru:

introduceți descrierea imaginii aici

Mulțumiri!

beltouche avatar
drapel cn
Nu se pare că aveți nevoie de mai multe vizualizări pentru a face acest lucru din descrierea dvs. Poti sa dai mai multe detalii? Care este punctul de plecare - blog sau postare pe blog? Unde apare această listă de autori?
Patrick avatar
drapel za
@beltouche Am adăugat mai multe informații, precum și o diagramă, care sper să ajute să ilustrez ceea ce încerc să realizez. Vă rog să-mi spuneți dacă pot oferi alte informații.
Puncte:1
drapel cn

Voi presupune că această listă de autori va apărea, de exemplu, ca un bloc pe pagina unei postări de blog, ca în „Alți autori asociați cu blogul acestei postări”. (De asemenea, presupun că utilizați Drupal 8 sau 9)

Tu poate sa face asta cu relatii:

  1. Prima relație este prin câmpul ID blog al postării de blog pentru a obține blogul
  2. Următoarea relație o folosește pe prima cu o relație „inversă” prin același câmp pentru a găsi toate postările de blog care fac referire la acel blog
  3. A treia relație o folosește pe a doua pentru a-i aduce pe autori prin ID-ul autorului

Iată un pas prin care vă recomand să folosiți câmpuri.

  1. Adăugați prima relație. Dați-i un „Titlu administrativ” care poate fi citit, deoarece numele încorporate Drupal devin arcane foarte repede.
  2. Pentru a verifica adăugați câmpul de titlu al blogului pentru a confirma că aveți ceea ce vă așteptați. (Îl puteți elimina oricând mai târziu dacă nu aveți nevoie de el.)
  3. Adăugați a doua relație, asigurându-vă că o folosiți pe prima și, de asemenea, dați-i un nume bun. Folosiți din nou un câmp din noua relație ca verificare a sanității.
  4. Adăugați a treia relație asigurându-vă că o utilizați a doua...

Probabil că doriți să bifați caseta „relație necesară” în fiecare caz.

Da, văd că obțineți o mulțime de duplicate pe care va trebui să le eliminați. Tu Mai să poată scăpa de unele utilizând interfața de utilizare din Views, dar asta este întotdeauna șocant. Probabil va trebui să utilizați un cârlig de vizualizare pentru a curăța lucrurile.

Patrick avatar
drapel za
Ideea este de a enumera toți autorii pe o pagină de blog.Practic, orice autor care are o postare pe blogul dat ar trebui să-și arate fața pe pagina blogului.
Patrick avatar
drapel za
Interesantă abordare. Nu mi-a trecut prin cap să folosesc o a treia relație. Trebuie să-mi dau seama cum se va lega acea parte. Dar îmi place abordarea.
beltouche avatar
drapel cn
Dacă începi pe pagina de blog, în loc de o postare pe blog, ai elimina prima relație pe care am enumerat-o.
Patrick avatar
drapel za
Cam acolo am aterizat și eu. Pur și simplu nu am reușit să-l fac pe Drupal să construiască relația chiar prin interfața de utilizare. Așa că a trebuit să-l piratez în restul drumului. Dar am să-ți dau credit pentru că m-ai ajutat să ajung acolo.
Patrick avatar
drapel za
Pentru oricine altcineva care citește acest lucru în viitor, vedeți răspunsul meu de mai jos pentru abordarea mea finală asupra acestui lucru.
beltouche avatar
drapel cn
Trebuie să recunosc, încă sunt surprins că acest lucru nu a fost realizabil în întregime în UI (cu excepția dups-urilor). Multumesc oricum. Mă bucur că am putut să te ajut să ajungi la o soluție.
Patrick avatar
drapel za
Poate că există o cale pe care pur și simplu îmi lipsește. Dar, sincer, cred că interfața de utilizare suferă din cauza încercării de a simplifica prea mult numele relațiilor. Ceea ce încurcă problema.
Puncte:0
drapel za

Bine, așa că după ce am disecat puțin mai mult Drupal Views și interogarea din ea, am făcut acest lucru (care sincer a fost inspirat de sugestia din răspunsul de la @beltouche).

Așa că am stabilit o relație folosind câmpul de referință pentru autorii postărilor de blog. Setați-o după cum este necesar. Apoi am configurat o a doua relație necesară prin câmpul care face referire la blog și i-am pus să folosească prima relație. Această a doua relație este apoi folosită de un filtru contextual care acceptă valoarea ID-ului blogului și găsește rezultate în acest fel.

Apoi, am constatat că interogarea era foarte apropiată și avea nevoie doar de modificarea a două îmbinări. Așa că l-am spart folosind query alter (detalii mai jos). În cele din urmă, am setat „Utilizați agregarea” la „Da”.

Iată codul meu:

<?php
function my_module_views_query_alter(ViewExecutable $view, QueryPluginBase $interogare) {
  if ($view->id() == 'autori' && $view->current_display == 'authors_eva') {
    /*
     * Practic, ceea ce am făcut aici a fost forțat să construiască relațiile așa cum știu că funcționează
     * pe care l-am testat prin rescrierea manuală a interogării și testarea pe baza de date.
     */
    $table_authors_field_data = $query->getTableInfo('blog_post_authors_node_field_data');

    dacă (!gol ($table_authors_field_data)) {
      $table_authors_field_data['join']->leftField = 'blog_post_authors_target_id';
    }

    $table_node_blog = $query->getTableInfo('blog_post_authors_node_field_data__node__blog');

    dacă (!gol ($table_node_blog)) {
      $table_node_blog['join']->field = 'entity_id';
      $table_node_blog['join']->leftField = 'entity_id';
      $table_node_blog['join']->leftTable = 'node__blog_post_authors';
    }
  }
}

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.