Recipe for creating Dynamic sitemap with CodeIgniter.
Like yoursite.com/sitemap.xml
Example.
Suppose you have an articles blog where url for each article is by article ID Like yoursite.com/123 .
All articles are stored in articleTable of the database.
First Create a model to get URLs.
- Create a file named url_model.php in application/models directory.
- Get Urls from database
<?php
class
Url_model
extends
CI_Model{
public
function
__construct(){
$this
->load->database();
}
public
function
getURLS(){
$this
->db->select(
'articleID'
);
$query
=
$this
->db->get(
'articleTable'
);
return
$query
->result_array();
}
}
?>
Create Controller for Sitemap.
- Create a file named sitemap.php in application/controllers directory.
- Get Urls from model and load them in view
<?php
Class Sitemap
extends
CI_Controller {
public
function
__construct(){
parent::__construct();
$this
->load->model(
'url_model'
);
}
function
sitemap()
{
$data
[
'urlslist'
] =
$this
->url_model->getURLS();
$this
->load->view(
"sitemap_view"
,
$data
);
}
}
?>
Create View for Sitemap
- Create a file named sitemap_view.php in application/views directory.
- Display the Urls in format
<?php
echo
'<?xml version="1.0" encoding="UTF-8" ?>'
?>
<url>
<loc><?php
echo
base_url();?></loc>
<priority>1.0</priority>
</url>
<!-- Your Sitemap -->
<?php
foreach
(
$urlslist
as
$url
) { ?>
<url>
<loc><?php
echo
base_url().
"/"
.
$url
[
'articleID'
]?></loc>
<priority>0.5</priority>
</url>
<?php } ?>
</urlset>
Edit routes.php
- Open routes.php in application/config directory.
- Add the following line to routes
$route
[
'sitemap.xml'
] =
"sitemap/sitemap_view"
;
Your sitemap is ready and can be accessed from yoursite.com/sitemap.xml. It can also be submitted to services like Google Webmaster tools