ShortLinks - сокращатель ссылок.
Пакет генерирует alias на основе времени создания и заголовка ресурса, затем пропускает через md5() и сокращает до нужной длинны (выставляется в настройках).
Таким образом получает alias вида — b79bcf
p.s. Не спрашивайте зачем это надо))) Возможно кому то понадобится. Пакет тут.
Таким образом получает alias вида — b79bcf
p.s. Не спрашивайте зачем это надо))) Возможно кому то понадобится. Пакет тут.
Поблагодарить автора
Отправить деньги
Комментарии: 3
Хм, что-то мне кажется, что коллизии очень даже возможны, ибо есть вероятность появления коллизий при полной md5-строке, а уж при обрезанной и подавно.
Этот момент как-то обрабатывается? (я код не смотрел)
Если нет, то имеет смысл добавить проверку при генерации — существует ли такой идентификатор у другого документа и, если существует, перехешировать, добавив какой-то дополнительный параметр, уникальный для этого ресурса.
И так в цикле, пока не получим уникальный сокращённый идентификатор.
Может быть ещё имеет смысл хранить в базе те поля, которые использовались для генерации короткого урла, в том же порядке, чтобы потом иметь возможность восстановить этот код, а то мало ли.
Этот момент как-то обрабатывается? (я код не смотрел)
Если нет, то имеет смысл добавить проверку при генерации — существует ли такой идентификатор у другого документа и, если существует, перехешировать, добавив какой-то дополнительный параметр, уникальный для этого ресурса.
И так в цикле, пока не получим уникальный сокращённый идентификатор.
Может быть ещё имеет смысл хранить в базе те поля, которые использовались для генерации короткого урла, в том же порядке, чтобы потом иметь возможность восстановить этот код, а то мало ли.
да теоретически вполне возможны коллизии, ты абсолютно прав.
но выставив длину псевдонима в 6ть я прогнал в цикле по 5000 ресурсов 5раз…
при этом имя ресурса было просто номером итерации. В итоге я не увидел ни одного дублирующего псевдонима что для меня явилось достаточным при решении поставленной задачи…
p.s. проверку прикручу если этот пакет вообще для кого то будет актуальным…
В целом спасибо за критику)
но выставив длину псевдонима в 6ть я прогнал в цикле по 5000 ресурсов 5раз…
при этом имя ресурса было просто номером итерации. В итоге я не увидел ни одного дублирующего псевдонима что для меня явилось достаточным при решении поставленной задачи…
p.s. проверку прикручу если этот пакет вообще для кого то будет актуальным…
В целом спасибо за критику)
Я бы вообще сделал в схеме этот объект наследником xPDOObject и прописал сокращенную ссылку как Primary Key.
Ну и проверка перед сохранением, конечно:
Ну и проверка перед сохранением, конечно:
if (!$modx->getCount('ShortLink', $link)) {
$object = $modx->newObject('ShortLink');
$object->fromArray(array(
'link' => $link,
// ...
), '', true, true);
$object->save();
}
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.