Ela*_*man 6 drupal paragraph drupal-8
我注意到 Paragraph 实体没有从数据库中删除。他们宁愿取消与父节点的链接。
如果您创建一个视图,该视图列出段落并附加上下文过滤器,该过滤器按Parent ID.
现在,我找到了一种解决方法,可以创建一个列出内容的视图。将关系附加到段落。这样可以确保只显示链接的段落。
仍然存在数据库中有数百个孤立段落和字段数据的问题。有没有办法清理它们?
编辑: 这显然是一个主要错误,可以在段落模块的问题跟踪器中找到:已删除的段落实体不会从数据库中删除
现在我已经发现这是一个错误并且尚未修复,我的主要目标是清理孤立的段落。
有人创建了这个模块:Paragraph clean,但我不喜欢将模块用于此类目的。
所以,下面我将发布我第一次成功尝试解决它。我必须警告这不安全,因为它会删除段落!
该解决方案未针对使用修订、内容翻译等进行测试。因此这可能会毁了您的一天。备份您的网站。
使用Devel模块,转到Development> Execute PHP Code。粘贴并执行以下代码:
// get all paragraphs
$deleted = [];
$paragraph_ids = \Drupal::entityQuery('paragraph')->execute();
$paragraphs = \Drupal::entityTypeManager()->getStorage('paragraph')->loadMultiple($paragraph_ids);
foreach ($paragraphs as $target_id => $paragraph) {
// get parent entity (node, taxonomy, paragraph, etc.)
$parent = $paragraph->getParentEntity();
$field_name = $paragraph->parent_field_name->value;
// Check if current paragraph exists in parent entity field values
$exists = FALSE;
$values = is_null($parent) ? [] : $parent->get($field_name)->getValue();
foreach($values as $value) {
if ($value['target_id'] == $target_id) {
$exists = TRUE;
}
}
// Delete paragraphs that aren't linked to an entity they claim as a parent
if (!$exists) {
$paragraph->delete();
$deleted[] = $target_id;
}
}
print "Deleted paragraph IDs: " . implode(', ', $deleted);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4727 次 |
| 最近记录: |