Drupal 8でモジュールを作成しています。このようにJavaScriptファイルで渡すには、mymoduleへの相対パスを定義する必要があります。
$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;
};
Drupal 7では、以下を使用できます。
var modulePath = Drupal.settings.mymodule.basePath;
Drupal 8ルートディレクトリの場合、以下を使用できます。
drupalSettings.path.baseUrl
モジュールパスを取得する方法が見つかりませんでした。
Drupal 8でどうすればよいですか?
Drupal 8では、このdrupal設定はデフォルトでは使用できません。既存の変数を確認するには、HTMLページでこのJSON配列を探します。
<script type="application/json" data-drupal-selector="drupal-settings-json">{
モジュールパス変数を追加するには、次のコードを使用します。
$build['#attached']['drupalSettings']['mymodule']['mylib']['path'] = drupal_get_path('module', 'mymodule');
DrupalSettingsの詳細については、以下を参照してください。
元の質問(モジュールパスを取得する方法)に答えるために、ここでJavaScriptの添付ファイルの部分を考慮に入れていないOOフレンドリーなソリューション(依存関係を示さない)注射自体):
$module_handler = \Drupal::service('module_handler');
$module_path = $module_handler->getModule('my_module')->getPath();
これにより、次のものが返されます(もちろん、ディレクトリ構造がどのように見えるかによっても異なります)。
"modules/custom/my_module"
drupal_get_path
は実際に書く方が速いです。ただし、上記と同じサービスを静的に呼び出すため、コードで単体テストを実行できません(クラスの依存関係が表示されないことは言うまでもありません)。簡単に言えば、物事をクイック&ダーティーにすることを選択した場合、drupal_get_path
他のケースでは、適切な依存関係注入を使用して、適切なサービスを自分で使用します。