3

以下のリンク構造をご覧ください

http://stackoverflow.com/questions/10672712/voting-system-like-stackoverflow

上記のリンクで10672712は、私が推測する質問IDです。次のリンクを確認すると、上記と同じ場所に移動するためです。

 http://stackoverflow.com/questions/10672712

上記のリンクを使用すると、ブラウザのアドレスバーで、リンクが質問IDの後に質問のタイトル(スラッグとして)を自動的に追加し、上記の最初のリンクと同じように表示されます。

Codeigniterを使用して記事ベースのWebサイトを作成しようとしています。特定の記事を表示するために、次のようなコントローラーがあります。

function articles(){


    $id=$this->uri->segment(3);

    $this->load->model('mod_articles');
    $data['records']=$this->mod_articles->list_articles($id);
    $this->load->view('view_article',$data);
     }

私のモデル:

  function list_articles($id)

       $this->db->select('*');
        $this->db->from('cx_article');
        $this->db->join('cx_author', 'cx_author.author_id = cx_article.author_id');
        $this->db->where('article_id', $id); 
        $query = $this->db->get();

       if ($query->num_rows() > 0)
        { return $query->row_array();
        }
        else {return NULL;}

    }  

これを押すと->localhost/my_base_url/my_controller/my_funtion/article_id私の記事が表示されます。今私が達成しようとしているのは、誰かがヒットした場合localhost/my_base_url/my_controller/my_funtion/article_id、article_idの直後にスラッグとして記事のタイトルを自動的に追加したいということです(上記の例のように)

その方法を教えてください。

ありがとう:)

PS私のDBテーブルには、という名前の列があり、その列article_slugに記事のタイトルをslugとして格納しています(例:voting-system-like-stackoverflow)。

4

1 に答える 1

9

controllers / my_controller.php

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class My_controller extends CI_Controller {

    function my_function($int_id = NULL, $str_slug = '') {

        $row = $this->db->get_where('cx_article', array('article_id' => $int_id))->row();

        if ($row and ! $str_slug) {

            $this->load->helper('url');

            $str_slug = url_title($row->title, 'dash', TRUE);
            redirect("my_controller/my_function/{$int_id}/{$str_slug}");

        }

        // Run the rest of the code here

    }

}

スラッグに基づいて何も識別せず、一意でもないため、データベースにスラッグ列を含める意味はありません。

于 2012-05-21T11:00:12.970 に答える