В этом DataObject есть поле, предоставленное пользователем Заголовок, который должен быть преобразован в уникальный URL-адрес.Уникальный URL-адрес SilverStripe (debug)
Желаемый результат: Дублирующийся URL должен получить суффикс к его значению. Таким образом, сохранение 2 записей с заголовком Foo
должно привести к одной записи с foo
в качестве ее значения для столбца URL
, а вторая запись должна иметь значение foo-2
для того же столбца.
public function onBeforeWrite() {
parent::onBeforeWrite();
// Sanitize Title field to use for URL
$filter = URLSegmentFilter::create();
$this->URL = $filter->filter($this->Title);
// If URL is not unique, add suffix
$i = 1;
while($this->uniqueURL($this->URL)) {
$i++;
$this->URL = $this->URL . "-" . $i;
}
}
метод: uniqueURL (в пределах того же класса)
public function uniqueURL($URL) {
// Check if there is a record with the same URL
$existingURL = DataObject::get('NewsArticle', "URL = '$URL'");
if ($existingURL) {
// this is a duplicate URL
return false;
} else {
// this is a unique url
return true;
}
}
Сохранение Foo
в два раза приведет к foo
и foo-2
.
При сохранении двух записей с тем же названием Foo
результатов в двух полях URL с foo
В чем ваш вопрос, нужен ли первый случай «foo» и «foo-2» и второй случай? или 'foo-1' и' foo-2' в обоих случаях? – Timmetje
'foo' для первого и' foo-2' для второго – Faloude