dapatkan siput unik di codeigniter

Saya ingin mendapatkan siput unik untuk artikel saya. Saya menggunakan codeigniter. Saya ingin tahu apakah ada sesuatu seperti sample-title-1 dan sample-title-2 jika ada dua artikel yang memiliki judul yang sama seperti yang dilakukan codeignier dengan unggahan file filename(:num) . Saya tidak dapat menemukan cara untuk melakukannya. Saya bukan ahli codeigniter. Saya sedang mempelajarinya.

Saya menyiapkan sebuah fungsi, ketika meneruskan string $str ia memeriksa apakah siput itu ada, jika ada, ia menambahkan ID artikel itu ke akhir siput itu dan mengembalikannya, jika tidak, ia mengembalikan siput itu.

Ini berfungsi dengan baik dan melayani tujuan siput unik. Tapi yang saya inginkan adalah memiliki sesuatu seperti sample-title-1 dan sample-title-2 . Apakah ada cara untuk melakukannya?

$data['slug'] = $this->get_slug($data['title']);


public function get_slug ($str)
    {
        $slug = url_title($str, 'dash', true);
        // Do NOT validate if slug already exists
        // UNLESS it's the slug for the current page

        $id = $this->uri->segment(4);
        $this->db->where('slug', $slug);
        ! $id || $this->db->where('id !=', $id);
        $category = $this->category_m->get();

        if (count($category)) {
            return $slug.$id;
        }

        return $slug;
    }

person prakashchhetri    schedule 30.07.2013    source sumber
comment
kemungkinan duplikat Menggunakan slug di codeigniter   -  person alpere    schedule 14.12.2013


Jawaban (3)


mudah digunakan dan sangat membantu untuk membuat slug unik lihat di CI slug library

baca dokumentasinya untuk mengimplementasikannya.

person umefarooq    schedule 30.07.2013

yang biasa saya lakukan adalah membuat slug db field UNIQUE.

Kemudian lakukan semuanya dengan mudah menggunakan helper CI Url Helper dan Pembantu Teks

    $last_id_inserted = //get from db the last post's ID;
    $post_title = "My slug would be";
    $slug =  mb_strtolower(url_title(convert_accented_characters($post_title))).'-'.$last_id_inserted;
    echo $slug;
    //outputting my-slug-would-be-123



//insert the new post with slug

Jadi ID akan menjadi unik dan slug juga.

person itsme    schedule 31.07.2013

Saya pikir Anda memerlukan sesuatu seperti itu:

//Database loaded
//Text helper loaded

function post_uniq_slug($slug, $separator='-', $increment_number_at_end=FALSE) {    
    //check if the last char is a number
    //that could break this script if we don't handle it
    $last_char_is_number = is_numeric($slug[strlen($slug)-1]);
    //add a point to this slug if needed to prevent number collision..
    $slug = $slug. ($last_char_is_number && $increment_number_at_end? '.':'');

    //if slug exists already, increment it
    $i=0;
    $limit = 20; //for security reason
    while( get_instance()->db->where('slug', $slug)->count_all_results('posts') != 0) {
        //increment the slug
        $slug = increment_string($slug, $separator);

        if($i > $limit) {
            //break;
            return FALSE;
        }

        $i++;
    }

    //so now we have unique slug
    //remove the dot create because number collision
    if($last_char_is_number && $increment_number_at_end) $slug = str_replace('.','', $slug);

    return $slug;
}

Contoh:

post_uniq_slug('sample'); //"sample" exists
//sample-1

post_uniq_slug('sample-2013'); //"sample-2013" exists
//sample-2013-2

post_uniq_slug('sample-2013', '-', TRUE); //increment "sample-2013"
//sample-2014

*TIDAK DIUJI

person Aurel    schedule 31.07.2013