Building with CodeIgniter: Adding the Blog
Editors Note: I’d like to welcome back Kenny Meyers as a guest author on EE Insider. Kenny is a web developer at Seattle, WA based Blue Flavor. He loves ExpressionEngine & CodeIgniter for their “less is more” approach and the ability to generate good, clean standards-compliant markup. He will be writing a series of articles on building a simple web application with CodeIgniter.
There is nothing in the world everyone wishes to hear more than your opinion. The primary vehicle for this is your blog. In the last article we began the process of building a tumblelog with CodeIgniter. In this, Part 2 of a four-part series, we will be building the blog in CodeIgniter. For brevity’s sake, many of the features that are standard on a blog have been cut-out. These include
- Comments
- Pagination
- Admin Authentication
If you want help building or learning about these kind of features, I highly recommend the CodeIgniter forums.
So great it deserved a SQL
To begin writing blog posts, we must first create a database table to store the information. To build out the MySQL table, its important to understand the components of a blog post. For our use we need:
- An entry
- A summary
- A title
- A url title
- A date of entry
- An author field
- And an entry id
To simplify this article, here is the SQL to build your blog table, with some built-in entry data.
CREATE TABLE blog (
entry_id integer(10) PRIMARY KEY NOT NULL AUTO_INCREMENT,
summary TEXT NULL,
entry TEXT NULL,
title varchar(255) NOT NULL,
url_title varchar(200) NOT NULL,
unique(url_title),
creation_date DATETIME NOT NULL,
edited_date DATETIME NULL,
author VARCHAR(100)
);
INSERT INTO blog (`title`, `url_title`, `summary`, `entry`, `author`, `creation_date`) VALUES
('I love my mother', 'this_is_the_greates_thing_ever',
'My children, latest born to Cadmus old, Why sit ye here as suppliants, in your hands Branches of olive filleted with
wool? What means this reek of incense everywhere, And everywhere laments and litanies? ',
'<p>OEDIPUS My children, latest born to Cadmus old, Why sit ye here as suppliants, in your hands Branches of olive filleted with wool? What means this reek of incense everywhere, And everywhere laments and litanies? Children, it were not meet that I should learn From others, and am hither come, myself, I Oedipus, your world-renowned king. Ho! aged sire, whose venerable locks Proclaim thee spokesman of this company, Explain your mood and purport. Is it dread Of ill that moves you or a boon ye crave? My zeal in your behalf ye cannot doubt; Ruthless indeed were I and obdurate If such petitioners as you I spurned.</p><p>PRIEST Yea, Oedipus, my sovereign lord and king, Thou seest how both extremes of age besiege Thy palace altars--fledglings hardly winged, And greybeards bowed with years, priests, as am I Of Zeus, and these the flower of our youth. Meanwhile, the common folk, with wreathed boughs Crowd our two market-places, or before Both shrines of Pallas congregate, or where Ismenus gives his oracles by fire. For, as thou seest thyself, our ship of State, Sore buffeted, can no more lift her head, Foundered beneath a weltering surge of blood. A blight is on our harvest in the ear, A blight upon the grazing flocks and herds, A blight on wives in travail; and withal Armed with his blazing torch the God of Plague Hath swooped upon our city emptying The house of Cadmus, and the murky realm Of Pluto is full fed with groans and tears.</p><p>Therefore, O King, here at thy hearth we sit, I and these children; not as deeming thee A new divinity, but the first of men; First in the common accidents of life, And first in visitations of the Gods. Art thou not he who coming to the town Of Cadmus freed us from the tax we paid To the fell songstress? Nor hadst thou received Prompting from us or been by others schooled; No, by a god inspired (so all men deem, And testify) didst thou renew our life. And now, O Oedipus, our peerless king, All we thy votaries beseech thee, find Some succor, whether by a voice from heaven Whispered, or haply known by human wit. Tried counselors, methinks, are aptest found To furnish for the future pregnant rede. Upraise, O chief of men, upraise our State! Look to thy laurels! for thy zeal of yore Our country\'s savior thou art justly hailed: O never may we thus record thy reign:-- "He raised us up only to cast us down." Uplift us, build our city on a rock. Thy happy star ascendant brought us luck, O let it not decline! If thou wouldst rule This land, as now thou reignest, better sure To rule a peopled than a desert realm. Nor battlements nor galleys aught avail, If men to man and guards to guard them tail.</p>', "Some Other Dude", NOW()),
('This is the worst thing ever', 'the_worst_thing_ever', 'I MEAN to inquire if, in the civil order, there can be any sure and legitimate rule of administration, men being taken as they are and laws as they might be. In this inquiry I shall endeavour always to unite what right sanctions with what is prescribed by interest, in order that justice and utility may in no case be divided.', '<p>I enter upon my task without proving the importance of the subject. I shall be asked if I am a prince or a legislator, to write on politics. I answer that I am neither, and that is why I do so. If I were a prince or a legislator, I should not waste time in saying what wants doing; I should do it, or hold my peace.</p><p>As I was born a citizen of a free State, and a member of the Sovereign, I feel that, however feeble the influence my voice can have on public affairs, the right of voting on them makes it my duty to study them: and I am happy, when I reflect upon governments, to find my inquiries always furnish me with new reasons for loving that of my own country.</p><h2>1. SUBJECT OF THE FIRST BOOK</h2><p>MAN is born free; and everywhere he is in chains. One thinks himself the master of others, and still remains a greater slave than they. How did this change come about? I do not know. What can make it legitimate? That question I think I can answer.</p><p>If I took into account only force, and the effects derived from it, I should say: "As long as a people is compelled to obey, and obeys, it does well; as soon as it can shake off the yoke, and shakes it off, it does still better; for, regaining its liberty by the same right as took it away, either it is justified in resuming it, or there was no justification for those who took it away." But the social order is a sacred right which is the basis of all other rights. Nevertheless, this right does not come from nature, and must therefore be founded on conventions. Before coming to that, I have to prove what I have just asserted.</p>', 'Some Other Dude', NOW());
To run this SQL code, use the import tool on phpMyAdmin or your MySQL admin tool. To use the command line, please refer to the instructions on this page.
If you don’t understand SQL, or this looks like a strange dialect of Klingon, you can always learn at the MySQL docs.
More setup
Now that our database is setup, we need a model to grab information from the database. We want to build an entries and a listing page. First, we need to make sure that the database library is loaded, and configure CodeIgniter to do so. Open /tumbleupon/config/autoload.php and on line 42 set:
$autoload['libraries'] = array('database');
The autoload parameter tells CodeIgniter which libraries to load on initialization. This means that you can omit the load function for a particular library. This is an extremely useful configuration variable, but use it wisely; load only that which you need.
Finally to make sure that our redirects and urls work correctly, open /tumbleupon/config/config.php and on line 14 set the base_url to whatever your host is. If you’re working locally this will likely be:
$config['base_url'] = "http://localhost/";
With our configuration complete and database class loaded, it’s time to create our model.
It’s only a model
To build our model we need to consider what is to be extracted from the database. There are two pages that we are building: an entry listing page and an entry page. This means we’re going to require the Model to grab an entry or to grab all entries when a user requests a particular URL.
Note: It’s always best to consider keeping things DRY (Don’t Repeat Yourself) so where as a controller maps to URLs, a model needs to consider what a controller may need. A model has no ties to a URL. For our sake, since we’ll have listing and a single entry functionality that appear reusable, we can create a very simple model class:
<?php
class Blog_model extends Model {
public function __construct()
{
parent::__construct();
}
//Gets all entries in the blog table
public function get_all_entries()
{
$this->db->select('summary, title, url_title, author');
$query = $this->db->get('blog');
if ($query->num_rows() > 0)
{
return $query->result();
} else {
return array();
}
}
//gets a single entry based on its url title
public function get_entry($url_title)
{
$this->db->select('title, entry, author')->where('url_title', $url_title);
$query = $this->db->get('blog', 1);
if ($query->num_rows() == 1)
{
return $query->row();
} else {
return false;
}
}
}
/* End of file blog_model.php */
/* Location: ./tumbleupon/models/blog_model.php */
?>
First, we need to create a Model that extends the Model class. We’re going to name it Blog_model. Save the file in /tumbleupon/models/ as blog_model.php.
Here is how this class works:
__construct()
This function builds the Blog_model and extends the Model class.
get_all_entries()
get_all_entries()grabs every single entry in the database table.$this->db->select(‘summary, title, url_title, author’);is a mysql select statement wrapped in a CodeIgniter function from the database class. CodeIgniter will combine parameters until you call it with the$this->db->get(). This is best visible in the get_entry function. We select only what we need, in this case summary, title, url_title and author, so the query will be quicker.- We then run the
db->get(‘blog’)which requests information from the database based on the query you’ve built (e.g. our previous select statement). The result is saved into a$queryobject. - We then run an if/else conditional to verify that data was returned. If no table rows are returned we return an empty array. If at least one 1 row is returned, we return the result object.
get_entry($url_title)
get_entryasks for a$url_titlehanded to it from the controller.- It then builds a select statement for the specific columns it needs.
- We use a syntax only available in PHP5 called chaining. This means instead of doing multiple
$this->db->select,$this->db->wherestatements to generate our query we can just chain them together in an elegant form. We’re looking for entries where theurl_titlecolumn equals our$url_titleparameter. - The model runs the query and look for 1 row returned. If 1 is, we return a
rowobject and if not we just returnFALSE. This, and the empty array potentially returned inget_all_entries, will help us do error checking on the controller.
Now that we’ve built our model right and proper, we need to access it from the controller.
Flight controller
Now that we can grab data from the database, we need to build a blog controller to assist in displaying that data to the user. First, we create a controller file in /tumbleupon/controllers/ named blog.php. Since we have two types of pages, an entry and an entry listing page we only need two controller functions to handle it.
<?php
class Blog extends Controller {
public function __construct()
{
parent::__construct();
}
//the home page of the blog
public function index()
{
$this->load->model('Blog_model', 'blog');
$entries['query'] = $this->blog->get_all_entries();
$this->load->view('blog/index', $entries);
}
//For an individual entry, the url title is used to grab
//the entry
public function entry($url_title = "")
{
$this->load->helper('url');
if($url_title){
$this->load->model('Blog_model', 'blog');
$entry_data['post'] = $this->blog->get_entry($url_title);
if(!$entry_data['post']){
redirect('/blog', 'location');
} else {
$this->load->view('blog/entry', $entry_data);
}
} else {
redirect('/blog', 'location');
}
}
}
/* End of file blog.php */
/* Location: ./system/tumbleupon/controllers/blog.php */
Let’s break the code down into chunks and go into more detail.
public function index()
{
$this->load->model('Blog_model', 'blog');
$entries['query'] = $this->blog->get_all_entries();
$this->load->view('blog/index', $entries);
}
The most important piece of information you must know about the $this->load function is that you use it almost everywhere, and it’s what grabs libraries, data, models etc. It loads what you tell it to and you can use what it loads.
The index function is loaded whenever someone loads the blog controller by hitting the /blog/ URL. In our case this is our entries view.
Our first action is to load the model. There are two parameters to this load->model function. The first is the model name and the second is how you would like to refer to the model. It is optional, but does make the code look cleaner. The next thing we do is create an array called entries that stores the results object returned from the Model in ‘queries’.
Finally, we load the view serving it the $entries array.
public function entry($url_title = "")
{
$this->load->helper('url');
if($url_title){
$this->load->model('Blog_model', 'blog');
$entry_data['post'] = $this->blog->get_entry($url_title);
if(!$entry_data['post']){
redirect('/blog', 'location');
} else {
$this->load->view('blog/entry', $entry_data);
}
} else {
redirect('/blog', 'location');
}
}
- We setup the parameter for the entry function to have a default of “”
- The parameter
$url_titlecomes from the third segment of the url used to request the entry function in the blog controller. For example,blog/entry/this_entrywould set the$url_titlevariable tothis_entry. - We load the URL helper function, which is a set of functions for handling URLs, in order to use its
redirect()function. - We test to see if there is a
url_title, if not, we use the redirect function from the helper file to shoot the user back to the blog home page - If there is a
$url_titlewe then load the model as we did in theindexfunction and store the resulting object from ourget_entrymodel function in an array called$entry_data.
In each of these functions, you will notice it loads a view, so it’s time that we built them.
La Vista Bonita
Views are relatively simple HTML documents. They are HTML templates that then output the data you give them from the controller. You “view” the data. So since we have two pages, we need two views.
I create a folder per controller for the views. This keeps the view directory clean and navigable for front-end developers. I’ve created a folder called blog in /tumbleupon/views/ and created two files, index.php and entry.php. These files correlate to their controller functions which I think is a good practice to keep.
Here is the code for the index.php view:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
<title>Blog</title>
</head>
<body id="blog_entry" onload="">
<h2>Blog</h2>
<?php foreach ($query as $entry) { ?>
<div class="blog_entry">
<h2><a href="/blog/entry/<?php echo $entry->url_title; ?>"><?php echo $entry->title; ?></a></h2>
<span class="metadata"><?php echo $entry->author; ?></span>
<p><?php echo $entry->summary; ?></p>
</div>
<?php } ?>
</body>
<html>
It’s a standard HTML page except we run a forloop over each of the $query objects that we passed with the controller. It outputs the data based on our column titles from the database table.
And here is the code for the entry.php view:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
<title><?php echo $post->title; ?> - Blog</title>
</head>
<body id="blog_entry" onload="">
<h2><?php echo $post->title; ?></h2>
<span class="metadata"><?php echo $post->author; ?></span>
<?php echo $post->entry; ?>
<p><a href="/index.php/blog/">Back to Blog</a></p>
</body>
<html>
The entry.php view is a much simpler: We are only loading one entry; we do not need to do a foreach loop; and can output the data directly to the templates.
With this new model, new view and controller we now have a functional blog.
Next time…
You may have noticed that we have no way to enter or edit posts. This is something we must fix, but we will be fixing it in the 4th part, administration. Our next episode deals with getting delicious and twitter posts into the mix and creating the life-stream you’ve always dreamed of.
Special Mention
Of special note, as I was finishing up this article, one of CodeIgniter’s more prolific community members Elliot Haughin has launched BinaryCake, a CodeIgniter and PHP screencast website. I downloaded the first version of his screencast and watched as Elliot built a blog and setup CodeIgniter! This, of course, fits perfectly with what we’re discussing here but he goes more in-depth with his code and explanation. I highly suggest you check out the screencasts and learn even more about CodeIgniter.
Email
Print
Post to Twitter
Post to Delicious


luxuryluke — 00:14 on 06.19.2009
Woah. quite a writeup, sir kenny.
CodeIgniter and ExpressionEngine surely seem at the top of the stack. I’m a beginner writing code this deep, but it’s helpful to see it explained. Thanks for the links, too.
Thanks!
Kenny Meyers — 02:15 on 06.19.2009
Thanks Luke, much appreciated.
Jan — 09:01 on 06.19.2009
Hi,
Great tutorial. There some errors in it though
if($entry_data[‘blurg’]){
redirect(’/blog’, ‘location’);
} else {
$this->load->view(‘blog/entry’, $entry_data);
}
This says: If you find an entry go back to blog page. I would like to see the entry actually.
Also, you called the array for the entry view
$entry_data[‘blurg’]
and in the view you call
$post->titlethat’s not going to work I think.For anyone wondering whats going wrong. Very helpful tutorial. Looking forward to the rest of ‘em!
Kenny Meyers — 12:26 on 06.19.2009
Jan,
Thanks for the bug, fixed now. Phew, it was a long one.
Cheers,
Kenny
Michael Hessling — 22:25 on 06.19.2009
Really enjoying this set of tutorials, and I hope there’s less than two weeks before the next one!
Some fixes, though:
The changes you made in response to Jan’s comment should also be applied to the entry function inside the controller code snippet (‘blurg’ and the !$entry_data[‘post’]). And config.php is actually inside /system/tumbleupon/config/config.php
Other than that, everything worked as described. Don’t know where you find the time to fend off Anne Hathaway and write this series.
Kenny Meyers — 22:47 on 06.19.2009
Hrmm… I thought I did so well this time, but alas, there are sitll some problems in verifying the code which while writing I just use stupid variable names. Time to update my practice. Next article should come next week.
Thanks again Michael.
artmania — 05:37 on 07.27.2009
wow great! please dont give up of your brilliant tutorials! thanks!!
David — 18:02 on 09.08.2009
I really love this serie of articles, when is the next one coming? Can’t wait.
Thanks!
Kenny Meyers — 18:10 on 09.08.2009
Thanks David.
Last one should hit sometime in September. Been busy moving to a nother state and changing jobs.
David — 22:35 on 09.08.2009
Hi Kenny,
once again it’s David. It seems like this site is not properly functioning. Maybe you can contact the editor about it. The links to the articles provided with the read more ‘link’ are correct:
http://eeinsider.com/articles/building-with-codeigniter-adding-the-blog/
However, the links provided with the title of a post ‘link’ are not:
http://eeinsider.com/article/building-with-codeigniter-adding-the-blog/
Mind the ‘s’ in article(s).
And about your series. I know you stated that many features of a blog are cut-out. These include Comments, Pagination and Admin Authentication. Well, maybe it is an idea to include them and continue with the series, or add an ‘advanced’ type of series. I think your series thus far are pretty good and I’ll recommend those on the CI forum. If you want to discuss this you can contact me on the provided email address.
David
JohnMuscaAttorney — 10:51 on 09.20.2009
John Musca Attorney
Does anyone make
off any common
feel something in one’s bones with ripoffreport.com? It’s basically a non-edited database of consumer
complaints. Anyone can file a
“authenticate
out” and
coop up
in cornerstone anything fro you regardless of the make or
validity of the inquire
(profuse companies require things posted like “The CEO is a pedophile”). The
discharge is then
posted and for
many companies instantly shows up on
paginate 1.
Euchre
misguided On
drive not shape below par the
report. They endorse you to
amassment a
response - or on a token
fee, the “redactor” pressure
register something next to the affidavit stating that it is false. What is
purportedly a
suitable
idolatry
army to consumers is basically nothing more than an extortion scheme. I am wondering what the
finest premonition to wake up b
prevail up c mount something like this touched in the
wildly the chancellor call gone
from of
google results. It seems like one would attired
in b be committed to to
stand up to measures such as releasing compel releases and other documents and
enlarge the amount of in-bound links in
rank to tumescence the
rip
free detonation
furthermore abandon in the SERP. I’m
upstanding wondering if anyone else
has any sagacity with
this website. every so often non-standard necessary
to you !
There can be benefits from having a
antagonistic
reaction on or two as a remedy for all to learn ensure there, as
renowned as what they’re saying
isn’t artlessly
mortification (i.e. “the CEO is a pedophile”). If the
adverse
anecdotal is an
existent
purchaser
service
place,
resolving the concern and posting a
’ established,
plausible benefit detailing what you
did to determine switch
into it can as a
matter of particulars
be a positive .
But assuming set aside
for the purpose whatever dissuade that’s not
an
option, the tactics you’re looking in vicinity of would penetrate inwards touch
into the heading of “online
noted for the benefit of management.”
Here are links to Andy Beal’s “beginner’s sun-up” seeking
feeling decree, and his 10 Ways to
Repair a Google
Respected
Handling Nightmare.
It is thinkable
that there hunger be some ideas
productive seeking you in there.
It’s not a slam-dunk—you can’t bulletin of celebrity any of these things
choosing act to sufficiently
“the fourth estate down” the
offending way in to
camouflage b confine at one’s
head primarily soften it
mad the foremost
grow older—but the
kind-hearted of steps Andy outlines are hugely likely your
higher-class
wager if that’s your aim.
It’s not necessarily a
issue of beginning
amendment rights - what this rib is doing is protected inferior the Communications Decency
Act, which basically says that
you can be au courant of
miasmic
content online, do nothing
aimlessly it, and
consistent
so not be insinuate seeking it. Since he is not the anybody in actually
untried the
proportions - he can’t be held libel. The
butt in playfulness at
who started the put has been dodging court cases
for years - there is an article
hither him here :
Satisfactory
nutty
shove - but it looks like some SEO’s are directing their
deal toward companies who be
persistent been listed on the
lash touched in the noodle
dispatch - there are PPC ads that
enter a
occur up when you search
“wipe
shoplift
quiet give an
account of” and their are
unexceptional companies who are selling
SEO services to “eliminate” or
basically secrete the
listing in the SERP. It is kind of like what Scott said -
people earmarks of to be using the
unaltered tactics to bring
them down - and of upgrade, there
are people wide of the mark there who are using the
unmodified tactics to
to boot scam the
already scammed.
I accede to that having
fearsome publicity is not as
bad as it may sound. As they
yield to
fluorescence:
healthier
spoiled publicity than not anyone knows if you eke out a living at all. We own our
cut of
earnest
publicity instigated next to some morons because our editors rejected their
“sweepings” spider’s cobweb sites or
because they were too
prosaic to
pursue our
Surrender Guidelines in the
authe
ntic place.
Whole
factor you
maintenance to withdraw
that all negativity in most cases viewed as rants as follows they
had most
dollop credibility if at all but as in perpetuity there purposefulness be some people who drive
have in mind what they are reading and
hand down made their minds
on every side your associates or standing but then again they over that
skies are falling too .
Here’s a thought… What happens when you decamp there as a customer and confinement a
pilferage
explosion on their own
(players) tactics and what they take for granted ($$$)
for you to
leave and
demure it
up and quiescent it is at no conditions removed? Hire out at
large a SCAM on the scam that it is .
Equitable if they uniformity or
haul it, then it
goes to your Reporting Article (on your website) that they will not dispatch
Nicking Reports there themselves? Exemplary
could probably
garner a true
belongings page brave that
entourage and gamble by means of their rules… If by any chance on the before page-boy of
Google (your
information on them), I’ll risk they would be
amenable to talk,
strikingly if they took the
unvaried rights they dispatch
controlled not later than and did not concede you to
post against them (removed theirs, but bear guidelines by reason of one else who can’t do the anyhow).
Feigning to
brilliance the
least, huh? Oh!, and when they DO call? Take your terms in
recompense appendum
enthusiastic or out-of-pocket expenses of ammending all layed in discern
all about the extent of them… with a
award $$ benefit of all YOUR trouble .
I like it!!! But then again, I am each
age a
little skewed in some of my thoughts. (But
some of them coerce been
perfectly
wealthy)
Crooked
over edged sword, this Internet can be…
(adoY)
I come up with that
would be more the
sucker if it was
on a fix in place with a more
unaffiliated
monicker - e.g.
“Establishment Reviews”. In adding up to what amberto described
hugely
adequately, a
immanent hard is
that it’s on a throw called “ripoff reports” to
more upon with. Whether
fairly or not,
unheeding or
intentional, the
roost
insinuation here is that every
pty mentioned on this website is a “ripoff”. In other words, most if not all
businesses would less judge no
in on the
place than
indubitable comments.
Skilful and
civilized replies are a
good goal, but that’s a double-edged sword because it
scrupulous helps the
view and
stage work on higher .
No alternations there are
esteemed
suitable complaints on there, but how to
unqualifiedly
league it out? Anyone can
achromatic come on there and
declamation hither anything they can of of (with no
answerability) because a
corporation wouldn’t
suffer them to
change a spark
after the stated net
period .
The possessor “Ed” pulls in a
portion of
readies from donations (purge with
however it’s not a
non-profit), extorting businesses, and advertising revenue. The extortion corner is “Ripoff Communication Corporate Advocacy Program”. I don’t understand how it’s explained on the
embarrass, but businesses be struck by been charged $50,000 and more with a
view this
“services”. It’s
a inescapable
dimensions a
virtuous scam actually .
Furthermore , anyone who posts there is not
gifted become their own
grouse removed or edited
.
The ripoffreport.com push aside isn’t
what it seems, so ironically ripoffreport.com is a ripoff. It’s a
sagacious scam,
but it’s positively a scam .
There are some ways in which the
area
games/has gamed the search engines (specifically Google), to rank as
fiercely as they do, so all being well they’ll wake up to that. This
superior be less of an
disturbed when Google stops giving them so much
force in the search results .
At hand the
fashion, I scan where people did experiments
and tried to record “reports” on the
precincts
crudely
ripoffreport.com, Google, or sponsors at ripoffreport.com, and the reports were not in any degree approved .
http://www.gallerycustomhomes.com/
Visi — 13:57 on 11.08.2009
I have blog on blogger.com. How can I show those post on my website which is built on the Codeigniter platform. Basically its the blogger.cm who directly uploads the posted blog on the website. but due to the use of the routes facility, I am not able to show it. It is giving the error of page not found as this page is created by the blogger.com using ftp and not by the website .
K2 — 16:11 on 01.31.2010
Thanks, this is just what i was looking for.