我在放置的功能很少,但是没有按照我的意愿工作。
slug是自动创建的,取决于帖子标题。
示例:如果帖子标题是“test”,那么slug将是“test”
我的问题是,如果他们重复输入帖子标题“test”,这意味着slug也会被复制。出于这个原因,我已经创建了2个函数来为我处理这个问题。
此功能检查数据库中是否存在slug
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;
}
当slug获得独特的slug名称时,它就像Example: test-244
我希望slug是按数字顺序而不是随机顺序。
**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"
这是我知道如何详细解释的唯一方式,如果您不确定要采取什么,请告诉我。谢谢!
答案 0 :(得分:10)
这是一个非常标准的代码,只需要一个小循环:
$i = 1; $baseSlug = $slug;
while(slug_exist($slug)){
$slug = $baseSlug . "-" . $i++;
}
return $slug;
答案 1 :(得分:4)
<?php
$oSlug = 'Test';
$slug = $oSlug;
$count = 1;
while(slug_exist($slug)){
$slug = $oSlug.'-'.$count++;
}
print 'The slug i got is: '.$slug;
?>
答案 2 :(得分:1)
如果您可以完全访问数据库中的db和类似的商店逻辑,那么
答案 3 :(得分:1)
在我偶然发现之前,我已经在我的工作了几个小时。这个问题对我有所帮助,但我最终得到了一些不同的东西;
我还创建了一个函数来检查slug是否已经存在;
/**
* Rotates the specified bitmap to the correct orientation. Note that this library requires
* the following two libraries:
* 1. <a href="https://code.google.com/p/metadata-extractor/downloads/list">metadata-extractor-2.6.4</a>
* 2. <a href="https://github.com/drewfarris/metadata-extractor/tree/master/Libraries">xmpcore-5.1.2.jar</a>
*
* @param uri The Uri to the photo file.
* @param bmp The Bitmap representative of the photo file.
* @return A correctly rotated Bitmap.
*/
private static Bitmap fixOrientation(Uri uri, Bitmap bmp) {
try {
InputStream inputStream = mContext.getContentResolver().openInputStream(uri);
Metadata meta = null;
if (inputStream != null) {
try {
meta = ImageMetadataReader.readMetadata(new BufferedInputStream(inputStream), false);
} catch (ImageProcessingException e) {
e.printStackTrace();
}
if (meta != null) {
int orientation = 0;
ExifIFD0Directory exifIFD0Directory = meta.getDirectory(ExifIFD0Directory.class);
if (exifIFD0Directory.containsTag(ExifIFD0Directory.TAG_ORIENTATION))
try {
orientation = exifIFD0Directory.getInt(ExifIFD0Directory.TAG_ORIENTATION);
} catch (MetadataException e){
e.printStackTrace();
}
switch (orientation) {
case ExifInterface.ORIENTATION_ROTATE_90:
bmp = rotateBitmap(bmp, 90);
break;
case ExifInterface.ORIENTATION_ROTATE_180:
bmp = rotateBitmap(bmp, 180);
break;
case ExifInterface.ORIENTATION_ROTATE_270:
bmp = rotateBitmap(bmp, 270);
break;
}
}
}
} catch (IOException e) {
Log.d(TAG, "Error opening InputStream from uri: " + uri.toString());
e.printStackTrace();
}
return bmp;
}
对于发布新文章或帖子(取决于你在做什么),我有以下内容;
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;
}
}
执行起来要容易得多,因为没有循环,它非常干净。但是,如果您正在编辑现有帖子,该怎么办?如果他们更改了标题你想要slu改变,但是如果用户不知道你不希望它改变或增加/减少数字后缀。
所以使用一些帖子我最终得到了这个;
$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;
}
我知道这是一个较旧的问题,但我希望这有助于将来至少有一个人。