javascript - Drupal 8 包含 JS 库

标签 javascript drupal drupal-8

我尝试通过 drupal 8 中的 Assets 包含引擎包含 javascript,但我一直遇到 JS 文件的问题。

它似乎想要包含主题中的 javascript 文件,而不是模块。

模块.libraries.yml

preview:
  version: 1.x
  js:
    js/preview.js: {preprocess: false}
  dependencies:
    - core/jquery
    - core/drupalSettings
ckeditor:
  remote: https://cdn.ckeditor.com/4.7.0/standard/ckeditor.js
  version: 4.7.0
  js:
    https://cdn.ckeditor.com/4.7.0/standard/ckeditor.js: { type: external }

模块.模块

function module_form_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id)
{
  // it is the plan edit form, lets hide some fields
  if($form_id=='node_plans_edit_form') {
    foreach([
      'field_currency',
      'field_plan_price',
      'field_length',
      'field_plan_trial_length',
      'field_plan_trial_length_interval',
      'field_purchase_endpoint',
      'field_su'
      ] as $disabledField) {
      $form[$disabledField]['#disabled'] = true;
    }
  }

  $form['#attached']['library'][] = 'module/ckeditor';
  $form['#attached']['library'][] = 'module/preview';


  $url = \Drupal::service('module.properties')->interface['url'];
  $form['#attached']['drupalSettings']['module']['ckeditor']['proto'] = explode(':', $url)[0];
  $form['#attached']['drupalSettings']['module']['ckeditor']['host'] = explode('//', $url)[1];

  return $form;
}

刷新缓存并重新加载节点编辑页面时得到堆栈跟踪:

User warning: The following theme is missing from the file system: smartott in drupal_get_filename() (line 236 of core/includes/bootstrap.inc).
drupal_get_filename('theme', 'module') (Line: 259)
drupal_get_path('theme', 'module') (Line: 390)
Drupal\Core\Asset\LibraryDiscoveryParser->drupalGetPath('theme', 'module') (Line: 85)
Drupal\Core\Asset\LibraryDiscoveryParser->buildByExtension('module') (Line: 87)
Drupal\Core\Asset\LibraryDiscoveryCollector->getLibraryDefinitions('module') (Line: 66)
Drupal\Core\Asset\LibraryDiscoveryCollector->resolveCacheMiss('module') (Line: 148)
Drupal\Core\Cache\CacheCollector->get('module') (Line: 44)
Drupal\Core\Asset\LibraryDiscovery->getLibrariesByExtension('module') (Line: 58)
Drupal\Core\Asset\LibraryDiscovery->getLibraryByName('module', 'ckeditor') (Line: 54)
Drupal\Core\Asset\LibraryDependencyResolver->doGetDependencies(Array) (Line: 31)
Drupal\Core\Asset\LibraryDependencyResolver->getLibrariesWithDependencies(Array) (Line: 104)
Drupal\Core\Asset\AssetResolver->getLibrariesToLoad(Object) (Line: 116)
Drupal\Core\Asset\AssetResolver->getCssAssets(Object, 1) (Line: 291)
Drupal\Core\Render\HtmlResponseAttachmentsProcessor->processAssetLibraries(Object, Array) (Line: 161)
Drupal\Core\Render\HtmlResponseAttachmentsProcessor->processAttachments(Object) (Line: 45)
Drupal\Core\EventSubscriber\HtmlResponseSubscriber->onRespond(Object, 'kernel.response', Object) (Line: 111)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch('kernel.response', Object) (Line: 184)
Symfony\Component\HttpKernel\HttpKernel->filterResponse(Object, Object, 1) (Line: 166)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 64)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 57)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 47)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 99)
Drupal\page_cache\StackMiddleware\PageCache->pass(Object, 1, 1) (Line: 78)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 47)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 50)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 652)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)

如果成功包含,我的 JS 文件会将一些信息转储到浏览器控制台,但这还没有发生。感觉这是一个错误,或者我缺少一些参数,因为我完全遵循文档。

最佳答案

您的module_form_alter()需要主题的javascript文件:

$form['#attached']['library'][] = 'smartott/ckeditor';
$form['#attached']['library'][] = 'smartott/preview';

如果您想加载模块的 javascript,考虑到您的模块名称是 module,需要如下所示的库:

$form['#attached']['library'][] = 'module/preview';

其中 module 是模块名称,previewmodule.library.yml 文件中定义的库的名称。

Dee Drupal.org 包含库的文档,非常好。

关于javascript - Drupal 8 包含 JS 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44766607/

相关文章:

javascript - 带有远程过滤器和排序的 ExtJS 无限滚动网格

javascript - 为动态创建的表行添加 onclick 方法

Drupal 8 - 如何为特定节点类型添加任务和上下文链接?

mysql - max_allowed_pa​​cket=1024M... 它仍然给我错误 "Got a packet bigger than ' max_allowed_pa​​cket' bytes query...”

drupal - 禁用所有编辑悬停项

Javascript:找不到幻灯片上的错误

drupal - Drupal 8 中的查询段落类型

mysql - Drupal 8 没有连接到 Docker 中的 Mysql

javascript - 将变量从 Controller 中的渲染数组传递到twig中的javascript

javascript - 使异步方法同步javascript