Как создать динамический URL в Codeigniter?.
Я следую Таблица который хранит основные детали статьи:
1. ID
2. Article Title
3. Content
4. Tags
5. Status
6. Create Time
7. Update Time
8. Author ID
9. Status
Теперь я хочу знать, как создать динамический URL, который содержит Page ID
& Article Title
,
Например http://www.domain.com/1/hello-codeigniter
Теперь над примером URL, я создаю URL с ID
& Article Title
,
но я не хочу показывать ID
с URL и по-прежнему получать контент, когда пользователь перенаправляет на страницу сведений.
Посмотреть: home_page.php
<div id="body">
<?php for($i=0; $i<count($blogPosts); $i++): ?>
<div class="post-preview">
<?php
$postID = $blogPosts[$i]->id; // Get post ID
$postTitle = $blogPosts[$i]->title; // Get post Title
$urlTitle = preg_replace('/\s+/', '-', $postTitle); // Replacing space with dash
echo anchor('content/'.$postID.'/'.$urlTitle, $postTitle, array('title' => $postTitle)); // Get post URL
echo "<br />";
?>
</div>
<hr>
<?php endfor; ?>
</div>
контроллер: home.php
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Home extends CI_Controller {
public function index() {
$this->load->model("HomeModel"); // Load HomeModel
$data['blogPosts'] = $this->HomeModel->blogPosts(); // Get blog posts data from blogPostsData function
$this->load->view("home_page", $data);
}
}
Модель: HomeModel.php
class HomeModel extends CI_Model {
public function blogPosts() {
$this->db->select('*');
$this->db->from('blog_posts');
$query = $this->db->get();
return $query->result();
}
}
После написания кода При наведении на ссылку я получаю этот URL:
http://localhost/codeIgniter/index.php/content/1/My-First-Blog-Post!
Как спрятаться index.php
, content
& 1
с URL.
Еще одна вещь, что когда я нажал на ссылку, я получаю это сообщение об ошибке:
An Error Was Encountered
The URI you submitted has disallowed characters.
Любая помощь будет оценена !!!
Ты можешь использовать routes
для этой цели
Удалять index.php
использование .htaccess
со следующим кодом
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
И в config.php
$config['uri_protocol'] = 'AUTO';
Чтобы удалить контент из URL, удалите контент из якоря ввиду
echo anchor($postID.'/'.$urlTitle, $postTitle, array('title' => $postTitle)); // Get post URL
Я не думаю, что вы должны удалить 1
с URL Если вы удалите его из URL, то как вы можете определить свой пост. Так что будет хорошо держать его в URL. Или, если вы хотите удалить, добавьте этот идентификатор в конце заголовка сообщения, как
http://localhost/codeIgniter/My-First-Blog-Post!-1
и взорвать последний элемент для id сообщения
An Error Was Encountered
The URI you submitted has disallowed characters.
Вы получаете эту ошибку, потому что в своем URL вы добавили !
, Чтобы сделать ваше приложение безопасным, CI предотвращает использование специальных символов в URL. Поэтому было бы лучше не использовать специальные символы в URL, кроме _
а также -
,
На вашем контроллере
class Content extends CI_Controller {
function index($id, $name)
{
echo $name;// this contain book name
echo $id;// this contain book id
//your code
}
}
теперь в ваших маршрутах application/config/routes.php
$route['(:num)/(:any)']='content/index/$1/$2';
Если вы храните слаг (заголовок статьи для безопасного URL) в базе данных, вам вообще не нужно показывать идентификатор. Это будет включать добавление столбца в вашу таблицу.
Вы можете автоматизировать генерацию пули при создании статьи, используя url_title()
как подробно Вот.
<a href="<?php echo base_url()?>index.php/controller_name/method_name/<?php echo $item['name'] ?>/<?php echo $item['id'] ?>" alt="">click here to view</a>
Ваш URL выглядит так www.example.com/index.php/controller_name/method/book_name/book id
В контроллере
function method_name($name, $id)
{
echo $name;// this contain book name
echo $id;// this contain book id
//Simply you can use this to get all data
$result = $this->Model_name->get_book_details($id);//in model $id hold the id of book
}