当您单击图书页面上的"Add子页“链接时,您将进入"/node/add/content type”,在那里您可以创建和保存子页面。返回到图书页时(假设图书导航块用于显示图书大纲),在清除缓存和刷新页面之前,新添加的子元素不会在大纲中显示(通常)。默认情况下,子级按字母顺序显示。
对于输入子页面的内容编辑器来说,这是一项挑战,因为在返回到图书页面时,他们没有看到他们刚刚输入的子页面,而且当他们看到子页面时,没有按条目的顺序列出子页面。
有没有办法:
对于第二个问题,人们可能会说,“在创建子页面时,只需让它们输入权重即可。”这是很好的工作,直到他们拖动重新排序的轮廓。当这种情况发生时,Drupal会从-15开始为子页面分配权重,因此编辑器不确定输入的权重。
只是试图使为书籍输入子页面的过程尽可能简单,这样就可以减少错误(特别是同一章节增加了两次,或者根本没有)。
发布于 2018-12-01 23:06:44
作为对上面关于更新图书大纲显示而不清除缓存的第一个问题的回答:
将以下内容添加到自定义的.theme文件(请参见drupal.org/docs/8/theming),以向缓存的图书导航块添加标记:
function YOURTHEME_preprocess_block(&$vars)
{
  if ($vars['plugin_id'] == 'book_navigation') {
    $vars['#cache']['tags'] = ['node_type:{content-type}'];
  }
}然后将以下内容添加到自定义.module文件(请参阅Drupal.org/docs/8/creating定制模块),以便每当更改或删除指定内容类型的节点时刷新缓存的图书导航块:
use Drupal\node\NodeInterface;
use Drupal\Core\Cache\Cache;
function YOURMODULE_node_presave(NodeInterface $node)
{
  if ($node->getType() == '{content-type}') {
    Cache::invalidateTags(['node_type:{content-type}']);
  }
}
function YOURMODULE_node_delete(NodeInterface $node)
{
  if ($node->getType() == '{content-type}') {
    Cache::invalidateTags(['node_type:{content-type}']);
  }
}这个答案的下半部分归功于@oknate。有关更多细节,请参见添加或更新某个包的节点时,如何清除块上的缓存?。
https://drupal.stackexchange.com/questions/272851
复制相似问题