Cum pot obține o cale de acces la modul? (Drupal, 8, Javascript)

ceaucari a intrebat.

Creez un modul în Drupal 8 și am nevoie să definesc o cale relativă către mymodule pentru a o trece într-un fișier JavaScript, astfel.

$scope.getPlatformIcon = function (_platform) {
     var modulePath = "/modules/mymodule"
     switch (_platform) {
         case "youtube":
         case "twitter":
         case "instagram":
         case "facebook":
             return modulePath+"/img/"+_platform+".png";
     }
     return false;
};

În Drupal 7 aș putea folosi următoarele.

var modulePath = Drupal.settings.mymodule.basePath;

Pentru directorul rădăcină din Drupal 8, aș putea folosi următoarele.

drupalSettings.path.baseUrl

Nu am găsit cum să obțin calea modulului.

Cum aș putea să o fac cu Drupal 8?

2 răspunsuri
4k4

În Drupal 8 această setare drupal nu este disponibilă în mod implicit. Puteți verifica variabilele existente căutând acest array JSON în pagina HTML:

<script type="application/json" data-drupal-selector="drupal-settings-json">{

Pentru a adăuga variabila module path folosiți acest cod:

$build['#attached']['drupalSettings']['mymodule']['mylib']['path'] = drupal_get_path('module', 'mymodule');

Pentru mai multe informații despre drupalSettings vedeți:

utilizarea {{ {{ variabile twig }}} în interiorul jquery extern

ssibal

Pentru a răspunde la întrebarea inițială (cum pot obține calea unui modul), și fără a lua în considerare partea de atașare javascript, iată o soluție prietenoasă OO (fără a arăta injecția de dependență în sine):

$module_handler = Drupal::service('module_handler');
$module_path = $module_handler->getModule('my_module')->getPath();

Aceasta vă va da înapoi următoarele (desigur, depinde și de modul în care arată structura directoarelor dvs.)

"modules/custom/my_module"

drupal_get_path este într-adevăr mai rapid de scris. Cu toate acestea, apelează același serviciu de mai sus în mod static, ceea ce face ca codul dvs. să nu poată fi testat unitar (de asemenea, să nu mai vorbim de faptul că dependențele clasei dvs. nu sunt vizibile).Pe scurt: dacă alegeți să faceți lucrurile Quick&Dirty mergeți pentru drupal_get_path orice alte cazuri folosiți singur serviciul potrivit cu o injecție adecvată a dependențelor.

Comentarii

  • Pentru a obține calea absolută a sistemului de fișiere: Drupal::service('file_system')->realpath(Drupal::service('module_handler')->getModule('my_module')->getPath()) –  > Por leymannx.