Przekazywanie ID poddziałów między wyborem [JS]

PHP/MYSQL  Założony przez  Snake_.

Witam,
utknąłem w martwym punkcie. Od jakiegoś czasu próbuję utworzyć wybór 'kategorii' (w tym przypadku działu) a zaraz potem 'poddziału', korzystając z tego skryptu: http://www.appelsiini.net/projects/chained
Gdzie tkwię?
Otóż pobrane zostały już główne działy, potrzebuję teraz, aby po wyborze 'głównego' ukazały się jego poddziały. Na chwilę obecną siedzę w tym co widać (patrz niżej: demo). Po wybraniu działu powinno pokazywać jego poddziały, a jest co jest, czyli ukazuje wszystkie poddziały, które nie są rodzicem.
if(in_array($forum['pid'], $exp)) 
            {    
                
$forumsOptionChild .= '<option value="' $subforums[$forum['fid']] . '" selected="selected">--' $forum['name'] . '</option>';
                eval(
'$subforums[$forum["pid"]] .= "'.$templates->get('dld_add_subforums').'";'); //niekoniecznie szablon
            
}
            else
            {                              
                if(isset(
$subforums[$forum['fid']]))         
                {
                    
$forumsOptionParent .= '<option value="' $subforums[$forum['pid']] . '" selected="selected">' $forum['name'] . '</option>';
                }                
            }
            
$formularz '<select id="mark" name="mark">
                            <option value="0">wybierz kategorię</option>
                            ' 
$forumsOptionParent '
                            </select>    
                            <select id="series" name="series">
                            <option value="-">wybierz dział</option>
                            ' 
$forumsOptionChild '
                        </select>'

Z czego $subforums tworzy tablicę przed pętlą z rekordami z bazy danych.
Prośby na PW dotyczące wsparcia z problemami będą ignorowane. Pomoc poza forum - odpłatna; kontakt: snakemybboard@gmail.com.
Z tego co widzę po tamtym skrypcie, to brakuje Ci w kodzie klas CSS i nie wie on, co do czego przyporządkować.
Dobrze pokazuje to demo z audi i bmw.

Idąc tym tokiem: powinieneś dzieciom dać w klasie css oznaczenie takie samo, jak value przy rodzicu.
Wszystko będzie zbitką numeryczną, polecam wiec coś dorzucić np. aby klasy nazywały się:
- parentFid1
- parentFid2

itp.
Później w skrypcie obrabiającym formularz możesz sobie ten fragment tekstowy wyciąć (pewnie trafi do zapytania, więc i rzutować nie zaszkodzi).
Ja bym całe informacje o działach wysłał json'em i obrobił to wszystko w js.
Tablica w php
'działy' => [
'fid1' => 'nazwa działu1'
'fid2' => 'nazwa działu2,
],
'
fid działu 1' => [
'
fid_dziecka1' => 'nazwa dziecka 1',
'
fid_dziecka2' => 'nazwa dziecka 2',
],
'
fid działu 2' => [
'
fid_dziecka1' => 'nazwa dziecka 1',
'
fid_dziecka2' => 'nazwa dziecka 2',
],
]; 
Można byłoby też zrobić to trochę inaczej
['działy' =>
'fid1' => [
'forum_name' => 'nazwa działu',
'childs' => [
'fid1' => 'nazwa1'
'fid2' => 'nazwa2',
],
],
]; 
Kto jak woli.
Później tylko sprawdzasz jaki fid został wybrany w pierwszym polu i wtedy wrzucasz dzieci tego działu.
@Matslom, działy są już w tablicy, a w JS praktycznie nic nie napiszę.
@lukasamd
lukasamd napisał(a):Idąc tym tokiem: powinieneś dzieciom dać w klasie css oznaczenie takie samo, jak value przy rodzicu.
Wszystko będzie zbitką numeryczną, polecam wiec coś dorzucić np. aby klasy nazywały się:
- parentFid1
- parentFid2

Dopisałem
class="parentFid' . $subforums[$forum['pid']] . '" 
Tylko, że w tym warunku (jak podałem w pierwszym poście) $subforums[$forum['pid']] jest w eval, pod zmienną od dziecka. Czyżby niepoprawnie skonstruowany warunek?
lukasamd napisał(a):itp.
Później w skrypcie obrabiającym formularz możesz sobie ten fragment tekstowy wyciąć (pewnie trafi do zapytania, więc i rzutować nie zaszkodzi).
Co trafi do zapytania? Ten ciąg znaków z class?
Prośby na PW dotyczące wsparcia z problemami będą ignorowane. Pomoc poza forum - odpłatna; kontakt: snakemybboard@gmail.com.
Hm.. taką strukturę gorzej w ten sposób obrabiać - robisz dwie rzeczy w jednym przebiegu pętli, lepiej to rozbić albo na dwie osobne, albo zagnieżdżone, bo to nie koliduje z korzystaniem z szablonów.

Z drugiej strony nawet i teraz powinno działać. Jeżeli reszta jest poprawna to np tak:

if(in_array($forum['pid'], $exp)) 
            {    
                
$forumsOptionChild .= '<option value="parentFID' $subforums[$forum['fid']] . '" selected="selected">--' $forum['name'] . '</option>';
                eval(
'$subforums[$forum["pid"]] .= "'.$templates->get('dld_add_subforums').'";'); //niekoniecznie szablon
            
}
            else
            {                              
                if(isset(
$subforums[$forum['fid']]))         
                {
                    
$forumsOptionParent .= '<option class="parentFID{TUTAJ-TRZEBA-DODAC-ID-RODZICA}" value="' $subforums[$forum['pid']] . '" selected="selected">' $forum['name'] . '</option>';
                }                
            } 
lukasamd napisał(a):Z drugiej strony nawet i teraz powinno działać. Jeżeli reszta jest poprawna to np tak:

To jest prawie cała zawartość pętli (nie wliczając konstrukcji switch() z podziałem tego pliku na 'główny' i 'odnośnik').

Przed pętlą jest tylko tworzenie tablicy,
$subforums = array(); 

Wracając do tego:
lukasamd napisał(a):Później w skrypcie obrabiającym formularz możesz sobie ten fragment tekstowy wyciąć (pewnie trafi do zapytania, więc i rzutować nie zaszkodzi).
Jak byś/byście to widzieli? Nie do końca wiem co masz namyśli 'w skrypcie obrabiającym formularz'.
Teraz wiem, że mogło to nieco niefortunnie wyjść, gdyż wcześniej miałem w zmiennej $formularz po prostu formularz, teraz tylko wybór <select>. Z rzutowaniem sobie poradzę, jednak wyciąć fragment tekstowy... Tutaj powinienem...?

Ewentualnie może ma ktoś jakieś inne rozwiązania, aby uzyskać taki efekt?
Prośby na PW dotyczące wsparcia z problemami będą ignorowane. Pomoc poza forum - odpłatna; kontakt: snakemybboard@gmail.com.
No to problem polega na tym, że nie masz rozdzielonych dzieci od rodziców, a musisz mieć informacje o rodzicach, aby skrypt Ci to sensownie rozdzielił. Nie musi być po kolei, ale struktura musi być zachowana, inaczej ta biblioteka z JS nie zrobi tego, czego od niej wymagasz. Można to zrobić np. tak:

$forums['parents'] = '';
$forums['childs'] = '';


// Tutaj zapytanie ktore pobiera tylko rodzicow
while($row $db->fetch_array($query))
{
    
// nie jestem pewien warunku - ma sprawdzac, czy dzial ma jakis rodzicow
    
$forums['parents'] .= '<option value="parent' $row['fid'] . '">' $row['name'] . '</option>';
}


// Tutaj zapytanie ktore pobiera tylko dzieci
while($row $db->fetch_array($query))
{
    
// nie jestem pewien oznaczenia, zakladam, ze rodzica trzyma sie w polu pid
    
$forums['childs'] .= '<option value="child' $row['pid'] . '" class="parent' $row['pid'] . '">' $row['name'] . '</option>';
}



$formularz '<select id="mark" name="mark">
                <option value="-">wybierz kategorię</option>
                ' 
$forums['parents'] . '
                </select>    
                <select id="series" name="series">
                <option value="-">wybierz dział</option>
                ' 
$forums['childs'] . '
            </select>'




Uwaga: nie jestem pewien, że rodzice są na pewno w w polu pid (nie pamiętam tego).

Co się zaś tyczy skryptu obrabiającego - no chyba masz to w jakimś <form> i masz zamiar przesyłać?
Jeżeli tak, to potem $_POST będzie zawierało zarówno kategorię jak i kategorię, z tym, że nie będą to wartości numeryczne, tylko np. parent15 i child17.
php
<?php
$data 

[
'forums' => [
    [
'fid' => 1'name' => 'Dział Pierwszy'],
    [
'fid' => 2'name' => 'Dział drugi'],
],
'subforum_1' => [
    [
'fid' => 4'name' => 'Child 4'],
    [
'fid' => 5'name' => 'Child 5'],
],
'subforum_2' => [
    [
'fid' => 6'name' => 'Child 6'],
    [
'fid' => 7'name' => 'Child 7'],
],
];

$dataJSON json_encode($data);
?>
js
var data = <?php echo $dataJSON ?>;
//pokazanie rodziców
for (var forumKey in data.forums) {
    forumId = data.forums[forumKey].fid;
    forumName = data.forums[forumKey].name;
}

//pokazanie dzieci | ta pętla powinna znajdować się wewnątrz pętli rodziców.
var parentFid = forumId; //dla jakiego rodzica mają zostać pobrane subfora
for (var childKey in eval('data.subforum_'+parentFid)) {
    subforumID = eval('data.subforum_'+parentFid+'['+childKey+'].fid');
    subforumName = eval('data.subforum_'+parentFid+'['+childKey+'].name');

Wystarczy to połączyć z tą biblioteką co podałeś



Użytkownicy przeglądający ten wątek:

1 gości