Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Caros amigos,
Estou trabalhando nessa função com o objetivo simple: Buscar a primeira aparição de conteúdo buscando dentro de uma árvore de resultados (Tree)
Explicando:
1) A primeira coisa a função verifica se existe algum conteúdo no nível 0 da árvore.
2) Se não encontrar ela parte para o nível 1 e até encontra o primeiro conteúdo.
O que está acontecendo...
A função NÃO retorna um valor para uma variável, ou seja, o valor é sempre impresso na página sem ser solicitado quando uso ECHO dentro da função e não apresenta resultado quando uso RETURN.
Coloco abaixo as duas variações que fiz.
1ª Usando ECHO dentro da função:
function CondicaoPage($sessao, $nivel){
global $hostname_connSite;
global $database_connSite;
global $username_connSite;
global $password_connSite;
global $connSite;
mysql_select_db($database_connSite, $connSite);
// Se estivermos na raíz das sessões
if($nivel == 0){
$query_rsConteudo = "SELECT cod_conteudo
FROM chr_conteudo
WHERE ativo = 1
AND cod_sessao = ". $sessao ."
ORDER BY ord_by, cod_conteudo";
$rsConteudo = mysql_query($query_rsConteudo, $connSite) or die(mysql_error());
$row_rsConteudo = mysql_fetch_assoc($rsConteudo);
$totalRows_rsConteudo = mysql_num_rows($rsConteudo);
//Se tiver conteúdo na raiz
if($totalRows_rsConteudo > 0 ){
echo "1ª Condição WHERE cod_conteudo = ". $row_rsConteudo['cod_conteudo'];
mysql_free_result($rsConteudo);
exit;
} else {
mysql_free_result($rsConteudo);
CondicaoPage($sessao, $nivel+1); // <- Passa para segunda condição
}
// Se o nível for acima do 0 é porque ele não encontrou conteúdo na raiz e vai em busca de outro conteudo
}else{
$query_rsTree = "SELECT cod_sessao
FROM chr_sessao
WHERE ativo = 1
AND link_sessao = ". $sessao ."
ORDER BY ord_by, sess_titulo";
$rsTree = mysql_query($query_rsTree, $connSite) or die(mysql_error());
$row_rsTree = mysql_fetch_assoc($rsTree);
$totalRows_rsTree= mysql_num_rows($rsTree);
// Se existir sessões ligadas
if($totalRows_rsTree > 0){
do{
//Base do conteúdo
$query_rsConteudo = "SELECT cod_conteudo
FROM chr_conteudo
WHERE ativo = 1
AND cod_sessao = ". $row_rsTree['cod_sessao'] ."
ORDER BY ord_by, cod_conteudo";
$rsConteudo = mysql_query($query_rsConteudo, $connSite) or die(mysql_error());
$row_rsConteudo = mysql_fetch_assoc($rsConteudo);
$totalRows_rsConteudo = mysql_num_rows($rsConteudo);
// Se achar algum conteúdo
if($totalRows_rsConteudo > 0){
echo "2ª condição WHERE cod_conteudo = ". $row_rsConteudo['cod_conteudo'];
mysql_free_result($rsConteudo);
mysql_free_result($rsTree);
exit;
}
//Base dos filhos
$query_rsSubTree = "SELECT cod_sessao
FROM chr_sessao
WHERE ativo = 1
AND link_sessao = ". $row_rsTree['cod_sessao'] ."
ORDER BY ord_by, sess_titulo";
$rsSubTree = mysql_query($query_rsSubTree, $connSite) or die(mysql_error());
$row_rsSubTree = mysql_fetch_assoc($rsSubTree);
$totalRows_rsSubTree = mysql_num_rows($rsSubTree);
// Se existe filhos
if($totalRows_rsSubTree>0){
CondicaoPage($row_rsTree['cod_sessao'], $nivel+1); // <- Função que faz o Tree
mysql_free_result($rsSubTree);
}else{
mysql_free_result($rsSubTree);
}
}while($row_rsTree = mysql_fetch_assoc($rsTree));
mysql_free_result($rsTree);
}else{
mysql_free_result($rsTree);
}
}
}
Nesse caso retorna assim imediatamente que requere a função mesmo se eu colocar **$variavel = CondicaoPage(4, 0);**, ele imprime o resultado, haja visto que NÃO USEI **echo $variavel **
<?php
$variavel = CondicaoPage(4, 0);
// echo $variavel;
<?
(Ele imprime na tela sempre {abaixo}, mesmo estando escrito como está acima)
2ª condição WHERE cod_conteudo = 12
2ª Usando Return dentro da função:
function CondicaoPage($sessao, $nivel){
global $hostname_connSite;
global $database_connSite;
global $username_connSite;
global $password_connSite;
global $connSite;
mysql_select_db($database_connSite, $connSite);
// Se estivermos na raíz das sessões
if($nivel == 0){
$query_rsConteudo = "SELECT cod_conteudo
FROM chr_conteudo
WHERE ativo = 1
AND cod_sessao = ". $sessao ."
ORDER BY ord_by, cod_conteudo";
$rsConteudo = mysql_query($query_rsConteudo, $connSite) or die(mysql_error());
$row_rsConteudo = mysql_fetch_assoc($rsConteudo);
$totalRows_rsConteudo = mysql_num_rows($rsConteudo);
//Se tiver conteúdo na raiz
if($totalRows_rsConteudo > 0 ){
$condicao_page = "1ª Condição WHERE cod_conteudo = ". $row_rsConteudo['cod_conteudo'];
mysql_free_result($rsConteudo);
return $condicao_page;
} else {
mysql_free_result($rsConteudo);
CondicaoPage($sessao, $nivel+1); // <- Passa para segunda condição
}
// Se o nível for acima do 0 é porque ele não encontrou conteúdo na raiz e vai em busca de outro conteudo
}else{
$query_rsTree = "SELECT cod_sessao
FROM chr_sessao
WHERE ativo = 1
AND link_sessao = ". $sessao ."
ORDER BY ord_by, sess_titulo";
$rsTree = mysql_query($query_rsTree, $connSite) or die(mysql_error());
$row_rsTree = mysql_fetch_assoc($rsTree);
$totalRows_rsTree= mysql_num_rows($rsTree);
// Se existir sessões ligadas
if($totalRows_rsTree > 0){
do{
//Base do conteúdo
$query_rsConteudo = "SELECT cod_conteudo
FROM chr_conteudo
WHERE ativo = 1
AND cod_sessao = ". $row_rsTree['cod_sessao'] ."
ORDER BY ord_by, cod_conteudo";
$rsConteudo = mysql_query($query_rsConteudo, $connSite) or die(mysql_error());
$row_rsConteudo = mysql_fetch_assoc($rsConteudo);
$totalRows_rsConteudo = mysql_num_rows($rsConteudo);
// Se achar algum conteúdo
if($totalRows_rsConteudo > 0){
$condicao_page = "2ª condição WHERE cod_conteudo = ". $row_rsConteudo['cod_conteudo'];
mysql_free_result($rsConteudo);
mysql_free_result($rsTree);
return $condicao_page;
}
//Base dos filhos
$query_rsSubTree = "SELECT cod_sessao
FROM chr_sessao
WHERE ativo = 1
AND link_sessao = ". $row_rsTree['cod_sessao'] ."
ORDER BY ord_by, sess_titulo";
$rsSubTree = mysql_query($query_rsSubTree, $connSite) or die(mysql_error());
$row_rsSubTree = mysql_fetch_assoc($rsSubTree);
$totalRows_rsSubTree = mysql_num_rows($rsSubTree);
// Se existe filhos
if($totalRows_rsSubTree>0){
CondicaoPage($row_rsTree['cod_sessao'], $nivel+1); // <- Função que faz o Tree
mysql_free_result($rsSubTree);
}else{
mysql_free_result($rsSubTree);
}
}while($row_rsTree = mysql_fetch_assoc($rsTree));
mysql_free_result($rsTree);
}else{
mysql_free_result($rsTree);
}
}
}
Nesse caso não retorna nada.
<?php
$variavel = CondicaoPage(4, 0);
echo $variavel;
<?
(não imprimiu nada)
O que eu preciso...
Eu preciso que o resultado dessa função passe para dentro de uma variável que eu vou chamar em um setror determinado do site.
Agradeço a todos que me passar algum conhecimento complementar.
Carregando comentários...