У меня появилось несколько функций, которые не работают так, как я хотел.
Затвор автоматически создается на лету, зависит от заголовка сообщения.
Пример: если заголовок сообщения является «тестом», то слизень будет «проверять»,
Моя проблема в том, что, если их дублировать запись заголовка «test», что означает, что слизня также будет дублироваться. По этой причине я создал две функции для обработки этого для меня.
Эта функция проверяет, существует ли пул в базе данных
function slug_exist($x){ global $db; $sql = "SELECT post_name FROM posts WHERE post_name=\"$x\""; $query = $db->select($sql); if($db->num_rows() > 0){ return true; } }
Если slug существует в базе данных, я использую эту функцию, чтобы дать slug уникальное имя
if(slug_exist($slug)){ $rand = rand(10,50); $slug = $slug."-".$rand; return $slug; }
Ну, когда слизня получит уникальное имя слитка, это будет похоже на Example: test-244
Я хочу, чтобы слизняки были в порядке чисел, а не в случайном порядке.
**Example:** Post Title is "Test" Slug is "test-1" Post Title is "Test" Slug is "test-2" Post Title is "Test" Slug is "test-3"
Это единственный способ, которым я знаю, как объяснить подробно, пожалуйста, дайте мне знать, если вы не знаете, что происходит. Благодаря!
Это очень стандартный код, вам нужен небольшой цикл:
$i = 1; $baseSlug = $slug; while(slug_exist($slug)){ $slug = $baseSlug . "-" . $i++; } return $slug;
в$i = 1; $baseSlug = $slug; while(slug_exist($slug)){ $slug = $baseSlug . "-" . $i++; } return $slug;
<?php $oSlug = 'Test'; $slug = $oSlug; $count = 1; while(slug_exist($slug)){ $slug = $oSlug.'-'.$count++; } print 'The slug i got is: '.$slug; ?>
в<?php $oSlug = 'Test'; $slug = $oSlug; $count = 1; while(slug_exist($slug)){ $slug = $oSlug.'-'.$count++; } print 'The slug i got is: '.$slug; ?>
Если у вас есть полный доступ к вашему db и как логика магазина в db, вы можете
Я работал над собой несколько часов, прежде чем наткнулся на это. Этот вопрос помог мне немного, но я закончил с чем-то совсем другим;
Я также создал функцию, чтобы проверить, существует ли slug;
function slugExist($slug){ global $db; $query = $db->query("SELECT * FROM `blog-posts` WHERE `slug` = '".$slug."'"); $results = $query->num_rows; if($results > 0){ return true; }else{ return false; } }
Для публикации новой статьи или сообщения (в зависимости от того, что вы делаете) у меня есть следующее:
$slug = furl($_POST['title']); $CheckSlug = $db->query("SELECT * FROM `blog-posts` WHERE `slug` LIKE '".$slug."%'"); $numHits = $CheckSlug->num_rows; if($numHits > 0){ $slug = $slug.'-'.$numHits; }
Это намного проще при выполнении, так как нет цикла, и он очень чистый. Но что, если вы редактируете существующий пост? Вы хотите, чтобы slug изменился, если они изменили заголовок, но вы не хотите, чтобы он менял или увеличивал / уменьшал числовой суффикс, если пользователь этого не делает.
Поэтому, используя несколько сообщений, я закончил с этим;
$slug = furl($_POST['title']); if($slug != $oldSlug){ // 1. If the slug of the new title is different to the old one, proceed to adding suffix $i = 1; $baseSlug = $slug; // 2. Set counter and baseSlug vars. while(slugExist($slug)){ // 3. Start a loop to keep adding to the numeric value until an empty one is found $slug = $baseSlug . "-" . $i++; // 4. Set the new slug variable to the base with a new number if($slug == $oldSlug){ // 5. If the slug with the added number matchs the existing slug, then we dont want to change it break; // 6. Break the loop to prevent additional numeric changes to the slug } } }
Я знаю, что это немного более старый вопрос, но я надеюсь, что это поможет хотя бы одному другому человеку в будущем.