Puncte:0

Modul Linkit - Indicarea atributului de titlu al link-ului către un câmp personalizat. Cârlig disponibil?

drapel us

În prezent, cel Modul Linkit furnizează link-ul titlu atribut prin tragerea nodurilor aferente titlu camp.

Am dori ca acesta să indice un alt câmp din nod.

Cum putem realiza acest lucru?

M-am uitat în Modulul Editor Link avansat, dar am nevoie ca acest lucru să fie automat, iar câmpul meu personalizat se modifică în funcție de tipul de conținut.

Poate are cineva o idee de cârlig?

Puncte:3
drapel cn

Există (cel puțin) 2 opțiuni:

  1. Scrieți un plugin de filtru personalizat, bazându-l pe LinkitFilter plugin inclus cu modulul Linkit. În proces() metoda, unde titlul este setat în prezent, introduceți propria logică pentru a seta câmpul titlu în loc de cel existent $entity->label().

    Această metodă are avantajul actualizării automate atunci când titlul unui nod referit se modifică, dar înseamnă că va trebui să vă mențineți filtrul alături de versiunile modulului Linkit. The proces() metoda face mult mai mult decât setarea titlului, iar noi caracteristici/remedieri de erori în modul vor trebui încorporate în codul dvs.

  2. Modificați formularul de dialog pentru linkuri (cum face Editor Advanced Link) și introduceți titlul în marcaj cât timp este încă în editor. Această metodă este puțin mai ușoară și mai puțină întreținere, dar titlu atributul nu se va actualiza atunci când se face titlul nodului. Se va actualiza numai atunci când formularul de dialog cu linkuri este salvat din nou.

    Dacă acest lucru este acceptabil, acesta este un exemplu brut, dar funcțional pentru a începe:

    utilizați Drupal\Core\Form\FormStateInterface;
    utilizați Drupal\node\NodeInterface;
    
    funcția custom_module_form_editor_link_dialog_alter(&$form, FormStateInterface $form_state, $form_id) {
      array_unshift($form['#validate'], '_custom_module_link_dialog_validate');
    }
    
    funcția _custom_module_link_dialog_validate(matrice &$form, FormStateInterface $form_state) {
      $atribute = $form_state->getValue('atribute');
    
      if (isset($attributes['data-entity-type']) && $attributes['data-entity-type'] == 'nod') {
        $node = \Drupal::service('entity.repository')
          ->loadEntityByUuid('nod', $atribute['data-entity-uuid']);
        if ($node instanceof NodeInterface) {
          $override_title = '';
          comutator ($node->getType()) {
            caz „pagină”:
              $override_title = $nod->field_title_override->valoare;
              pauză;
            caz „foo”:
              // ...
              pauză;
          }
          dacă (strlen($override_title)) {
            $form_state->setValue(['atribute', 'titlu'], $override_title);
          }
        }
      }
    }
    
drapel us
Mulțumesc pentru acestea!
drapel us
Mulțumesc pentru acestea! Și pentru editarea întrebării mele pentru a o face mai clară. Am avea nevoie de acest lucru pentru a se aplica doar pe front-end. Și nu toate tipurile de conținut vor avea acest câmp disponibil. Există un cârlig în modulul Linkit care ar permite filtrului să verifice dacă nodul are un anumit câmp existent și umplut și să-l înlocuiască din mers pe front?
drapel cn
Nu, din păcate, este codificat în mod greu în mijlocul metodei procesului în acest moment. Ar trebui să replicați întregul filtru pentru această abordare

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.