【问题标题】:Create Drupal 8 one off page that overrides html.html.twig?创建覆盖 html.html.twig 的 Drupal 8 单页?
【发布时间】:2019-02-15 01:33:36
【问题描述】:

我有一个运行 Drupal 8 站点的客户。他们希望站点的一个 URL 呈现与站点的其余部分截然不同的内容。我创建了一个模块。我只需要一条路线来覆盖 html.html.twig。我想去掉网站主题加载的大部分内容。我有点能够让它工作,但它似乎适用于有效破坏网站的每个页面。这个 url /site/mynewapp 将使用与其他数百个页面完全不同的布局和 html。基本上,这是现有 Drupal 8 实例中的静态站点。如何仅在请求 /site/mynewapp 时有条件地加载自定义 html.html.twig、page.html.twig 和 node.html.twig?这是一个 ReactJS 应用程序,基本上只能在站点的单个页面上运行。我意识到这不是理想的架构。我已经要求客户在 nodejs 上单独运行该应用程序,但他们坚持认为它必须在他们现有的 Drupal 实例中。 React 应用程序看起来与网站的其他部分完全不同。有没有人有做这样的事情的经验。我有 custommodule.routing.yml 定义了路由和一个绑定在 javascript lib 上的控制器方法。这可行,但它似乎加载到不可能发生的每个页面上。

public function overview()
{
    $build = [];

    $build['#attached']['library'][] = 'mymodule/mylibrary';
    $build['#markup'] = '<div id="root"></div>';

    return $build;
}

在模块文件中

function mymodule_theme_registry_alter(&$theme_registry)
  {
    $theme_registry['html']['path'] = drupal_get_path('module', 
  'mymodule') . '/templates';
  }

这是为站点中的每个页面加载 html.html.twig,实际上破坏了它。

这里有什么建议吗?

【问题讨论】:

    标签: php twig drupal-modules drupal-8


    【解决方案1】:

    您不需要模块来覆盖树枝模板。 您只需在主题文件夹中使用正确的名称创建文件,就可以开始了。

    要覆盖 html.html.twig 你必须创建类似 html--mynewapp.html.twig
    要覆盖 page.html.twig 你必须创建类似 page--mynewapp.html.twig
    要覆盖 node.html.twig 你必须创建类似 node--mynewapp.html.twig

    清除缓存,新模板将在您访问这些页面时加载。

    【讨论】:

    • 谢谢。这很有帮助。我以为我需要一个模块,但看起来我毕竟不需要它。
    【解决方案2】:

    react mount 节点模块将嵌入一个空 div 以在内容区域的 Drupal 站点中安装您的 React 页面。

    如果您真的想在 Drupal 中创建一个完全独立的 React 应用程序,您可以将其构建在您网站的子文件夹中。喜欢 /myapp 并将整个构建放在那里。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-21
      • 1970-01-01
      • 2015-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多