2012-05-21 1 views
2

Пожалуйста, смотрите следующую структуруURL Codeigniter: Как отображать идентификатор и название статьи в URL

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

ссылки В приведенном выше звене 10672712 является вопрос идентификатором Я думаю, потому что если вы посмотрите на ссылку вам получите в том же месте, что и выше:

http://stackoverflow.com/questions/10672712 

Теперь, если вы используете ссылку выше, то вы заметите, что в адресной строке браузера ссылку автоматически добавляет заголовок вопроса (как слизняк) после того, как на вопрос ид и ему появляется так же, как и первая ссылка выше.

Я пытаюсь создать сайт на основе статьи с помощью Codeigniter. Чтобы отобразить конкретную статью у меня есть контроллер, который выглядит следующим образом:

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;} 

    } 

Если вы нажмете this->localhost/my_base_url/my_controller/my_funtion/article_id тогда моя статья показывает вверх. Теперь я пытаюсь достичь, если кто-то попадает localhost/my_base_url/my_controller/my_funtion/article_id Я хочу автоматически добавить заголовок статьи в виде пули сразу после article_id. (Как и в примере, приведенном выше)

Не могли бы вы рассказать мне, как это сделать ?

спасибо :)

P.S В моей таблице DB У меня есть столбец под названием article_slug, в котором я хранить мое название статьи, как пули (например: голосование-системы, как-StackOverflow).

ответ

9

Контроллеры/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 

    } 

} 

Там нет смысла иметь столбец пробкового в вашей базе данных, так как вы ничего, основываясь на вашем слизняк не определить, не является его уникальным.

+0

Спасибо :) Brilliant –

+0

Хорошо, я удалю столбцы слизняков. Благодаря :) –