Jump to content

[Resolvido] Breadcrumb - Função Recursiva


PF2G

Recommended Posts

Boas,

eu estou a tentar fazer uma função recursiva onde faça a listagem do "historico" da pagina produtos.

por exemplo eu estou na página das categorias e quero que me apareça o seguinte:

HOME >> PRODUTOS >> nome_categoria

quando estiver no produto tem de aparecer:

HOME >> PRODUTOS >> nome_categoria >> nome_produto.

Mas não me aparece nada...Alguem me pode ajudar?

Este é o meu código:

/****** RECURSIVE_QUERY ******/
$sel_prod_tit=mysql_query("SELECT * FROM menu_page WHERE type='".$clean_url[1]."'") or die(mysql_error());
$tit_prod_module=mysql_fetch_assoc($sel_prod_tit);
$clean_prod_module=$tit_prod_module['title'];
/********* RECURSIVE ********/
function BreadCrumb($id,$level)
{
if ($level!=0)
{
 $query_taxo = mysql_query("SELECT * FROM node WHERE taxonomy_id='".$id."'") or die(mysql_error());
 $taxo=mysql_fetch_assoc();

 $query_taxo_page = mysql_query("SELECT * FROM taxonomia_page WHERE id='".$taxo['taxonomy_id']."'") or die(mysql_error());
 $row=mysql_fetch_assoc($query_taxo_page);

 $link = "<a href=index.php>HOME</a>";
 $link = "<a href=index.php>".$clean_prod_module."</a>";
 $link = "<a href=index.php>".$row['title']."</a>";
 $bc .= $level==0 ? $link : $link . ' >> '  ;
 $parent_id = $row['parent_id'];
 BreadCrumb($parent_id,$level+1);

 echo $bc."";

 return BreadCrumb($id,$level);
}
else
{
 return true;
}
}
Link to comment
Share on other sites

... não me aparece nada ...

E ainda bem!

Como é que estás a chamar a função recursiva?

Repara: se chamares a função recursiva com o segundo parametro a 0 ela devolve true e não faz nada.

Se a chamares com um valor positivo ela entra em loop infinito (1, 2, 3, ..., 47835472354, ...).

Só funciona "bem" se a chamares com um valor negativo.

BreadCrumb(0, -3);

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Link to comment
Share on other sites

eu não percebo a relação entre os elementos do teu breadcrumb ...

 // que é isto ?????
 $query_taxo = mysql_query("SELECT * FROM node WHERE taxonomy_id='".$id."'") or die(mysql_error());
 $taxo=mysql_fetch_assoc();

 // que é isto ?????
 $query_taxo_page = mysql_query("SELECT * FROM taxonomia_page WHERE id='".$taxo['taxonomy_id']."'") or die(mysql_error());
 $row=mysql_fetch_assoc($query_taxo_page);
IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

$query_taxo = mysql_query("SELECT * FROM node WHERE taxonomy_id='".$id."'") or die(mysql_error());
 $taxo=mysql_fetch_assoc();

Isso era para ir buscar o id do produto (utlimo elemento)...

Mas ja alterei (não digo que esteja correto).

/****** RECURSIVE_QUERY ******/
/* aqui vai buscar o id do produto */
$query_tax = mysql_query("SELECT * FROM node") or die(mysql_error());
$tax=mysql_fetch_assoc($query_tax);
$tax_id=$tax['taxonomy_id'];
/********* RECURSIVE ********/
function BreadCrumb($tax_id,$level)
{
if ($tax_id!=0)
{
		    /* aqui é a categoria de produtos */
 $query_taxo = mysql_query("SELECT * FROM node WHERE taxonomy_id='".$tax_id."'") or die(mysql_error());
 $taxo=mysql_fetch_assoc();

 $query_taxo_page = mysql_query("SELECT * FROM taxonomia_page WHERE id='".$taxo['taxonomy_id']."'") or die(mysql_error());
 $row=mysql_fetch_assoc($query_taxo_page);

 $link = "<a href=index.php>HOME</a>";
 $link = "<a href=index.php>".$clean_prod_module."</a>";
 $link = "<a href=index.php>".$row['title']."</a>";
 $bc .= $level==0 ? $link : $link . ' >> '  ;
 $parent_id = $row['parent_id'];
 BreadCrumb($parent_id,$level++);

 echo $bc."";

 return BreadCrumb($id,$level);
}
else
{
 return true;
}
}
/** end/RECURSIVE FUNCTION **/

Penso que está um pouco confuso, este código, mas foi o mais proximo que consegui arranjar para o que eu quero, pois eu nunca trabalhei com funções, muito menos recursivas.

Link to comment
Share on other sites

- qual o SQL que te dá o elemento do breadcrumb

list($tax_link, $taxonomy_id) = explode("-", $page);
$query_tax = mysql_query("SELECT * FROM taxonomia_page WHERE link='".$tax_link."' AND id='".$taxonomy_id."'") or die(mysql_error());
$tax=mysql_fetch_assoc($query_tax);
$tax_id=$tax['id'];

e que campo dá a informação a apresentar e que campo dá a informação do link

Informação a apresentar: titulo; informação do link: link

- qual o SQL que dá a informação do ID do "pai"

 $query_taxo = mysql_query("SELECT * FROM node WHERE taxonomy_id='".$tax_id."'") or die(mysql_error());
 $taxo=mysql_fetch_assoc();

 $query_taxo_page = mysql_query("SELECT parentid FROM taxonomia_page WHERE id='".$taxo['taxonomy_id']."'") or die(mysql_error());
 $row=mysql_fetch_assoc($query_taxo_page);
Link to comment
Share on other sites

por muito estranho que o teu código parece, acho que será algo deste genero

/****** RECURSIVE_QUERY ******/
/* aqui vai buscar o id do produto */
$query_tax = mysql_query("SELECT * FROM node") or die(mysql_error());
$tax=mysql_fetch_assoc($query_tax);

/********* RECURSIVE ********/
function BreadCrumb($tax_id) {
 // verifica se é uma chamada recursiva para um elemento que não existe
 if ((int)$tax_id == 0)
   return "<a href='index.php'>HOME</a> >> ";

 $query_taxo = mysql_query("SELECT * FROM node WHERE taxonomy_id='".$tax_id."'") or die(mysql_error());
 $taxo=mysql_fetch_assoc();
 $query_taxo_page = mysql_query("SELECT * FROM taxonomia_page WHERE id='".$taxo['taxonomy_id']."'") or die(mysql_error());
 $row=mysql_fetch_assoc($query_taxo_page);

 return BreadCrumb($row['parent_id'])."<a href='{$row['link']}'>{$row['titulo']}</a> >> ";   
}

$breadcrumbs = BreadCrumb($tax['parent_id']).$tax['titulo'];

mas como disse, não da para perceber como tens isso da base de dados, logo não posso dar a certeza da exatidão do código

IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

Fiz umas pequenas alterações, nos nomes dos campos (pq estavam errados)

<?php
/****** RECURSIVE_QUERY ******/
list($tax_link, $taxonomy_id) = explode("-", $page);
$query_tax = mysql_query("SELECT * FROM taxonomia_page WHERE link='".$tax_link."' AND id='".$taxonomy_id."'") or die(mysql_error());
$tax=mysql_fetch_assoc($query_tax);
$tax_id=$tax['id'];
/********* RECURSIVE ********/
function BreadCrumb($tax_id) {

echo $tax_id['title'];

 // verifica se é uma chamada recursiva para um elemento que não existe
 if ((int)$tax_id == 0)
   {
return "<a href='index.php'>HOME</a> >> ";
}
 $query_taxo = mysql_query("SELECT * FROM node WHERE taxonomy_id='".$tax_id."'") or die(mysql_error());
 $taxo=mysql_fetch_assoc();

 $query_taxo_page = mysql_query("SELECT * FROM taxonomia_page WHERE id='".$taxo['taxonomy_id']."'") or die(mysql_error());
 $row=mysql_fetch_assoc($query_taxo_page);
 return BreadCrumb($row['parentid'])."<a href='".$row['link']."'>".$row['title']."</a> >> ";  
}
$breadcrumbs = BreadCrumb($tax['parentid']).$tax['title'];
/** end/RECURSIVE FUNCTION **/
?>

Não estava a funcionar, entao fiz um echo do $tax_id e deu-me 0 quando devia dar 41

Link to comment
Share on other sites

1º - se é para fazer uma alteração sem significado nenhum :

 if ((int)$tax_id == 0)
   { // <------- isto não serve para nada
return "<a href='index.php'>HOME</a> >> ";
} // <------- isto não serve para nada

ao menos mete a indentação correta !!!

se tens um erro nos dados da tabela isso já terás de resolver tu porque sinceramente é impossível dizer o porque disso, o máximo que posso dizer é : verifica o SQL que estás a criar

$sql = "SELECT * FROM taxonomia_page WHERE link='".$tax_link."' AND id='".$taxonomy_id."'";
echo $sql;
$query_tax = mysql_query($sql) or die(mysql_error());
IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

Já estou a um passo de conseguir resolver.

Este é o meu codigo:

<?php
/*********** RECURSIVE_QUERY ***********/
list($tax_link, $taxonomy_id) = explode("-", $page);
$query_tax = mysql_query("SELECT * FROM taxonomia_page WHERE link='".$tax_link."' AND id='".$taxonomy_id."'") or die(mysql_error());
$tax=mysql_fetch_assoc($query_tax);
$tax_id=$tax['id'];
/************** RECURSIVE *************/
$query = mysql_query("SELECT * FROM taxonomia_page WHERE id = '".$tax_id."'") or die(mysql_error());
$sel=mysql_fetch_assoc($query);
$id=$sel['id'];
function get_lines($id){
$cat = mysql_fetch_object(mysql_query("SELECT * FROM node WHERE taxonomy_id = '$id'"));
return $cat->titulo; 
}
function get_product($id)
{
$cat = mysql_fetch_object(mysql_query("SELECT * FROM taxonomia_page WHERE id = '$id'"));
return $cat->title; 
}
$select_prd=mysql_query("SELECT * FROM node WHERE taxonomy_id='".$tax_id."'") or die(mysql_error());
$taxo_id=mysql_fetch_assoc($select_prd);
$sel_prod=mysql_query("SELECT * FROM taxonomia_page WHERE id='".$taxo_id['taxonomy_id']."'") or die(mysql_error);
$products=mysql_fetch_assoc($sel_prod);
?>

<a href="<?php echo $current_lang; ?>">HOME</a> >> <a href="<?php echo $current_lang; ?>/<?php echo $module; ?>/all" >PRODUTOS</a> >>

<?php
if ($clean_url[2]!='all')
{
echo $products['title'];
}
elseif ($clean_url[3]!='')
{
?>
<a href="<?php echo $current_lang; ?>/<?php echo $module; ?>/<?php echo $products['link']; ?>-<?php echo $products['id']; ?>" ><?php echo $products['title']; ?></a>
<?php
$slct_prd=mysql_query("SELECT * FROM node WHERE url='".$clean_url[3]."'") or die(mysql_error());
$txnm_id=mysql_fetch_assoc($slct_prd);

echo $txnm_id['titulo'];
?>
<?php
/*********** end/RECURSIVE ***********/
}
?>

O que pretendo fazer agora é:

se o clean_url[2] (categoria) estiver seleccionada, isto é nao tiver nenhum link à frente ele mostra a categoria normal:

<a href>HOME</a> >> <a href>PODUTOS</a> >> nome_categoria

se tiver o clean_url[3] (produto), entao mostra o nome da categoria (linkado) e o nome do produto:

<a href>HOME</a> >> <a href>PODUTOS</a> >> <a href>nome_categoria</a> >>nome_produto

Podem-me ajudar, sff?

Obrigado,

PF2G

Link to comment
Share on other sites

Estou aqui com um problema pq não me esta a ler o if para $clean_url[3]:

<?php
/*********** RECURSIVE_QUERY ***********/
list($tax_link, $taxonomy_id) = explode("-", $page);
$query_tax = mysql_query("SELECT * FROM taxonomia_page WHERE link='".$tax_link."' AND id='".$taxonomy_id."'") or die(mysql_error());
$tax=mysql_fetch_assoc($query_tax);
$tax_id=$tax['id'];
/************** RECURSIVE *************/
$query = mysql_query("SELECT * FROM taxonomia_page WHERE id = '".$tax_id."'") or die(mysql_error());
$sel=mysql_fetch_assoc($query);
$id=$sel['id'];
function get_lines($id){
$cat = mysql_fetch_object(mysql_query("SELECT * FROM node WHERE taxonomy_id = '$id'"));
return $cat->titulo;
}
function get_product($id)
{
$cat = mysql_fetch_object(mysql_query("SELECT * FROM taxonomia_page WHERE id = '$id'"));
return $cat->title;
}
$select_prd=mysql_query("SELECT * FROM node WHERE taxonomy_id='".$tax_id."'") or die(mysql_error());
$taxo_id=mysql_fetch_assoc($select_prd);
$sel_prod=mysql_query("SELECT * FROM taxonomia_page WHERE id='".$taxo_id['taxonomy_id']."'") or die(mysql_error);
$products=mysql_fetch_assoc($sel_prod);
?>

<a href="<?php echo $current_lang; ?>">HOME</a> >> <a href="<?php echo $current_lang; ?>/<?php echo $module; ?>/all" >PRODUTOS</a> >>

<?php
if($clean_url[2]!='all')
{
 echo $products['title'];
}
elseif(isset($clean_url[3]) && $clean_url[3] != "")
{
 echo 'YEAH';
}
?>
<?php /*********** end/RECURSIVE ***********/ ?>

</div>
Edited by PF2G
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.