Categories: Croogo
Auto Create Slugs in Croogo with jQuery
I got tired of hand writing slugs for my blog posts, I am used to using the acts_as_sluggable behavior. I thought about implementing the behavior into Croogo but realized this might be better implemented as some simple Javascript. Initially I wrote a simple find and replace function with Javascript that converted spaces to hyphens but realized it didn't take into account special characters or more than one space so I did a quick search on Google and came across the jQuery Slug Plugin. It took me about 2 minutes to download and implement.
All you need to do is download the plugin and place it into your webroot/js directory and then modify a few lines in app/views/nodes/admin_add.ctp. The changes I made are below.
$javascript->link(array('nodes', 'jquery.slug'), false);
Include the jQuery slug plugin at the top of the page.
<script type="text/javascript">
$(document).ready(function(){
$("#title").slug({
slug:'permalink',
});
});
</script>
Set up the plugin and let it know the title field's ID and the class of the slug field.
echo $form->input('title', array('id' => 'title'));
echo $form->input('slug', array('class' => 'permalink'));
Add an ID to the title field and a classname to the slug field. That's about it, hope this saves you some time when you are writing your next article.
New Croogo Theme for Download: Simple
Update: September 4th, 2010
I have released this theme for Croogo 1.3.2 and should be forward compatible. Please comment on the new post for questions and problems.
http://andrw.net/blog/simple-theme-released-for-croogo-132
Here it is. My first theme release for Croogo. Not sure how many people out there are using Croogo yet but it's showing a lot of potential and it's especially good news if you are already a CakePHP developer. Ensure that you read the README file included in the archive as it explains how to get things like full text searching and the tag cloud working.

I already have a few ideas for my second theme so stay tuned and as always if you have any questions drop me a line in the comments.
Preview: Simple Croogo Theme
Last Updated: September 4th 2010, 10:27am
Download: Simple Croogo Theme
New Croogo Theme Preview
Update November 17th
You can now test out the theme above by clicking here. If you want to go back to the normal theme just head back to this post and click here, or end you browsing session.
Original Post
This is a preview of the new theme I am working on for the Croogo CMS. It should be released some time within the next week or so. I will be releasing it for free and it can be used for any type of personal or commercial project. It will include search functionality and tag clouds similar to the current implementation on my site.
Let me know what you think and if you would like to see some changes leave a comment and I will try and implement them.
Croogo Tip: After Adding New Actions, Refresh ACL Permissions
Recently I have been adding new features to my site (search, tag cloud) that involved adding new actions. Little did I know that the default ACL permissions use a whitelist instead of a blacklist meaning that all new actions by default will not be publicly avaiable.
When you add a new action to Croogo make sure you log in to your admin panel, go to Users > Permissions and then click on the "Generate Actions" button. This will generate all of the actions in your controllers and allow you to set the correct permissions for your new actions.
Adding Full Text Search to Croogo
I just launched full text search on my blog. I am sure that this is something planned for the future of Croogo but I wanted some to add search functionality and not have to wait. Once I figure out Git/Github I will fork the main project and get some of my additions up there.
Adding full text searching is actually quite easy. I limited it to searching the title and the body of the posts and only allowed searching of blog posts. Below is the code I used. This goes in the nodes controller.
function search () {
// Import sanitize library
App::import('Core', array('Sanitize'));
$query = mysql_escape_string(Sanitize::html($this->params['url']['q']));
$this->paginate['Node']['order'] = 'Node.id DESC';
$this->paginate['Node']['limit'] = Configure::read('Reading.nodes_per_page');
$this->paginate['Node']['conditions'] = array(
'Node.type' => 'blog',
'Node.status' => 1,
"MATCH(Node.title, Node.body) AGAINST('{$query}' IN BOOLEAN MODE)"
);
$this->paginate['Node']['contain'] = array(
'User',
'Meta',
'Comment',
'Term' => array('Vocabulary')
);
$this->Node->recursive = 0;
$this->set('nodes', $this->paginate());
$this->set('q', $query);
$this->set('title', "Search results for {$query}");
}
Now all that's needed is a form that will request the search action in the nodes controller and a search template to display your search results. For my form I used the "GET" method. In my search template I used the text helper to highlight the search term and also show an excerpt instead of the full post as shown below.
<p><?=$text->highlight($text->excerpt(strip_tags($this->element('node_body', array('node' => $node))), $q, 200, '...'), $q)?></p>
As usual if you have any questions leave a comment and I should get back to you shortly.


