【问题标题】:how to auto generate permalink in codeigniter like wordpress?如何在像wordpress这样的codeigniter中自动生成永久链接?
【发布时间】:2018-03-14 09:41:17
【问题描述】:

我正在这个系统中开发 CodeIgniter 应用程序,我可以选择从管理面板创建动态页面 titlecontent 都存储在数据库中。但是我想在 page 发布后像 WordPress 一样在 CodeIgniter 中自动生成 permalink URL?

举例

the page title name test 
the function should be created 
http://localhost/codeigniter/test after form data stored in the database

页面控制器

class Pages extends CIF_Controller {

public $layout = 'full';
public $module = 'pages';
public $model = 'Pages_model';

public function __construct() {
    parent::__construct();
    $this->load->model($this->model);
    $this->_primary_key = $this->{$this->model}->_primary_keys[0];
    $this->permission();
}


public function index() {

     $this->{$this->model}->custom_select = 'pages.*, menu.title as menu';
     $this->{$this->model}->joins = array(
        'menu' => array('menu.menu_id = pages.menu_id', 'inner')

    );

    $data['items'] = $this->{$this->model}->get();
    $this->load->view($this->module . '/index', $data);

}

public function manage($id = FALSE) {
    $data = array();

     $this->{$this->model}->custom_select = 'pages.*, menu.title as menu';
     $this->{$this->model}->joins = array(
        'menu' => array('menu.menu_id = pages.menu_id', 'inner')

    );

    if ($id) {
        $this->{$this->model}->{$this->_primary_key} = $id;
        $data['item'] = $this->{$this->model}->get();
        if (!$data['item'])
            show_404();
    } else {
        $data['item'] = new Std();

    }
    $this->load->library("form_validation");
    $this->form_validation->set_rules('title', 'title', 'trim|required');
    $this->form_validation->set_rules('menu_id', 'select menu', 'trim|required');
    $this->form_validation->set_rules('content', 'content', 'trim|required');
    $this->form_validation->set_rules('link', 'link', 'trim|required');

    if ($this->form_validation->run() == FALSE)
        $this->load->view($this->module . '/manage', $data);

    else {
        $this->{$this->model}->title = $this->input->post('title');
        $this->{$this->model}->menu_id = $this->input->post('menu_id');
        $this->{$this->model}->content = $this->input->post('content');
        $this->{$this->model}->menulink = $this->input->post('link');
        $this->{$this->model}->save();
        redirect('admin/' . $this->module);
    }
}

public function delete($id = false) {
    if (!$id)
        show_404();
    $this->{$this->model}->{$this->_primary_key} = $id;
    $data['item'] = $this->{$this->model}->get();
    if (!$data['item'])
        show_404();
    $this->{$this->model}->delete();
    redirect('admin/' . $this->module);
}
}

【问题讨论】:

  • 我的回答对你有帮助吗?

标签: php wordpress codeigniter url permalinks


【解决方案1】:

我在我的模型中使用了一个方法(在你的例子中是“Pages_model”),它存储页面以生成 url,它将标题作为输入并返回一个唯一的 URL,然后我将其添加到数据库字段“url”中.

需要清除 URL 中的空格和不需要的字符。由于我的语言是瑞典语,我们还想重写一些字符,å 等等。然后我们需要检查url是否重复,如果是这种情况我只是在url中添加一个uniqid(),您可以考虑其他方法。以下是如何编写该方法的示例:

function make_url($title)
{
    // rewrite special characters
    $url = str_replace('é','e',$title);
    $url = str_replace('å','a',$url);
    $url = str_replace('ä','a',$url);
    $url = str_replace('ö','o',$url);
    $url = str_replace('Å','A',$url);
    $url = str_replace('Ä','A',$url);
    $url = str_replace('Ö','O',$url);
    // rewrite spaces and multiple dashes to single dashes
    $url = str_replace(' ','-',$url);
    $url = str_replace('--','-',$url);
    $url = str_replace('---','-',$url);
    $url = str_replace('----','-',$url);
    // remove all other characters
    $url = preg_replace('/[^A-Za-z0-9\-]/','',$url);
    // make url lowercase
    $url = strtolower($url);

    // check if url already used (in 'pages' table)
    $q = $this->db->where('url',$url)->get('pages');
    if ($q->num_rows()): 
        $url = $url . '-' . uniqid();
    endif;
    return $url;
}

因此添加此模型方法,然后修改Pages_model->save() 方法以将带有$this->make_url($title) 的url 字段添加到数据库中,并带有您发布的标题。

【讨论】:

    猜你喜欢
    • 2015-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-13
    相关资源
    最近更新 更多