Posts tagged with: framework

CodeIgniter: Dicas

Hoje eu vou dar alguams dicas que eu uso em todo projeto envolvendo CI. Primeiro, no “url_helper“, eu fiz a seguinte modificação na função base_url():

[cc lang=”php”]
if ( ! function_exists(‘base_url’))
{
function base_url($link=FALSE)
{
$CI =& get_instance();
$baseUrl = $CI->config->slash_item(‘base_url’);
if ($link===TRUE) $baseUrl .= $CI->config->slash_item(‘index_page’);
return $baseUrl;
}
}
[/cc]

Isso me permite usar a função em links, onde eu não sei se o host final suporta mod_rewrite. Assim, eu posso usar

[cc lang=”php”]

[/cc]

que ele automaticamente coloca o index.php antes dos controllers dependendo do seu config.php, e em caso de imagens e inserts de .js, ou .css, é só usar normalmente, base_url(). Normalmente não mecho com o Core do CodeIgniter, portanto eu salvei uma copia do url_helper modificado na minha pasta helpers dentro da pasta application.

Segundo. Essa é muito simples. Quando eu uso a classe Form Validation, e eu tenho um campo em branco que não é obrigatório, e obviamente eu nao precisaria usar uma função set_rules, o campo não é preenchido. No entanto, se eu usar uma função set_rules sem especificar uma regra,

[cc lang=”php”]
$this->form_validation->set_rules(‘field_name’, ”, ”);
[/cc]

eu consigo deixar o campo em branco no formulário, mas se eu digitar alguma coisa, o campo ainda assim é repopulado.

E por último, quando eu uso a classe de upload, as vezes eu tenho que apagar o arquivo quando eu edito um registro com uma foto, por exemplo. Entao eu preciso do caminho absoluto da raiz da aplicação. Não achei nenhuma constante definida pra este caso, então criei uma. No arquivo index.php, insira esta linha após a ultima declaração de constantes:

[cc lang=”php”]
define(‘FULLPATH’, pathinfo(__FILE__, PATHINFO_DIRNAME));
[/cc]

Agora, eu tenho a constante FULLPATH que guarda o caminho absoluto da minha aplocação. Espero que essas pequenas dicas tenham sido útil para alguem 😉

Did you like this? Share it:

CodeIgniter: Tips & Tricks

Hello, Today I’ll post few modifications I use on every CI project. First, on the “url_helper“, I made this modification oon base_url() function:

[cc lang=”php”]
if ( ! function_exists(‘base_url’))
{
function base_url($link=FALSE)
{
$CI =& get_instance();
$baseUrl = $CI->config->slash_item(‘base_url’);
if ($link===TRUE) $baseUrl .= $CI->config->slash_item(‘index_page’);
return $baseUrl;
}
}
[/cc]

This allow me to use the base_url() function to work with and without the index.php. Sometimes you don’t know where your project will be hosted, and if the host supports mod_rewrite. In this case, on your links (those with index.php/controller) you just put

[cc lang=”php”]

[/cc]

and you will get the index.php or not, depending on your configuration, on config.php. If I use the TRUE parameter, the “index.php” string will be inserted before the controllers. Of course, you can alter the function to something like base_url(‘link’), or base_url(1), or anything you like. I don’t like to mess with the CI Core, so I saved this new helper on application/helpers directory.

Another Tip. This is very simple. Using the form validation, when I have a not required field, it isn’t repopulated with set_value() function if you don’t set any rules for the field. But if you set a blank rule, it will work:

[cc lang=”php”]
$this->form_validation->set_rules(‘field_name’, ”, ”);
[/cc]

When I use upload class, sometimes I have to delete the file when I change the file on database. And then It’s a good thing to use the absolute path when deleting, so I made a small constant declaration to set my root folder, the folder with index.php inside. In the index.php, add this line on bottom of the constant declarations:

[cc lang=”php”]
define(‘FULLPATH’, pathinfo(__FILE__, PATHINFO_DIRNAME));
[/cc]

Now, my FULLPATH constant is set with my base directory. Hope this can be usefull to someone. 😉

Did you like this? Share it:

CodeIgniter: Friendly pagination with search system

After a long pause, here am I. Well, there’s a few tutorials around, including the official CI wiki suggesting a more friendly pagination implementation, with page numbers on the link, because the actual CI pagination works with the offset from the database. The code I use today is from the official wiki, but the search system I implemented myself, So, here we go…

First, on the original file, we have the create_link() function. On mine, there is an argument $search, it will be permanent on every link, just like this: http://www.server.com/products/page/2/notebook-sony

I modified the ident style from CI Pagination.php, I Just can’t work with the Allman ident style (more info info: a href=”http://en.wikipedia.org/wiki/Indent_style”>wikipedia). Analising the whole code, there is no big tricks, I just concatenate the search argumento in the end of links.

Pagination.php:

[cc lang=”php”]
‘;
var $cur_tag_close = ‘‘;
var $next_tag_open = ‘ ‘;
var $next_tag_close = ‘ ‘;
var $prev_tag_open = ‘ ‘;
var $prev_tag_close = ”;
var $num_tag_open = ‘ ‘;
var $num_tag_close = ”;
var $page_query_string = FALSE;
var $query_string_segment = ‘per_page’;

/**
* Constructor
*
* @access public
* @param array initialization parameters
*/
function CI_Pagination($params = array())
{
if (count($params) > 0)
{
$this->initialize($params);
}

log_message(‘debug’, “Pagination Class Initialized”);
}

// ——————————————————————–

/**
* Initialize Preferences
*
* @access public
* @param array initialization parameters
* @return void
*/
function initialize($params = array())
{
if (count($params) > 0)
{
foreach ($params as $key => $val)
{
if (isset($this->$key))
{
$this->$key = $val;
}
}
}
}

// ——————————————————————–

/**
* Generate the pagination links
*
* @access public
* @return string
*/
function create_links($search=”) {

if ($search!=”) $search = ‘/’.$search;

// If our item count or per-page total is zero there is no need to continue.
if ($this->total_rows == 0 OR $this->per_page == 0) {
return ”;
}

// Calculate the total number of pages
$num_pages = ceil($this->total_rows / $this->per_page);
// Is there only one page? Hm… nothing more to do here then.
if ($num_pages == 1) {
return ”;
}

// Determine the current page number.
$CI =& get_instance();

if ($CI->config->item(‘enable_query_strings’) === TRUE OR $this->page_query_string === TRUE){
if ($CI->input->get($this->query_string_segment) != 0){
$this->cur_page = $CI->input->get($this->query_string_segment);
// Prep the current page – no funny business!
$this->cur_page = (int) $this->cur_page;
}
} else {
if ($CI->uri->segment($this->uri_segment) != 0) {
$this->cur_page = $CI->uri->segment($this->uri_segment);
// Prep the current page – no funny business!
$this->cur_page = (int) $this->cur_page;
}
}

if ( ! is_numeric($this->cur_page)) {
$this->cur_page = 0;
}

if ($this->cur_page==0) {
$this->cur_page = 1;
}

// Is the page number beyond the result range?
// If so we show the last page
if ($this->cur_page > $this->total_rows) {
$this->cur_page = ($num_pages – 1) * $this->per_page;
}

$uri_page_number = $this->cur_page;

// Calculate the start and end numbers. These determine
// which number to start and end the digit links with
$start = (($this->cur_page – $this->num_links) > 0) ? $this->cur_page – ($this->num_links – 1) : 1;
$end = (($this->cur_page + $this->num_links) < $num_pages) ? $this->cur_page + $this->num_links : $num_pages;

// Is pagination being used over GET or POST? If get, add a per_page query
// string. If post, add a trailing slash to the base URL if needed
if ($CI->config->item(‘enable_query_strings’) === TRUE OR $this->page_query_string === TRUE) {
$this->base_url = rtrim($this->base_url).’&’.$this->query_string_segment.’=’;
} else {
$this->base_url = rtrim($this->base_url, ‘/’) .’/’;
}

// And herwe go…
$output = ”;

// Render the “First” link
if ($this->cur_page > $this->num_links) {
$output .= $this->first_tag_open.’base_url.$i.$search.'”>’.$this->prev_link.’‘.$this->prev_tag_close;
}

// Write the digit links
for ($loop = $start -1; $loop <= $end; $loop++) { $i = ($loop * $this->per_page) – $this->per_page;
if ($i >= 0) {
if ($this->cur_page == $loop) {
$output .= $this->cur_tag_open.$loop.$this->cur_tag_close; // Current page
} else {
$n = ($i == 0) ? ‘1’ : $loop;
$output .= $this->num_tag_open.’base_url.($this->cur_page + 1).$search.'”>’.$this->next_link.’‘.$this->next_tag_close;
}

// Render the “Last” link
if (($this->cur_page + $this->num_links) < $num_pages) { $i = $num_pages; $output .= $this->last_tag_open.’Did you like this? Share it:


Pages:12