Всем привет!
Подскажите, как лучше реализовать генерацию ЧПУ.
С переводом русской строки в транслит, проблем нет, но есть возможность (хоть и очень-очень маленькая) иметь две одинаковые записи с одним юрлом (когда название постов будет одинаковым (посты создают юзеры, и повторение названий вполне возможно)). Есть идея "разбавлять" транслит айдишником запись (site.ru/blog/view/23-sipmle-post), но как лучше получать этот айдишник?
Вариантов два:
1. При генерации урла брать айдишник последней строки в бд и присоединять его к транслиту (но тогда могут быть случаи, когда посты, добавленные в одно время будут иметь одинаковый айди в урле, хоть и транслит будет разный. Понимаю, что вероятность очень-очень мала, но все же)
2. При добавлении поста в бд пропускать "генерацию" урла, а затем брать айди уже созданного поста, генерировать урл и обновлять запись в бд (обновлять урл).
Как лучше поступить?
И может вообще не стоит загоняться с этими маловероятными моментами? Но хочется все-таки чтобы перфекционист во мне был доволен
ID в урл полюбому стоит добавлять. вы же не собираетесь искать в базе запись по VARCHAR надеюсь?
а так разобрал урл, выловил из его ID и по INT в базе ищете нужную запись.
к комментарию выше, обратите внимание, что что-бы вы не написали в урл
будь то:
dzhinsy._bryuki_i_kombez_1126042530
dzhinsy._bryuki_1126042530
dzhinsy._kombez_1126042530
dzhinsy._1126042530
вы все равно попадаете на одну и ту страницу, секрет в ID ;)
"добавленные в одно время будут иметь одинаковый айди в урле,"
а про блокировку базы данных вы что-нибудь знаете? про автоинкремент? может с этого стоит начать и часть вопросов отвалится сама собой)
Получить все схожие ЧПУ "SELECT slug FROM table WHERE slug = '{$slug}' OR ':slug' LIKE '{$slug}%'"
ну и если нет прямого совпадения используем исходный slug/чпу, если есть - циклом добавляем к slug итеративно увеличивающиеся номера до теп пор пока попадаются совпадения т.е.