It would be great if someone explain me how to generate vanity url in zend.I am planning to code a blog and I want its post to have link of the format http://www.example.com/2012/6/24.blog-title .I am pretty new to zend.
First you will create a controller let say dateAction which accepts date as input parameters and list articles based on those days. Lets say you created dateAction inside article controller.
so make this url do the job www.example.com/article/date/year/2012/month/06/day/24/title/abcdef
first
but now you want to change it into something beautiful so use Zend_Router
After doing that you will like to create a route in your bootstrap
$route = new Zend_Controller_Router_Route_Regex(
'(\d+)/(\d+)/(\d+)/([a-z0-9]+)',
array(
'controller' => 'article',
'action' => 'date'
),
array(
1 => 'year',
2 =>'month',
3 => 'day',
4 =>'title'
)
);
Zend_Controller_Front::getInstance->getRouter()->addRoute('article',$route);
Now url http://www.example.com/2012/6/24/blog-title
will work same as www.example.com/article/date/year/2012/month/06/day/24/title/abcdef
What you want to create is often called a slug. I am not aware of anything built into the Zend framework for generating slugs, so you'll need to generate one on your own. Here's a really simple method to generate a slug.
$slug = preg_replace("/[^a-zA-Z0-9 ]/", "", $title);
$slug = str_replace(" ", "-", $slug);
To make this more robust, you should check to see if the slug you generate already exists in the database. If it does, you could automatically add a number to the end. For example, if "this-blog-post" already exists, try "this-blog-post-1".
In addition to generating a slug, you'll want to follow the zerkms's comment and add a route in your Zend configuration that will pass this slug to your controller.