我有一个运行Drupal8的客户端。他们想要一个网址的网站,以呈现与网站的其余部分非常不同。我已经创建了一个模块。我只需要一条路由来覆盖html.html.twig。我想剥离大部分的东西,网站的主题是加载。我在某种程度上能够让它工作,但它似乎适用于每个页面,有效地打破了网站。这个url /site/mynewapp将使用与其他数百个页面完全不同的布局和html。基本上,这是现有Drupal8实例中的一个静态站点。当请求/ html.html.twig /mynewapp时,如何有条件地加载自定义站点、page.html.twig和node.html.twig?这是一个ReactJS应用程序,基本上应该只在网站的一个页面上运行。我意识到这不是理想的架构。我已经要求客户端在nodejs上单独运行该应用程序,但他们坚持认为它必须在他们现有的Drupal实例中。React应用程序看起来与网站的其他部分完全不同。有没有人有做这种事情的经验。我有定义了路由的custommodule.routing.yml和一个连接到javascript库的控制器方法。这是有效的,但它似乎加载在每个页面上,这是不可能发生的。
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,实质上破坏了它。
这里有什么建议吗?
发布于 2019-02-17 22:00:43
您不需要使用模块来覆盖twig模板。您只需在您的主题文件夹中创建具有正确名称的文件,就可以开始了。
要覆盖html.html.twig,您必须创建类似于html--mynewapp.html.twig的内容
要覆盖page.html.twig,您必须创建类似于page--mynewapp.html.twig的内容
要覆盖node.html.twig,您必须创建类似于node--mynewapp.html.twig的内容
您可以通过清除缓存,当您访问这些页面时,新模板将会加载。
发布于 2019-02-20 08:48:58
react挂载节点模块将嵌入一个空的div,以便在Drupal站点的内容区域中挂载React页面。
如果你真的想在Drupal中创建一个完全独立的React应用程序,你只需要在站点的子文件夹中构建它即可。像/myapp一样,并把整个构建放在那里。
https://stackoverflow.com/questions/54701549
复制相似问题