PF2G Posted July 18, 2012 at 10:31 AM Report Share #469115 Posted July 18, 2012 at 10:31 AM 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 More sharing options...
pmg Posted July 18, 2012 at 10:42 AM Report Share #469117 Posted July 18, 2012 at 10:42 AM ... 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 More sharing options...
PF2G Posted July 18, 2012 at 10:47 AM Author Report Share #469120 Posted July 18, 2012 at 10:47 AM Porquê? Desculpa a minha ignorancia mas nao precebi muito bem... Link to comment Share on other sites More sharing options...
MASNathan Posted July 18, 2012 at 10:52 AM Report Share #469123 Posted July 18, 2012 at 10:52 AM return BreadCrumb($id,$level); estás a chamar a função dentro da mesma se o valor for positivo e como nunca alteras o valor que usas para a chamar dentro de si própria ela anda lá ás voltas Link to comment Share on other sites More sharing options...
PF2G Posted July 18, 2012 at 10:57 AM Author Report Share #469126 Posted July 18, 2012 at 10:57 AM Então como faço para resolver isso? Link to comment Share on other sites More sharing options...
MASNathan Posted July 18, 2012 at 11:10 AM Report Share #469129 Posted July 18, 2012 at 11:10 AM Então como faço para resolver isso? isso diz-me tu, o que é que queres devolver se o valor for positivo? Link to comment Share on other sites More sharing options...
PF2G Posted July 18, 2012 at 01:23 PM Author Report Share #469154 Posted July 18, 2012 at 01:23 PM Será que me podem ajudar a por o codigo direito. Já estive a pesquisar mas não encontro nada que me ajude... Obrigado Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted July 18, 2012 at 01:37 PM Report Share #469156 Posted July 18, 2012 at 01:37 PM 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 Portugol Plus Link to comment Share on other sites More sharing options...
PF2G Posted July 18, 2012 at 01:58 PM Author Report Share #469164 Posted July 18, 2012 at 01:58 PM $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 More sharing options...
HappyHippyHippo Posted July 18, 2012 at 02:14 PM Report Share #469168 Posted July 18, 2012 at 02:14 PM diz-me só : - qual o SQL que te dá o elemento do breadcrumb e que campo dá a informação a apresentar e que campo dá a informação do link - qual o SQL que dá a informação do ID do "pai" IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
PF2G Posted July 18, 2012 at 02:33 PM Author Report Share #469170 Posted July 18, 2012 at 02:33 PM - 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 More sharing options...
HappyHippyHippo Posted July 18, 2012 at 02:46 PM Report Share #469172 Posted July 18, 2012 at 02:46 PM 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 Portugol Plus Link to comment Share on other sites More sharing options...
PF2G Posted July 18, 2012 at 02:58 PM Author Report Share #469176 Posted July 18, 2012 at 02:58 PM 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 More sharing options...
HappyHippyHippo Posted July 18, 2012 at 03:04 PM Report Share #469178 Posted July 18, 2012 at 03:04 PM 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 Portugol Plus Link to comment Share on other sites More sharing options...
PF2G Posted July 18, 2012 at 05:26 PM Author Report Share #469197 Posted July 18, 2012 at 05:26 PM 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 More sharing options...
PF2G Posted July 19, 2012 at 10:29 AM Author Report Share #469237 Posted July 19, 2012 at 10:29 AM (edited) 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 July 19, 2012 at 10:30 AM by PF2G Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now