Puncte:0

Cum adaug clase și atribute colorbox-load la link-urile care provin dintr-o imagine svg?

drapel cn

Am imagini SVG care sunt adăugate la noduri prin svg_image_field modul. Au legături interne în ele /load-parts-ajax/{nid}. Calea duce la o vizualizare de pagină pop-up a conținutului cu această cale /load-parts-ajax/%. Încerc să deschid vizualizarea într-o casetă de culori. Am acest lucru în implementarea mea în Drupal 7, care funcționează bine. Am instalat modulul colorbox_node și am folosit colorbox-node clasa și asta a fost foarte ușor.

Cu toate acestea, pentru Drupal 9, am instalat Colorbox și este o bibliotecă și am încercat colorbox_load, cu ng_lightbox, și am adăugat calea la căile permise în configurația fără zaruri. Încerc și eu colorbox_simple_load a apela la colorbox-load clasa fara noroc.

(Pot pirata redarea întregului site de vizualizare a paginii și totul prin umplutură cboxElement după curs, dar sunt sigur că este greșit.)

Iată .js:

(funcție ($, Drupal) {
  Drupal.behaviors.MY_MODULE = {
    atașați: funcție (context, setări) {
      $(document).ajaxStop(funcție() {
        setTimeout(funcția () { //necesar pentru a adăuga o scurtă pauză pentru ca colorbox să se reactiveze
          $(".view-MY-POP-UP-VIEW", context).once().flexslider({
            animație: „diapozitive”,
            prezentare: fals,
            atingere: fals,
            AnimationLoop: fals,
          });
        }, 500);
      });

      $(".field--name-field-MY-IMAGE .svg_a", context).each(function(index, item) {
        $(item).attr("href", $(item).attr("xlink:href"));
        $(item).attr("data-inner-width", "304");
        $(item).attr("data-inner-height", "532");
        $(item).attr("clasa", "colorbox-load");
      });
    }
  };
})(jQuery, Drupal);

Și iată cum îmi numesc bibliotecile .js, una în care SVG-ul este redat într-o vizualizare, una pentru afișarea nodului.

/**
 * Implementează hook_views_pre_render().
 */
funcția MY_views_pre_render(\Drupal\views\ViewExecutable $view) {
  if (isset($view) && $view->storage->id() == 'MY_VIEW') {
    $view->element['#attached']['library'][] = 'MY_MODULE/MY-LIBRARY';
  }
}

/**
 * Implementează hook_preprocess_node().
 */
funcția MY_preprocess_node(&$variabile) {
  $nod = $variabile['nod'];
  if ($nod->bundle() == 'MY_NODE') {
    $variables['#attached']['library'][] = 'MODUL_MEU/BIBLIOTECA MEA';
  }
}

Atributele din fișierul .js sunt adăugate la linkurile de imagine în ambele cazuri, dar colorbox-load clasa nu pare să fie recunoscută, deoarece linkurile deschid doar vizualizarea într-o fereastră nouă.

Iată marcajul, care arată identic cu marcajul drupal 7 de lucru (în afară de utilizarea clasei colorbox-load în loc de colorbox-node)

<a id="e3_hyperlink" xlink:title="" xlink:href="/load-parts-ajax/251" target="_blank" class="colorbox-load" href="/load-parts-ajax/251" data-inner-width="304" data-inner-height="532">

Deci, înainte de a deschide greșit un raport de eroare, există ceva simplu care îmi lipsește pentru implementarea colorbox-load clasa corect sau ar trebui să funcționeze așa cum este?

EDITAȚI | ×: The colorbox_simple_load are asta în pagina sa de proiect:

$url = Url::fromUri('intern:/example.html');
$link = Link::fromTextAndUrl(t('Vizualizare'), $url);
$ieșire = $link->toRenderable();
$output['#attributes']['class'] = [
  „încărcare cutie de culori”,
];
colorbox_simple_load_page_attachments($ieșire);

Deci eu ar putea pune asta în modulul meu personalizat, dar nu sunt sigur ce fel de cârlig ar trebui să folosesc pentru a-l implementa pe imaginile SVG.

sonfd avatar
drapel in
Primul meu gând este că asta se datorează faptului că adaugi clasele casetei de culoare și metadate prin js.
tonytheferg avatar
drapel cn
Poti posta o solutie alternativa?
sonfd avatar
drapel in
Adăugați clasa și atributele la link-uri înainte ca acestea să fie redate. (Nu folosiți javascript pentru a le adăuga după ce pagina s-a încărcat.)
tonytheferg avatar
drapel cn
Care este cel mai bun mod de a face asta?
tonytheferg avatar
drapel cn
Linkurile sunt pe o imagine svg, așa că nu cred că sunt accesibile pentru backend-ul Drupal.
sonfd avatar
drapel in
Ok, alternativ, cred că ați putea încerca să atașați din nou comportamente, de ex. la sfârșitul comportamentului, rulați `Drupal.attachBehaviors('.field--name-field-MY-IMAGE')`. Cred că problema este că colorbox a căutat deja legături cu clasa colorbox înainte de a adăuga clasa la linkurile tale. Folosirea Drupal.attachBehaviors ar trebui să forțeze colorbox să verifice din nou linkurile svg-ului
tonytheferg avatar
drapel cn
orele au fost greșite, va actualiza întrebarea `$(item).attr("clasa", "use-ajax"); $(item).attr("data-dialog-type", "colorbox");` ar trebui folosit
sonfd avatar
drapel in
Ați folosit `Drupal.attachBehaviors()`? sau s-a rezolvat in alt mod? Ultimul dvs. comentariu spune că veți actualiza întrebarea cu ceva javascript nou pe care l-ați încercat, dar nu o văd în întrebare.
tonytheferg avatar
drapel cn
Plănuiesc să postez ceea ce am făcut ca răspuns când voi avea timp. Am adăugat `Drupal.attachBehaviors()`, dar a trebuit să fac asta pentru ca clasele să fie adăugate pentru utilizatorii anonimi. Motivul inițial pentru care nu funcționa a fost că clasele pe care le foloseam nu erau clasele potrivite pentru a le folosi alături de modulul colorbox_load.

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.