Controllers e Programação em Geral

Gravatar de Izabela Bittencourt Izabela Bittencourt Tópico publicado em
11/02/2010, 18:33:28

Reaproveitamento de código

Olá pessoal,

Até agora só postei dúvidas... rsrs... estou aprendendo mas espero em breve poder colaborar mais.

A questão de hoje é a seguinte tenho uma função que conta a quantidade de dias entre duas datas.
Essa função funciona corretamente, porém eu não sei como reaproveitar o código dela.... por exemplo chamar ela dentro da minha função index e só pegar o valor de retorno (quantidade de dias)...

Alguem por favor me ajuda denovo???

Essa e outras funções serão chamadas mais vezes no meu projeto!

Vlw galera

Gravatar de Klawdyo Klawdyo Resposta publicada em
11/02/2010, 22:23:41

Reaproveitamento de código

Você usa essa função nos controllers, nos models ou nas views?

Gravatar de Izabela Bittencourt Izabela Bittencourt Resposta publicada em
12/02/2010, 11:24:53

Reaproveitamento de código

Essa função seria utilizada na view.

Porém outras terão a necessidade de serem usadas no controller.

Alguma solução?

Gravatar de Klawdyo Klawdyo Resposta publicada em
12/02/2010, 12:37:14

Reaproveitamento de código

Se for usada na view, crie um helper.

class Utils extends Helper{

}

Se for usada nos controllers, crie a função no AppController. Se for usada em apenas um controller, crie-a no controller correspondente.

Se for usada nos models, crie a função no AppModel. Se for usada apenas em um model específico, crie-a no model correspondente.

Seria legal um AppView para concentrar isso. Mas os helpers já resolvem.

Só complementando. Não conheço seu site/sistema, mas eu acho que isso é uma lógica de negócio e deveria ficar no controller. Você deveria enviar para view tudo já mastigadinho. Mas, como falei, não conheço suas especificidades.

Té mais.

Gravatar de Klawdyo Klawdyo Resposta publicada em
12/02/2010, 13:39:55

Reaproveitamento de código

Se você for utilizá-la em mais de um desses locais, você pode criar uma classe normal, e importá-la quando precisar.

Tem exemplos de importação aqui no fórum.

Gravatar de Max Max Resposta publicada em
22/02/2010, 08:55:57

Reaproveitamento de código

app::import('util');

Gravatar de Izabela Bittencourt Izabela Bittencourt Resposta publicada em
28/02/2010, 13:34:32

Reaproveitamento de código

Eu ainda não consigo importar uma classe com a minha função.
Precisarei dela em várias views.

Essa é a minha função e sempre que tento não consigo:

function contaDias($dataI)
	{
		$this->autoRender = false;
		
		$data = explode("-", $dataI);
		$pri =  $dataI; 
		$seg = date("Y-m-d");
		$data1 = strtotime($pri);
		$data2 = strtotime($seg);
		$maior = max($data1,$data2);
		$menor = min($data1,$data2);
		$res = $maior - $menor;
		$diasCorridos = (int)((($res / 60) / 60)/24);
				
		return $diasCorridos;
	}

Alguem pode me ajudar?

Gravatar de Klawdyo Klawdyo Resposta publicada em
28/02/2010, 14:30:58

Reaproveitamento de código

Qual a versão do seu php? Dê uma olhada em php.net/date_diff

Gravatar de Izabela Bittencourt Izabela Bittencourt Resposta publicada em
28/02/2010, 14:32:20

Reaproveitamento de código

Agora ja consigo importar sem erros mas quando chamo a função

contaDias($data);

Encontro: Call to undefined function contaDias()

Gravatar de Izabela Bittencourt Izabela Bittencourt Resposta publicada em
28/02/2010, 14:33:48

Reaproveitamento de código

Versão Php 5.3.0

Gravatar de Izabela Bittencourt Izabela Bittencourt Resposta publicada em
28/02/2010, 15:14:30

Reaproveitamento de código

Consegui!!!!
Acho que não tinha entendido a dica da classe util.

Eu coloquei a minha função no arquivo utils.php e funcionou...
Mais uma vez obrigada, obrigada e obrigada!

Gravatar de Klawdyo Klawdyo Resposta publicada em
28/02/2010, 15:19:44

Reaproveitamento de código

Você está usando nas views, nos controllers ou em ambos?

Nesse caso aí, você deveria colocar essa função em uma class e chamar a classe.

Veja o exemplo do simplecache do rafael marin.
Ele define a classe original aqui: http://github.com/rafaelmarin/spaghettiphp-simplecache/blob/master/vendors/SimpleCache/SimpleCache.php

E a importa e usa aqui, dentro de outra class: http://github.com/rafaelmarin/spaghettiphp-simplecache/blob/master/app/components/cache_component.php

Gravatar de Izabela Bittencourt Izabela Bittencourt Resposta publicada em
28/02/2010, 15:21:40

Reaproveitamento de código

É...
Vc tinha me dito pra criar um Helper neh???
rsrsrs
Mas eu nunca acerto criar Helper nem Component nem nada...
Queria um tutorial.... =D

Será que tem algum problema a função ficar no utils.php?

Gravatar de Klawdyo Klawdyo Resposta publicada em
28/02/2010, 17:14:10

Reaproveitamento de código

Pra criar um Helper é fácil.

Crie um arquivo chamando date_helper.php e salve dentro da pasta app/helpers.
Agora no controller que você usar o Helper, você coloca lá em cima

public $helpers = array('Date')

Aí você bota o código mais ou menos assim.
Fiz rapidão aqui sem testar, mas deve funcionar legal.
Veja aí.


<?php 
class DateHelper extends Helper{
        
    private $convert = array(
        'seconds' => 1,
        'minutes' => 60,
        'hours' => 3600,
        'days' => 86400,
        'weeks' =>  604800,
        'months' =>  18144000,
        'years' =>  217728000,    
    );
    
    public $format = 'd/m/Y';
    
    public function diff($date, $otherDate = null, $convert = 'days'){
        $otherDate = (empty($otherDate)) ? date("Y-m-d H:i:s") : $otherDate;
        return round(abs((strtotime($date) - strtotime($otherDate)) / $this->convert[$convert]));
    }
    public function add($num, $date = null, $convert = 'days'){
        $date = empty($date) ? time() : strtotime($date);
        return date($this->format, $date + ($num * $this->convert[$convert]));
    }
        
}
?>

Pra usar esse helper, faça assim:


//calcula a diferença de dias para a data atual
echo $date->diff('2009-12-31'); 

//calcula a diferença de dias entre duas datas echo $date->diff('2009-12-31', '2010-01-31');

//Calcula a diferença de meses entre duas datas echo $date->diff('2009-12-31', '2010-04-30', 'months');

//Adiciona 2 dias a data de hoje echo $date->add(2);

//Adiciona 2 dias a uma data específica echo $date->add(2, '2009-31-12');

//Adiciona 2 meses a uma data específica echo $date->add(2, '2009-31-12', 'months');

//Adiciona 2 meses a uma data específica e retorna a data no formato d/m/Y H:i:s $date->format = 'd/m/Y H:i:s'; echo $date->add(2, '2009-31-12', 'months');

Mais ou menos isso.

Gravatar de Izabela Bittencourt Izabela Bittencourt Resposta publicada em
09/03/2010, 20:35:11

Reaproveitamento de código

Klawdyo você poderia me passar seu contato?
Tenho uma duvida em relação a banco de dados e precisava da ajuda de alguem com experiencia no framework.
Se conseguissemos poderiamos postar a solução para a familia do Spaghetti e acho que seria bem legal!

Meu email é belabittencourt@gmail.com

Gravatar de Klawdyo Klawdyo Resposta publicada em
09/03/2010, 22:15:06

Reaproveitamento de código

Socialize a dúvida aqui no fórum.
Eu num chego nem aos pés da galera que frequenta aqui.
Além do mais, várias cabeças pensam melhor que uma.
#)

Você deve estar logado para responder a um tópico ou adicionar um novo.
Efetue login ou Registre-se para participar das discussões.