3
雖然尋找到this question我想出了以下的解決方案,從canDelete()
稱爲擴展到File
:找到,如果頁面上的精選形象已經改變
protected function isFileInUse()
{
$owner = $this->getOwner();
$dataObjectSubClasses = ClassInfo::subclassesFor('DataObject');
$classesWithFileHasOne = [];
foreach ($dataObjectSubClasses as $subClass) {
$hasOnes = array_flip($subClass::create()->hasOne());
if (array_key_exists($owner->class, $hasOnes)) {
$classesWithFileHasOne[$subClass] = $hasOnes[$owner->class];
}
}
$threshold = (Director::get_current_page()->class == 'AssetAdmin') ? 1 : 2;
$uses = 0;
foreach ($classesWithFileHasOne as $class => $relation) {
$uses += count($class::get()->filter("{$relation}ID", $this->owner->ID));
if ($uses >= $threshold) {
return true;
}
}
return false;
}
有一個邊緣情況下,我不能讓儘管如此。如果某個特色圖像在博客文章中發生了變化,那麼如果只有一個其他圖像使用了相同的圖像,那麼採用這種方法後,它仍然會允許它被刪除。這是因爲在保存頁面之前,當前更改不會計入圖像的使用。
在CMS頁面和介質管理器中設置的閾值不同,以允許從使用該頁面的頁面中刪除圖像。
有沒有一種方法可以從我的文件擴展名中訪問包含頁面(或其他元素 - 我們使用Elemental)以查看其關聯圖像是否已更改?