Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Closed TopicStart new topic
> Problem z klasą, tworzącą drzewa
thomson89
post
Post #1





Grupa: Zarejestrowani
Postów: 1 178
Pomógł: 51
Dołączył: 7.01.2009
Skąd: Gdańsk

Ostrzeżenie: (0%)
-----


Witam!

Dziś mam problem z klasą która tworzy drzewka z tablic. Błąd to:
Kod
Warning: Invalid argument supplied for foreach() in /home2/gla10000/public_html/sklep/panel_administracyjny/funkcje/tree.php on line 74


Kod klasy mam stąd.

Ściągnąłem, tak dla testu do mojego skryptu:
  1. $polaczenie = new baza;
  2. $query = 'SELECT * FROM kategorie';
  3. $wynik = mysql_query($query);
  4. $tabelka = mysql_fetch_assoc($wynik);
  5. $out = array();
  6. while($row = mysql_fetch_assoc($wynik)) {
  7. $out[] = $row;
  8. }
  9.  
  10. $oTree = new Tree( $out );
  11. $oTree->createTree();
  12.  
  13. foreach( $oTree->getTree1D() as $k => $v ){
  14. echo str_repeat( ' ', $v['level']*5 ).'- '.$v['nazwa']."\n";
  15. // klucz level, jest tworzony wewnątrz klasy,
  16. // jego nazwę można zmienić używając metody setLevelRowName()
  17. }


Oczywiście w klasie zmieniłem nazwy pól na własne (poprawne):
  1. private $idRowName = 'id';
  2. private $parentRowName = 'id_kategori_wyzszej';
  3. private $columnRowName = 'nazwa';
  4. private $levelRowName = 'level';


Wszystko wydaje się być dobrze wpisane w skrypt, a jednak - nie działa. Błąd który się pokazuje jest w klasie. Ale powoduje go mój kawałek kodu który ją wywołuje.

Proszę o pomoc!

Ten post edytował thomson89 4.08.2010, 21:34:28
Go to the top of the page
+Quote Post
jang
post
Post #2





Grupa: Zarejestrowani
Postów: 101
Pomógł: 11
Dołączył: 2.02.2005

Ostrzeżenie: (0%)
-----


  1. $treeID = $oTree->getTree1D();
  2. foreach( $treeID as $k => $v ){
  3. echo (str_repeat( ' ', $v['level']*5 ).'- '.$v['nazwa']."\n");
  4. }


Ten post edytował jang 5.08.2010, 00:25:46
Go to the top of the page
+Quote Post
everth
post
Post #3





Grupa: Zarejestrowani
Postów: 782
Pomógł: 153
Dołączył: 21.07.2010

Ostrzeżenie: (0%)
-----


Dopisz sobie przed linią 74 w Tree
  1. if (!$array) return;

Nie gwarantuje że zadziała.
Autor sam podaje że jego klasa nie jest dobra i rzeczywiście nie jest. Lepsze przykłady klas Tree znajdziesz na PhpClasses.org.
Go to the top of the page
+Quote Post
thomson89
post
Post #4





Grupa: Zarejestrowani
Postów: 1 178
Pomógł: 51
Dołączył: 7.01.2009
Skąd: Gdańsk

Ostrzeżenie: (0%)
-----


Nie działa nadal: te same błędy.
Go to the top of the page
+Quote Post
everth
post
Post #5





Grupa: Zarejestrowani
Postów: 782
Pomógł: 153
Dołączył: 21.07.2010

Ostrzeżenie: (0%)
-----


No to zmień klasę.
Go to the top of the page
+Quote Post
jang
post
Post #6





Grupa: Zarejestrowani
Postów: 101
Pomógł: 11
Dołączył: 2.02.2005

Ostrzeżenie: (0%)
-----


Cytat(thomson89 @ 4.08.2010, 22:07:46 ) *
Nie działa nadal: te same błędy.

Oprócz tego,że uraczyłeś nas genialną odpowiedzią, zrobiłeś jeszcze cokolwiek ?
Wrzuciłeś chociaż do tłumacza google co ta za błąd ?
  1. Warning: Invalid argument supplied for foreach()

  1. $treeID = $oTree->getTree1D();
  2. print_r($treeID);
Jest to tablica ? bo napewno nie.

http://www.phpriot.com/articles/nested-trees-2/3
http://www.edutech.ch/contribution/nstrees/
http://blog.bexlab.pl/category/technologie/sql-technologie/
http://articles.sitepoint.com/article/hier...data-database/2
Go to the top of the page
+Quote Post
thomson89
post
Post #7





Grupa: Zarejestrowani
Postów: 1 178
Pomógł: 51
Dołączył: 7.01.2009
Skąd: Gdańsk

Ostrzeżenie: (0%)
-----


A po co mi tłumacz, skoro doskonale wiem co oznacza błąd? Nie wiem tylko jak to naprawić. Wszystko jest tak ja w przykładzie (a przykład działa), a tutaj nie.

To co jest w tych linkach, to powiedzmy - zbędne. Potrzebuję tylko prostego wylistowania.
Go to the top of the page
+Quote Post
jang
post
Post #8





Grupa: Zarejestrowani
Postów: 101
Pomógł: 11
Dołączył: 2.02.2005

Ostrzeżenie: (0%)
-----


Cytat(thomson89 @ 4.08.2010, 22:35:15 ) *
Nie wiem tylko jak to naprawić.

Taki właśnie jest stan Twojej wiedzy na temat tego błędu.

Cytat(thomson89 @ 4.08.2010, 22:35:15 ) *
To co jest w tych linkach, to powiedzmy - zbędne.
Zbędny jest Ci mózg bo i tak nie potrafisz go używać a na dodatek jesteś śmierdzącym leniem i czekasz na gotowca. Tego sklepu ludzie z forum za Ciebie nie napiszą.
Wystarczyło tylko klikąć w jeden z linków i poczytać :
http://blog.bexlab.pl/struktura-drzewiasta...ury-drzewa/417/

ale poco skoro ktoś podrzuci gotowca ...
Go to the top of the page
+Quote Post
thomson89
post
Post #9





Grupa: Zarejestrowani
Postów: 1 178
Pomógł: 51
Dołączył: 7.01.2009
Skąd: Gdańsk

Ostrzeżenie: (0%)
-----


Jak już napisałem jest to zbędne. Tamta klasa zainteresowała mnie tylko dlatego, że oferowała nieograniczone listowanie kategorii, w prosty sposób. Coś co prezentujesz za pomocą linka jest swoistym wykresem.

Proszę mnie nie obrażać.

Gotowca nie oczekuję. Podczas gdy temat sobie leży na forum, ja nie czekam na gotowca lecz sam też coś próbuje wykodzić z własnych umiejętności. I nie oczekuję, by ktoś z forum pisał za mnie sklep - samemu sprawia mi to ogromną frajdę.

I tak, problem jest z tablicą którą przekazuje do funkcji, jednakże sprawdzając ją (print_r) wychodzi na to że wszystko jest w porządku.


Go to the top of the page
+Quote Post
muk4
post
Post #10





Grupa: Zarejestrowani
Postów: 309
Pomógł: 56
Dołączył: 3.11.2006
Skąd: Gliwice

Ostrzeżenie: (0%)
-----


Znalazłem jakąś moją starą funkcję do zagnieżdżania komentarzy:
  1. function show_comments($news_id, $comm_id=0, $nest_lvl=0){
  2. $margin_value = $nest_lvl*15;
  3. $res = mysql_query("SELECT * FROM `komentarze` WHERE `reply`='$comm_id' AND `news_id`='$news_id' ORDER BY `date`");
  4. if(mysql_num_rows($res) == '0'){ return 0;
  5. }else{
  6. while($koment = mysql_fetch_assoc($res)){
  7. echo "<span style=\"margin-left:{$margin_value}px;\">{$koment['id']} | {$koment['reply']} | {$koment['content']} | {$koment['date']} </span><br />";
  8. show_comments($news_id, $koment['id'], $nest_lvl+1);
  9. }
  10. }
  11. };
  12. //przykład:
  13. show_comments($id_newsa);

Być może zrobisz z niej użytek.
Go to the top of the page
+Quote Post
everth
post
Post #11





Grupa: Zarejestrowani
Postów: 782
Pomógł: 153
Dołączył: 21.07.2010

Ostrzeżenie: (0%)
-----


Teoretycznie powinno przebudować płaski wynik na drzewo (nie testowane);
  1. $id = array_walk($input,function($val) {return $val['id']);
  2. $names = array_walk($input,function($val) {return $val['name']);
  3. $parent = array_walk($input,function($val) {return $val['parent']);
  4.  
  5. function toTree(&$parent,&$names,&$id,$child_id=0,$level=0) {
  6. $result = array();
  7. $keys = array_search($parent,$child_id);
  8. foreach ($keys as $key) {
  9. $row = array();
  10. $row['value'] = $names[$key];
  11. $row['level'] = $level;
  12. $row['id'] = $id[$key];
  13. $row['children'] = toTree($parent,$names,$id, $id[$key],$level++);
  14. $result[] = $row;
  15. }
  16. return $result;
  17. }
  18.  
  19. $res = toTree($parent,$names,$id);


Ten post edytował everth 5.08.2010, 00:19:15
Go to the top of the page
+Quote Post
jang
post
Post #12





Grupa: Zarejestrowani
Postów: 101
Pomógł: 11
Dołączył: 2.02.2005

Ostrzeżenie: (0%)
-----


Cytat(thomson89 @ 4.08.2010, 23:24:10 ) *
Coś co prezentujesz za pomocą linka jest swoistym wykresem.

Wykres to jest coś takiego : http://www.google.com/images?rls=pl&q=...ved=0CCQQsAQwAA

a to : http://blog.bexlab.pl/wp-content/uploads/2009/11/tree_05.PNG
i to : http://blog.bexlab.pl/wp-content/uploads/2...11/tree_06b.PNG
to są drzewka
Cytat(thomson89 @ 4.08.2010, 23:24:10 ) *
Proszę mnie nie obrażać.
...
Tamta klasa zainteresowała mnie tylko dlatego, że oferowała nieograniczone listowanie kategorii, w prosty sposób.

No cóż jeśli to : http://luq10.wordpress.com/2010/03/17/drze...-obsluga-w-php/
jest prostsze od tego :
  1. SELECT
  2. concat( repeat('-', COUNT(parent.id) - 1),child.title)
  3. AS title,
  4. child.id
  5. FROM tree AS child,
  6. tree AS parent
  7. WHERE child.lft BETWEEN parent.lft AND parent.rgt
  8. GROUP BY child.id
  9. ORDER BY child.lft

albo od tego : http://articles.sitepoint.com/article/hier...data-database/2
to faktycznie muszę Ci przeprosić ...
Jesteś śmierdzącym leniem któremu nie chce się niczego przeczytać ani sprawdzić kawałka kodu.
Cytat(thomson89 @ 4.08.2010, 23:24:10 ) *
Jak już napisałem jest to zbędne. Tamta klasa zainteresowała mnie tylko dlatego, że oferowała nieograniczone listowanie kategorii, w prosty sposób. Coś co prezentujesz za pomocą linka jest swoistym wykresem.

Proszę mnie nie obrażać.

Skoro umiesz używać mózgu to może mi wyjaśnisz jaka jest różnica pomiędzy :
  1. - Kategoria 1
  2. - Kategoria 1.1
  3. - Kategoria 1.1.1
  4. - Kategoria 1.1.2
  5. - Kategoria 1.2
  6. - Kategoria 2
  7. (...)

a tym : http://blog.bexlab.pl/wp-content/uploads/2009/11/tree_09.PNG
?
no dobra ja Ci napiszę, to pierwsze to TEKST a to z mojego linku to zdjęcie albo obrazek jak wolisz ...

Mam dla Ciebie takie propozycje:
1. naucz się czytać
2. naucz się myśleć
3. naucz się korzystać z podpowiedzi innych
4. zacznij naukę tutaj : http://www.php.net/manual/pl/
5. za jakieś 7 lat zapraszam do działu PRZEDSZKOLE
Go to the top of the page
+Quote Post
Spawnm
post
Post #13





Grupa: Moderatorzy
Postów: 4 069
Pomógł: 497
Dołączył: 11.05.2007
Skąd: Warszawa




@jang okaż za grosz kultury bo dostaniesz warna.

@thomson89 - forum nie parser.
Go to the top of the page
+Quote Post

Closed TopicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.08.2025 - 13:11