November 2009

Adding Full Text Search to Croogo

Posted by Andrew on November 16th 2009, 4:18am

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.

Update November 19th

Croogo Full Text Search

Bookmark and Share
Posted in Croogo | Leave a comment

Creating Featured Posts for Croogo CMS

Posted by Andrew on November 15th 2009, 7:02am

In this post I will describe how I created the featured post on the home page of my blog with Croogo. Looking at the database schema I noticed that there was a column named "sticky" that was not being utilized anywhere in the code so I thought that it would be a good place to store whether a post was featured or not. The first thing I did was edit the admin add and edit views to allow me to mark posts as featured under the publishing tab.

<div id="node-publishing">
<?php
    echo $form->input('sticky', array('label' => __('Featured', true)));
    echo $form->input('status', array('label' => __('Published', true)));
    echo $form->input('promote', array('label' => __('Promoted to front page', true)));
    echo $form->input('created');
?>
</div>

All I did here was add one line that will display a checkbox similar to the published and promoted checkboxes. The next thing I had to do was retrieve the latest featured post from the database. I did this in the nodes controller under the promoted action since this is the default home page for Croogo.

$featured = $this->Node->find('first', array(
    'order' => 'Node.created DESC',
    'conditions' => array('Node.sticky' => true)
));
$this->set('featured', $featured);

This just finds the first post marked as featured, ordered by the created date. I then set a variable for the view so that I can access this featured post in my view. The next step was displaying the featured post. For this I created a "featured" element and rendered it in the layout template if the current action was "promoted".

<? if ($this->action == 'promoted') : ?>
<?=$this->element('featured')?>
<? endif ?>

Inside of featured.ctp in the elements directory.

<p><?=$html->link($featured['Node']['title'], $featured['Node']['url'], array('class' => 'link'))?><p>
<p><?=$text->trim(strip_tags($featured['Node']['body']), 200, '...', false, true)?></p>
<p><?=$html->link('Read More...', $featured['Node']['url'])?></p>

This is a dumbed down version of what I am using but should still get you started. If you know your way around CakePHP you should be able to understand what is happening. I am using the text helper to show an excerpt from the post body then display a read more link below that will direct the user to the post.

This should be enough to get you started. In my next post I will explain how to use custom fields in your posts. I am using them to display the image beside my featured posts on the home page. If you have any questions leave a comment and I should get back to you shortly.

Bookmark and Share
Posted in Croogo | 1 Comment

Hong Kong was a Success

Posted by Andrew on November 15th 2009, 6:08am

Andrew with a Police Officer in Hong KongI just got back to Bangkok today from Hong Kong where I spent the last 4 days. I went there with one of my good friends and we had a great time packed with a some hillarious memories. Although I had to spend most of my days working from the hotel room and my friend had to attend business meetings, we still managed to get out and experience the nightlife and view the harbor front. We went to Lan Kwai Fong to check out a few clubs and met some interesting people while we ate and went shopping around Kowloon. Big shout out to DJ Benny K and the whole crew at Fevar nightclub. Below are some photos of the harbor front and around Hong Kong.

I hope to post some CakePHP and Croogo posts later on this week so stay tuned.

Bookmark and Share
Posted in Travel | 1 Comment

My First Attempt at iPhone Icons

Posted by Andrew on November 10th 2009, 10:40pm

I made these a while ago in an attempt to create a theme for my iPhone. I think they came out OK for my first try. I am working on a group of icons for a project that I am working on at the moment and will post those once they are complete.

Hollrcons

Let me know what you think.

Bookmark and Share
Posted in Design | 2 Comments

Heading to Hong Kong Tomorrow

Posted by Andrew on November 10th 2009, 9:56am

Living in Thailand requires a new visa every 30-90 days if you do not have a work permit or permanent residence. While working here I had a work permit and applied for 1 year visas during my employment. Now that I am still living here but doing freelance I need to leave the country every 30 days. I usually travel to Singapore due to the cheap air fare and free accommodation (my old roommate lives there) but this time decided to check out Hong Kong.

Hong Kong

I have visited Hong Kong a total of 5 times already but my last trip was back in October 2006. I'm excited to touch down again and do some more exploring. I will be staying in Kowloon on the mainland side of Hong Kong this trip.

Bookmark and Share
Posted in Travel | Leave a comment
1 | 2 | 3 | 4