Идентификаторы слизней с тем же именем? - PullRequest
1 голос
/ 07 июня 2010

Я хочу создать URL-адреса слагов из заголовка пользователя в моей системе.

Если пользователь вводит «Лучший способ похудеть; точка!», Тогда я хочу, чтобы слизень был «лучшим способом похудеть».

Кроме того, если кто-то уже создал страницу с таким названием, я хочу, чтобы слаг был "самый лучший способ получить тонкий период-1".

Мой вопрос: как я могу проверить базу данных перед созданием записи? Хорошо, очевидно, мне придется выполнить проверку в базе данных, а затем выполнить запись. Это 2 запроса. Это нормальный способ сделать это?

Кроме того, существуют ли какие-либо обычные регулярные выражения для фильтрации не буквенных / цифровых символов и замены пробелов дефисами?

Любая помощь очень ценится.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 07 июня 2010

Со временем я создал эту функцию для изготовления слизней:

function filter($string)
{
    $search = array('`', '"', "'", ' ', '.');
    $replace = array('', '', '', '-', '-');

    $table = array(
        'Š'=>'S', 'š'=>'s', 'Đ'=>'Dj', 'đ'=>'dj', 'Ž'=>'Z', 'ž'=>'z', 'Č'=>'C', 'č'=>'c', 'Ć'=>'C', 'ć'=>'c',
        'À'=>'A', 'Á'=>'A', 'Â'=>'A', 'Ã'=>'A', 'Ä'=>'A', 'Å'=>'A', 'Æ'=>'A', 'Ç'=>'C', 'È'=>'E', 'É'=>'E',
        'Ê'=>'E', 'Ë'=>'E', 'Ì'=>'I', 'Í'=>'I', 'Î'=>'I', 'Ï'=>'I', 'Ñ'=>'N', 'Ò'=>'O', 'Ó'=>'O', 'Ô'=>'O',
        'Õ'=>'O', 'Ö'=>'O', 'Ø'=>'O', 'Ù'=>'U', 'Ú'=>'U', 'Û'=>'U', 'Ü'=>'U', 'Ý'=>'Y', 'Þ'=>'B', 'ß'=>'Ss',
        'à'=>'a', 'á'=>'a', 'â'=>'a', 'ã'=>'a', 'ä'=>'a', 'å'=>'a', 'æ'=>'a', 'ç'=>'c', 'è'=>'e', 'é'=>'e',
        'ê'=>'e', 'ë'=>'e', 'ì'=>'i', 'í'=>'i', 'î'=>'i', 'ï'=>'i', 'ð'=>'o', 'ñ'=>'n', 'ò'=>'o', 'ó'=>'o',
        'ô'=>'o', 'õ'=>'o', 'ö'=>'o', 'ø'=>'o', 'ù'=>'u', 'ú'=>'u', 'û'=>'u', 'ý'=>'y', 'ý'=>'y', 'þ'=>'b',
        'ÿ'=>'y', 'Ŕ'=>'R', 'ŕ'=>'r',
    );

    $string = strtr($string, $table);

    $string = preg_replace('/[^a-zA-Z0-9_-]/', '-', $string);

    $string = preg_replace('/-+/', '-', $string);

    return trim($string, '-');
}

Что касается первой части, вам понадобится 2 запроса.

0 голосов
/ 07 июня 2010

Чтобы ответить на ваш первый вопрос:

Да, вам потребуется 2 запроса / обращения к базе данных. Нет другого способа узнать, существует ли уже слизняк или нет. Очевидно, что если там уже есть запись «1», вы можете организовать запрос так, чтобы он возвращал все элементы, чтобы вы знали, какой номер использовать для нового слага.

select count(*) from slugTable where slugTitle
    like "the-best-ways-to-get-slim-period%"

(очевидно, это только для иллюстративных целей).

Возвращает 0, если новый слаг уникален, или положительное значение, если есть совпадения. Вы можете использовать этот счет напрямую, чтобы настроить ваш новый слаг:

if (selectCount > 0)
{
    slugURL = postTitle + "-" + selectCount;
}

(снова псевдокод).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...