Using slugs in codeigniter

2019-01-11 01:45发布

I have heard of people using slugs for generating clean urls. I have no idea how it works. Currently i have a codeigniter site which generates url's like this

www.site.com/index.php/blog/view/7

From what i understand by maintaining a slug field it is possible to achieve urls like

www.site.com/index.php/blog/view/once-upon-a-time

How is this done? Especially in reference to codeigniter?

4条回答
不美不萌又怎样
2楼-- · 2019-01-11 02:39

You can use the CI Slug Library by Eric Barnes:

https://github.com/ericbarnes/CodeIgniter-Slug-Library

查看更多
Rolldiameter
3楼-- · 2019-01-11 02:40

To my ES friends, remove accented characters using this, from Text Helper:

    $string = 'áéíóú ÁÉÍÓÚ';    
    $slug = url_title(convert_accented_characters($string), 'dash', true));
    echo $slug; //aeiou-AEIOU
查看更多
做个烂人
4楼-- · 2019-01-11 02:41

I just store the slugs in my database table, in a column called slug, then find a post with the slug, like this:

public function view($slug)
{
    $query = $this->db->get_where('posts', array('slug' => $slug), 1);

    // Fetch the post row, display the post view, etc...
}

Also, to easily derive a slug from your post title, just use url_title() of the URL helper:

// Use dashes to separate words;
// third param is true to change all letters to lowercase
$slug = url_title($title, 'dash', true);

A little bonus: you may wish to implement a unique key constraint to the slug column, that ensures that each post has a unique slug so it's not ambiguous which post CodeIgniter should look for. Of course, you should probably be giving your posts unique titles in the first place, but putting that in place enforces the rule and prevents your application from screwing up.

查看更多
闹够了就滚
5楼-- · 2019-01-11 02:43

Creating Page slug in codeigniter

create Helper with the name of slug_helper.php

<?php

if (!function_exists('create_slug')) {
function create_slug($string)
{
    $slug = trim($string);
    $slug = strtolower($slug);
    $slug = str_replace(' ', '-', $slug);

    return $slug;
} } ?>


autoload
$autoload['helper'] = array('slug');

 Controller
 $data = array(
            'title' => $this->input->post('title'),
            'content' =>$this->input->post('content'),
            'slug' => create_slug($this->input->post('title'))
        ); 

 $insert_page = $this->Admin_model->insert_page($data);
查看更多
登录 后发表回答