Я работаю над базовым приложением блога в Codeigniter 3.1.8 и Bootstrap 4.
Я некоторое время работал над этим приложением, и, следовательно, оно имеет многофункции.Большинство из них полагаются на идентификаторы постов, страниц и т. Д.
В целях SEO я хотел бы использовать дружественные URL-адреса вместо идентификаторов для отображения отдельных сообщений , поэтому у меня естьдобавлен столбец slug
в таблицу posts
.
Слагы сделаны из заголовков сообщений, с этими кусками кода в *Модель 1018 * Posts_model и контроллер Posts соответственно.
От модель :
public function slug_count($slug){
$this->db->select('count(*) as slugcount');
$this->db->from('posts');
$this->db->where('slug', $slug);
$query = $this->db->get();
return $query->row(0)->slugcount;
}
public function create_post($post_image, $slug) {
$data = [
'title' => $this->input->post('title'),
'slug' => $slug,
'description' => $this->input->post('desc'),
'content' => $this->input->post('body'),
'post_image' => $post_image,
'author_id' => $this->session->userdata('user_id'),
'cat_id' => $this->input->post('category'),
'created_at' => date('Y-m-d H:i:s')
];
return $this->db->insert('posts', $data);
}
От контроллер :
// Create slug (from title)
$slug = url_title($this->input->post('title'), 'dash', TRUE);
$slugcount = $this->Posts_model->slug_count($slug);
if ($slugcount > 0) {
$slug = $slug."-".$slugcount;
}
Чтобы достичь своей цели SEO, я рассмотрел и опробовал подход в этого урока , но поскольку существует множество функциональных возможностей, требующихидентификаторы (например, удаление сообщений через AJAX) и другие, для которых не требуется слагов (редактирование сообщений). Я не могу (и не желаю) существенно изменить метод просмотра сообщений в контроллере,
public function post($id) {
$data = $this->Static_model->get_static_data();
$data['pages'] = $this->Pages_model->get_pages();
$data['categories'] = $this->Categories_model->get_categories();
$data['posts'] = $this->Posts_model->sidebar_posts($limit=5, $offset=5);
$data['post'] = $this->Posts_model->get_post($id);
if ($data['categories']) {
foreach ($data['categories'] as &$category) {
$category->posts_count = $this->Posts_model->count_posts_in_category($category->id);
}
}
if (!empty($data['post'])) {
// Overwrite the default tagline with the post title
$data['tagline'] = $data['post']->title;
// Get post comments
$post_id = $data['post']->id;
$data['comments'] = $this->Comments_model->get_comments($post_id);
$this->load->view('partials/header', $data);
$this->load->view('post');
} else {
$data['tagline'] = "Page not found";
$this->load->view('partials/header', $data);
$this->load->view('404');
}
$this->load->view('partials/footer');
}
и соответствующий код в модели:
public function get_post($id) {
$query = $this->db->get_where('posts', array('id' => $id));
if ($query->num_rows() > 0) {
$data = $query->row();
// run separate query for author name
$author_query = $this->db->get_where('authors', array('id' => $data->author_id));
if ($author_query->num_rows() == 1) {
$author = $author_query->row();
$data->first_name = $author->first_name;
$data->last_name = $author->last_name;
} else {
$data->first_name = 'Unknown';
$data->last_name = '';
}
return $data;
}
}
Что было бы прощеe, менее "навязчивый" подход к замене идентификатора записи на slug в отдельном сообщении просмотр только ?