September 3rd, 2008
As the project grows I had to work on some more complex queries to provide users with better searching facilities.
In this case, you might use two options:
- Straightforward find() function from App::Model (where you’ll have to handle the outpu of data yourself, and trying to fit the search results in your websites layout)
- Use Pagination functionality (which is designed for handling big chunks of data for you)
A simple example: from a small search menu, I need to get the data about item’s price, its type etc, so at this point, find() solution would look like:
$condition =
array(‘OR’ =>
array(
‘Item.type’ =>
$this->
data[‘Item’][‘type’],
‘Item.qty’ =>
$this->
data[‘Item’][‘qty’],
),
array(‘Item.price BETWEEN ? AND ?’ =>
array($start_price,
$end_price))
);
$this->
(‘results’,
$this->
Item->
find(‘all’,
$condition));
Once you set results array in the view template, it will cause you few hours on how to rearrange data presentation, meanwhile you can use Pagination:
/*
* I’m going to use the same $condition
* the difference will be at the view level and the way of setting the data "results"
*/
$this->set(‘results’, $this->paginate(‘Item’, $condition);
And in the view you might add some code like:
<?
echo $paginator->
counter(array(
‘format’ => __
(‘%page% of %pages%, showing %current%
records out of %count% total, starting on record %start%, ending on %end%’,
true)
));
foreach($results as $i => $item):
/*
* Items output
*/
endforeach;
?>
<?php echo $paginator->prev(‘<< ‘.__(‘Previous Page’, true),
array(), null, array(‘class’=>‘disabled’));?>
| <?php echo $paginator->numbers();?>
<?php echo $paginator->next(__(‘Next Page’, true).‘ >>’,
array(), null, array(‘class’=>‘disabled’));?>
Last lines of the code would manage the results listing for you, which has to be defined in your Controller:
var $paginate =
array(
‘Item’ =>
array(
‘limit’ =>
5,
‘order’=>
array(‘Item.added’ =>
‘ASC’)
)
)
Done, now you can easily handle your search outputs. 
Tags: cakephp, IT, pagination, Tips
Posted in Linux, etc | No Comments »
August 18th, 2008
These tiny bits of beauty really make the development enjoyable:
$names =
$this->
find(‘list’,
array(
‘conditions’=>
null,
‘order’ =>
‘Developer.id ASC’,
‘fields’ =>
array(‘Developer.id’,
‘Developer.’.
$name.
”),
‘recursive’ =>
0
));
as the result, getting:
Array =
(
[1] =>
‘Pafilia’,
[2] =>
‘Vashiotis’
);
I’ll miss these features if I move from this framework 
Tags: cakephp, frameworks, php
Posted in etc | No Comments »
August 7th, 2008
Working with CakePHP1.2 I had to implement some AJAX techniques in the framework, mainly dealing with onChange behavior of the form components, here is a small example of how we can use multiple selectboxes.
Note: For simplicity reasons, I didn’t include queries, and just used option-arrays:
//inside controller
<?php
class FooController
extends AppController
{
var $name =
‘Fooes’;
var $components =
array(‘RequestHandler’);
var $helpers =
array(‘Html’,
‘Form’,
‘Javascript’,
‘Ajax’);
function beforeRender(){
if($this->RequestHandler->isAjax()){
Configure::write(‘debug’,0);
//prevent useless warnings for Ajax
}
$this->set(‘foobar’,null);
// initiate an array of options (otherwise, you’ll get a warning)
}
function updateDistricts(){
$this->layout = ‘ajax’;
$this->beforeRender();
$this->render(‘updateDistricts/’,‘ajax’);
}
}
?>
This is just a simple layout for calling AJAX methods, without database, sofisticated layout handling, routes etc (for these reasons we got CakePHP API, and CakePHP GoogleGroup)
The actual form would look like:
//this code was used as an element from /view/elements/*.ctp
<ul id="navlinks">
<li><?php echo $form->create(‘foo’);?></li>
<li>
<?php
print $form->input(‘Districts.name’,
array(‘type’=>’select’,
‘options’=>array(‘Limassol’,‘Nicosia’,‘Larnaka’),
‘id’=>‘district_name’,
‘empty’=>‘Choose District’,
‘label’=>‘District’));
print ‘<span class="ajax_update" id="ajax_indicator" tyle="display:none;">’.$html->image(‘ajax-loader.gif’).‘</span>’;
?>
</li>
<li>
<?php
print $form->input(‘Towns.name’,
array(‘type’=>’select’,
‘options’=> $foobar,
’style’=>‘display:none’,
’showEmpty’=>true,
‘empty’=>‘City’,
‘id’=>‘city_name’));
print $ajax->observeField(‘district_name’,
array( ‘url’=>‘updateTowns/’,
‘update’=>‘city_name’,
‘loading’=>"Element.show(’city_name’);
Element.show(’ajax_indicator’)",
‘complete’=>"Element.hide(’ajax_indicator’);
Effect.Appear(’city_name’)",
‘onChange’=>true));
?>
</li>
<li><?php echo $form->end(‘Search’);?></li>
</ul>
As the result, once you change the default value of the first select box, the second one automatically calls the controller’s method, which renders the values (gets the option list from the view file) and renders it in AJAX manner
.
Tags: Add new tag, ajax, cakephp, coding, frameworks, Tips
Posted in etc | No Comments »
July 22nd, 2008
Few days ago, my boss start going around the project deadlines, hoping that I’ll submit everything on time.Having a bad experience dealing with IT’s, a guy has been doing dump HTML with few PHP includes for about two years.No wonder, why he was amazed when I told him that all the projects would be finished by the beginning of August.
Keeping these deadlines in mind, the boss started to look for even faster alternative solutions. Well, and he found some.
Today’s working day started from the conversation, whether it’d be useful to buy a ready-made solution for his website, so I’ve decided to take a look at what he’s found:
- Portfolio of 8 sites with “asdf” test data.
- Admin is accessible with “admin/admin” username password combination
- 7 out of 8 sites got partially finished control panels - working only 30% of it. (Data mismatch, no input validations, or JS validation only)
But the site my boss was especially interested in just rocked my heart. Here’s a screenshot:

It’s like: pay first, and you might get this CMS later 
Tags: fun
Posted in Blogging, Cyprus | 2 Comments »
July 21st, 2008
Tags: Links
Posted in Links | No Comments »
May 20th, 2008
Just passed my driving test:
- Now I got wheels
- Now have to drink less.
Tags: News, Personal
Posted in etc | 2 Comments »