Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

rogerss_7

[Resolvido] Lógica com cardápio semanal

Recommended Posts

Olá,

 

Já como não obtive respostas que resolvessem o meu problema neste tópico, resolvi consultar suas idéias.

 

Vejamos:

 

Tenho um sistema que trabalha com edições. A cada dia é criada uma nova edição e colocada uma data que ela será executada.

 

Dentro desse sistema, são incorporados outros conteúdos, inclusive o "tal" sistema de cardápios.

 

O sistema de cardápios que existe hoje é feito diariamente, sendo só colocado o cardápio do dia.

 

Analisando isso, resolvi fazer um que, ao invés de colocar dia após dia, colocasse o da semana completo, no meu caso de segunda à sábado.

 

Então criei uma parte onde tu cadastra:

o nome do dia da semana (quarta-feira)
a data deste dia (2008-09-17 -> que é quarta-feira)
e o próprio cardápio deste dia
A pessoa grava a segunda, terça quarta etc.., ou seja, a semana completa.

 

A parte onde tu cadastra essas informações está 100%.

 

Só que agora a exibição dos dados na própria execução da edição é que é o "bicho".

 

Pensei que quando passasse a data da edição, conseguiria fazer isso de modo fácil, mas estou vendo que não é bem assim.

 

Vou dar um exemplo:

Hoje é 15-09-2008, segunda-feira. Supondo que hoje eu cadastre a edição 01 e a data de hoje mesmo.
Logo hoje, vou cadastrar o cardápio de toda a semana, de segunda (hoje) até sábado (20-09-2008).

Amanhã vou cadastrar a edição 02 e a data de amanhã.
Não preciso cadastrar o cardápio, porque ele já está cadastrado, a semana toda, lembra?

Faço isso até sábado.

Lógico que quando chegar sábado vou ter a edição 06 (um cardápio permanece em 6 edições consecutivas), mas isso não tem nada haver, eu acho, hehe.

Tenho estes cardápios nestas 6 edições, como eu faço pra mantê-los dessa forma, ou seja, de acordo com a edição passada, ele pegar a semana completa (seg à sáb)?

 

O que eu posso fazer pra conseguir o resultado desejado? Como vocês fariam?

 

Obs.: Perdoem o texto longo.

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha só, um Geek indiano chamado haisabari fez uma pequena classe para PHP que retorna o primeiro e o último dia da semana atual, você poderia usar essa classe para conseguir o valor mínimo e máximo para alimentar a função BETWEEN da SQL que eu citei naquele outro tópico que você citou acima.

 

 

http://www.phpclasses.org/browse/package/2600.html

Nota1: É preciso ser cadastrado no PHPClasses para fazer o download.

Nota2: Devido a um bug no Internet Explorer, você só conseguirá baixar sem problemas com o Firefox.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sinceramente, uma classe somente para isso é besteira. Uma função simples já resolve.

 

Use date(). Se não me falha a memória, a opção "t" retorna o dia da semana (em numeral). Basta verificar qual é esse número. Se for zero, é domingo. Se for 6, sábado.

 

Se não for nenhum deles, você pode ir somando ou subtraindo 3600*24 minutos (o que corresponde a um dia) à data, até obter zero ou seis, conforme desejar. Use um loop para isso.

Também dá para usar mktime(), mas você teria que dividir a data pelo "-". Se usar soma de segundos, pode dar um strtotime() na data.

 

Entendeu?

 

 

Não olhei o código da classe sugerida pelo mangakah, mas deve ser algo semelhante.

Compartilhar este post


Link para o post
Compartilhar em outros sites

com o parâmetro 'w' na funcão date você pega o dia da semana, 0 = domingo até 6 = sabado.

Vamo supor que o usuário escolheu 16-08-2008, a funcao te retornar 2 (terça-feira). Para achar o primeiro dia da semana é só jogar a data que ele digitou (16-08-2008) - 2, assim você chega no 14-08-2008 (Domingo). E para pegar o ultimo dia da semana, joga a data que ele digitou + 4, vai ficar 20-08-2008 (Sabado).

Dai é só jogar no MySQL

 

Att,

Guilherme Oenning.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Gente,

 

Acho que devo isso à vocês, muito obrigado mesmo pelas ajudas.

Vocês, como sempre, foram realmente sábios e nota 10.

 

Consegui resolver meu problema, talvez de um jeito mais "grosseiro", mas está resolvido, testado e aprovado.

 

Segue abaixo minha solução.

 

// Listagem do cardápio
// Começa pegando a data edição passada
// Pego a data, vejo o número ( date(w) ) que dia da semana é.

// 0	- domingo	/ sunday
// 1	- segunda	/ monday
// 2	- terça		/ tuesday
// 3	- quarta		/ wednesday
// 4	- quinta		/ thursday
// 5	- sexta		/ friday
// 6	- sábado	/ saturday

// A intenção é fazer uma condição between (entre) a segunda-feira e o sábado, que são o início e o fim do cardápio.

$PegaData		= date('w', strtotime($pega_data_edicao));

$SeparaData	= explode('-', $pega_data_edicao);
$AnoData		= $SeparaData[0];
$MesData		= $SeparaData[1];
$DiaData		= $SeparaData[2];

if ($PegaData == 1)
{
	 // Segunda
	$Segunda	= $pega_data_edicao;
	$Sabado	= date('Y-m-d', mktime(0, 0, 0, date($MesData), date($DiaData)+5, date($AnoData)));
}
else
{
	if ($PegaData == 2)
	{
		// Terça
		$Segunda	= date('Y-m-d', mktime(0, 0, 0, date($MesData), date($DiaData)-1, date($AnoData)));
		$Sabado	= date('Y-m-d', mktime(0, 0, 0, date($MesData), date($DiaData)+4, date($AnoData)));
	}
	else
	{
		if ($PegaData == 3)
		{
			// Quarta
			$Segunda	= date('Y-m-d', mktime(0, 0, 0, date($MesData), date($DiaData)-2, date($AnoData)));
			$Sabado	= date('Y-m-d', mktime(0, 0, 0, date($MesData), date($DiaData)+3, date($AnoData)));
		}
		else
		{
			if ($PegaData == 4)
			{
				// Quinta
				$Segunda	= date('Y-m-d', mktime(0, 0, 0, date($MesData), date($DiaData)-3, date($AnoData)));
				$Sabado	= date('Y-m-d', mktime(0, 0, 0, date($MesData), date($DiaData)+2, date($AnoData)));
			}
			else
			{
				if ($PegaData == 5)
				{
					// Sexta
					$Segunda	= date('Y-m-d', mktime(0, 0, 0, date($MesData), date($DiaData)-4, date($AnoData)));
					$Sabado	= date('Y-m-d', mktime(0, 0, 0, date($MesData), date($DiaData)+1, date($AnoData)));
				}
				else
				{
					if ($PegaData == 6)
					{
						// Sábado
						$Segunda	= date('Y-m-d', mktime(0, 0, 0, date($MesData), date($DiaData)-5, date($AnoData)));
						$Sabado	= $pega_data_edicao;
					}
				}
			}
		}
	}
}

$pedido_cardapio_semana	= mysql_query("select dia, cardapio from tb_cardapio_semana where data between '$Segunda' and '$Sabado' limit 0,6");

while($c = mysql_fetch_array($pedido_cardapio_semana))
{
	echo "
		<div class='cardapio_dia'>
			<b>$c[dia]</b>
			<br><br>
			$c[cardapio]
		</div>";
}

Se tiverem algo pra discutir, por favor faça-o, quero muito melhor minhas coisas.

 

Até o então, o TÓPICO ESTÁ RESOLVIDO.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso aí, mas esse monte de IF fica feio.

Você terá o mesmo resultado se trocar todos os ifs por:

 

$Segunda	= date('Y-m-d', mktime(0, 0, 0, date($MesData), date($DiaData)-(1-$PegaData), date($AnoData)));
$Sabado	= date('Y-m-d', mktime(0, 0, 0, date($MesData), date($DiaData)+(6-$PegaData), date($AnoData)));

Faça um teste, fiz de cabeça agora! Vlw!

 

http://forum.imasters.com.br/public/style_emoticons/default/clap.gif

 

Att,

Guilherme Oenning.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.