Puncte:0

Trimiteți rezultatele hook preprocess_views_view către un formular sau servicii personalizate

drapel pe

Dezvolt o caracteristică care permite utilizatorilor anonimi să primească prin e-mail rezultatul a fațete + searchAPI.

Fațetele și API-ul de căutare funcționează perfect. Modulul personalizat care permite trimiterea unui e-mail. Am creat, de asemenea, un formular personalizat (FormAPi) pentru a permite utilizatorului să-și dea e-mailul și să trimită datele la trimitere.

Pentru a obține rezultatele căutării de fațete, folosesc preprocess_views_view în .modul fişier

function my_module_preprocess_views_view__VIEW_ID(matrice &$variabile): void {
  foreach ($variabile['view']->result as $result) {
    $nod = $rezultat->_obiect->getEntity();
    $titlu = $nod->get('titlu')->getValue()[0]['valoare'];
    $câmp_personalizat = $nod->get('câmp_personalizat')->getValue()[0]['valoare'];
  }
}

De fiecare dată când se modifică o fațetă, pot vedea rezultatul cu a dump() si totul este ok. Poate că acesta nu este cârligul potrivit în cazul meu, dar returnează ceea ce mă aștept.

Cu toate acestea, nu știu cum să transmit rezultatul acestui cârlig în formularul meu personalizat care este inserat într-un bloc personalizat pe pagina cu vizualizarea rezultatelor fațete.

Când utilizatorul trimite formularul, trebuie să știu ce cârlig a returnat anterior în SendSearchForm()

funcția publică submitForm(matrice &$form, FormStateInterface $form_state) {

        // e-mail introdus de utilizator
        $email = $form_state->getValue('email');
        // trimite e-mail, dar trebuie să trimită și rezultatele my_module_preprocess_views_view__VIEW_ID
        $this->sendEmail($email, $facets_result);
    }

Aveți o sugestie pentru a face acest lucru corect cu Drupal?

EDIT: Am văzut decât mi-aș fi putut folosi funcția drupal_static. Este o idee bună?

Kevin avatar
drapel in
Nu pentru asta sunt cârligele de preproces (apelarea și comunicarea către alte funcții/metode). Tot ce puteți face este să setați o variabilă de configurare sau un element cache pentru a stoca acest lucru, dar probabil că nu va fi precis 100% din timp, deoarece nu aveți multe modalități de a distinge un utilizator anonim de celălalt. Poate stocați-l în magazinul temporar al utilizatorului.. nu sunt sigur.
drapel pe
@Kevin Mulțumesc pentru comentariu. Într-adevăr, îmi dau seama și că nu pentru asta. Deoarece cârligul a returnat exact ceea ce mi-am dorit, am încercat să-l folosesc, dar trebuie să îmi dau seama de altceva. Poate rulați programatic căutarea efectuată de utilizator prin preluarea parametrilor la momentul trimiterii formularului.
drapel pe
@Kevin Am reușit să fac ceea ce mi-am dorit preluând selecția în javascript. Cred că voi șterge întrebarea pentru că subiectul nu mai este relevant.

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.