div einde toevoegen nadata alle elementen per category er in staan
Ik heb me de kop er al over gebroken hoe dit tot stand te brengen.
Zonder de div te moeten sluiten per categorie werkt het perfect.
Helaas heb ik voor deze toepassing de volgende structuur nodig.
categorie 1
<div>
<ul>
<li>item1</<li>
</ul>
</div>
categorie 2
<div>
<ul>
<li>item1</<li>
</ul>
</div>
Zonder de div te moeten sluiten per categorie werkt het perfect.
Helaas heb ik voor deze toepassing de volgende structuur nodig.
categorie 1
<div>
<ul>
<li>item1</<li>
</ul>
</div>
categorie 2
<div>
<ul>
<li>item1</<li>
</ul>
</div>
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
<?php
$result = $con->query($sql);
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
$rows[]=$row;
}
}
$con->close();
if($rows==true){
$sorted = array();
$test = array();
$count = 0;
$cat= array();
foreach ($rows as $v) {
if(!array_key_exists($v['Categorie_NL'], $sorted )) {
$sorted[$v["Categorie_NL"]] = array();
echo'
<button class="collapsible">'.$v["Categorie_NL"].' </button>
<div class="content"><ul>
';
}
$sorted[$v["Categorie_NL"]][] = $v["Aid"]; sort($sorted[$v['Categorie_NL']]);
echo"<li> ".$v["Artikel_ID"]."</li>\r\n" ;
$cat[]=$v["Categorie_NL"];
$verder= next($cat);
$huidig= current($cat);
if(!empty($verder) && $huidig != $verder){
echo"</ul></div>";
}
}
ksort($sorted);
}
else
{
echo"Er werden geen documenten weerhouden" ;
}
?>
$result = $con->query($sql);
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
$rows[]=$row;
}
}
$con->close();
if($rows==true){
$sorted = array();
$test = array();
$count = 0;
$cat= array();
foreach ($rows as $v) {
if(!array_key_exists($v['Categorie_NL'], $sorted )) {
$sorted[$v["Categorie_NL"]] = array();
echo'
<button class="collapsible">'.$v["Categorie_NL"].' </button>
<div class="content"><ul>
';
}
$sorted[$v["Categorie_NL"]][] = $v["Aid"]; sort($sorted[$v['Categorie_NL']]);
echo"<li> ".$v["Artikel_ID"]."</li>\r\n" ;
$cat[]=$v["Categorie_NL"];
$verder= next($cat);
$huidig= current($cat);
if(!empty($verder) && $huidig != $verder){
echo"</ul></div>";
}
}
ksort($sorted);
}
else
{
echo"Er werden geen documenten weerhouden" ;
}
?>
Gewijzigd op 26/04/2020 20:03:56 door Bart Smulders
Hoe komt het er nu uit?
Nu komt het er als volgt uit zonder dat de div en ul word afgesloten.
<button class="collapsible active">Buitenposten </button>
<div class="content" style="max-height: 90px;"><ul>
<li> JPDV</li><li> JPDVF</li>
<button class="collapsible active">Voedingen </button>
<div class="content" style="max-height: 138px;"><ul>
<li> PS2420DM</li><li> JPDVFL</li>
<li> GTD</li>
<li> BIS1</li>
<li> BIE1</li>
<button class="collapsible">Binnenposten </button>
<div class="content"><ul>
<li> JP4HD</li><li> MCWSA</li>
<button class="collapsible">Toegangscontrole </button>
<div class="content"><ul>
<li> AC10S</li>
<button class="collapsible">Toebehoren </button>
<div class="content"><ul>
<li> JPWBA</li>
<li> JP8Z</li>
<li> KJKF</li>
<li> MGF30</li>
<button class="collapsible">Bel & relais </button>
<div class="content"><ul>
<li> RY3DL</li>
<li> IER2</li>
<li> TAR4</li>
<li> CSJMDVFL</li>
<button class="collapsible">Interface </button>
<div class="content"><ul>
<li> JPTLI</li>
<li> JPTLIIPA</li>
<button class="collapsible active">Buitenposten </button>
<div class="content" style="max-height: 90px;"><ul>
<li> JPDV</li><li> JPDVF</li>
<button class="collapsible active">Voedingen </button>
<div class="content" style="max-height: 138px;"><ul>
<li> PS2420DM</li><li> JPDVFL</li>
<li> GTD</li>
<li> BIS1</li>
<li> BIE1</li>
<button class="collapsible">Binnenposten </button>
<div class="content"><ul>
<li> JP4HD</li><li> MCWSA</li>
<button class="collapsible">Toegangscontrole </button>
<div class="content"><ul>
<li> AC10S</li>
<button class="collapsible">Toebehoren </button>
<div class="content"><ul>
<li> JPWBA</li>
<li> JP8Z</li>
<li> KJKF</li>
<li> MGF30</li>
<button class="collapsible">Bel & relais </button>
<div class="content"><ul>
<li> RY3DL</li>
<li> IER2</li>
<li> TAR4</li>
<li> CSJMDVFL</li>
<button class="collapsible">Interface </button>
<div class="content"><ul>
<li> JPTLI</li>
<li> JPTLIIPA</li>
Volgens mij heb je gesjoemeld met de code.
Vanaf regel 34 stond er eerst :
Als aan de IF wordt voldaan worden de UL en DIV afgesloten.
Hier de code die er eerst stond :
Vanaf regel 34 stond er eerst :
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
echo"<li> ".$v["Artikel_ID"]."</li>" ;
$cat[]=$v["Categorie_NL"];
$verder= next($cat);
$huidig= current($cat);
if(!empty($verder) && $huidig != $verder){
echo"</ul></div>";
}
$cat[]=$v["Categorie_NL"];
$verder= next($cat);
$huidig= current($cat);
if(!empty($verder) && $huidig != $verder){
echo"</ul></div>";
}
Als aan de IF wordt voldaan worden de UL en DIV afgesloten.
Hier de code die er eerst stond :
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<?php
$result = $con->query($sql);
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
$rows[]=$row;
}
}
else {
$hint="";
}
$con->close();
if ($hint=="") {
} else {
echo $hint;
}
if($rows==true){
$sorted = array();
$test = array();
$count = 0;
$cat= array();
foreach ($rows as $v) {
if(!array_key_exists($v['Categorie_NL'], $sorted )) {
$sorted[$v["Categorie_NL"]] = array();
echo'
<button class="collapsible">'.$v["Categorie_NL"].' </button>
<div class="content"><ul>
';
}
$sorted[$v["Categorie_NL"]][] = $v["Aid"];
sort($sorted[$v['Categorie_NL']]);
echo"<li> ".$v["Artikel_ID"]."</li>" ;
$cat[]=$v["Categorie_NL"];
$verder= next($cat);
$huidig= current($cat);
if(!empty($verder) && $huidig != $verder){
echo"</ul></div>";
}
}
ksort($sorted);
}
else
{
echo"Er werd niets weerhouden" ;
}
?>
$result = $con->query($sql);
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
$rows[]=$row;
}
}
else {
$hint="";
}
$con->close();
if ($hint=="") {
} else {
echo $hint;
}
if($rows==true){
$sorted = array();
$test = array();
$count = 0;
$cat= array();
foreach ($rows as $v) {
if(!array_key_exists($v['Categorie_NL'], $sorted )) {
$sorted[$v["Categorie_NL"]] = array();
echo'
<button class="collapsible">'.$v["Categorie_NL"].' </button>
<div class="content"><ul>
';
}
$sorted[$v["Categorie_NL"]][] = $v["Aid"];
sort($sorted[$v['Categorie_NL']]);
echo"<li> ".$v["Artikel_ID"]."</li>" ;
$cat[]=$v["Categorie_NL"];
$verder= next($cat);
$huidig= current($cat);
if(!empty($verder) && $huidig != $verder){
echo"</ul></div>";
}
}
ksort($sorted);
}
else
{
echo"Er werd niets weerhouden" ;
}
?>
Gewijzigd op 26/04/2020 19:08:41 door Adoptive Solution
Gooi er meteen wat tabs in, want het is echt niet echt lekker leesbaar zo.
Het origineel met tabs
Als de UL en DIV niet worden getoond, voldoet de IF niet in
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
<?php
$result = $con->query($sql);
if ($result->num_rows > 0)
{
// output data of each row
while( $row = $result->fetch_assoc() )
{
$rows[]=$row;
}
} else {
$hint="";
}
$con->close();
if ( $hint == "" )
{
} else {
echo $hint;
}
if( $rows == true )
{
$sorted = array();
$test = array();
$count = 0;
$cat= array();
foreach ( $rows as $v )
{
if( !array_key_exists($v['Categorie_NL'], $sorted ) )
{
$sorted[$v["Categorie_NL"]] = array();
echo '<button class="collapsible">'.$v["Categorie_NL"].' </button>
<div class="content"><ul>';
}
$sorted[$v["Categorie_NL"]][] = $v["Aid"];
sort($sorted[$v['Categorie_NL']]);
echo "<li> " . $v["Artikel_ID"] . "</li>";
// vanaf hier ontbreekt het in het aangepaste bericht
$cat[]=$v["Categorie_NL"];
$verder= next($cat);
$huidig= current($cat);
if( !empty( $verder ) && $huidig != $verder )
{
echo "</ul></div>";
}
// tot hier ontbreekt het
}
ksort($sorted);
} else {
echo"Er werd niets weerhouden" ;
}
?>
$result = $con->query($sql);
if ($result->num_rows > 0)
{
// output data of each row
while( $row = $result->fetch_assoc() )
{
$rows[]=$row;
}
} else {
$hint="";
}
$con->close();
if ( $hint == "" )
{
} else {
echo $hint;
}
if( $rows == true )
{
$sorted = array();
$test = array();
$count = 0;
$cat= array();
foreach ( $rows as $v )
{
if( !array_key_exists($v['Categorie_NL'], $sorted ) )
{
$sorted[$v["Categorie_NL"]] = array();
echo '<button class="collapsible">'.$v["Categorie_NL"].' </button>
<div class="content"><ul>';
}
$sorted[$v["Categorie_NL"]][] = $v["Aid"];
sort($sorted[$v['Categorie_NL']]);
echo "<li> " . $v["Artikel_ID"] . "</li>";
// vanaf hier ontbreekt het in het aangepaste bericht
$cat[]=$v["Categorie_NL"];
$verder= next($cat);
$huidig= current($cat);
if( !empty( $verder ) && $huidig != $verder )
{
echo "</ul></div>";
}
// tot hier ontbreekt het
}
ksort($sorted);
} else {
echo"Er werd niets weerhouden" ;
}
?>
Als de UL en DIV niet worden getoond, voldoet de IF niet in
Gewijzigd op 26/04/2020 19:27:21 door Adoptive Solution
Ik heb inderdaad het gedeelte er uit gesmeten. aangezien het ook niet werkt.
Wanneer ik de volgende vars in echo zet krijg ik:
$verder = leeg
$huidig = leeg
$v["Categorie_NL"]= elke categorie word weer gegeven.
Zo heb ik de indruk dat array $cat[] niet gevuld word en er dus geen volgende of vorige kan zijn.
Wanneer ik de volgende vars in echo zet krijg ik:
$verder = leeg
$huidig = leeg
$v["Categorie_NL"]= elke categorie word weer gegeven.
Zo heb ik de indruk dat array $cat[] niet gevuld word en er dus geen volgende of vorige kan zijn.
Waarvoor is al die $rows en $sorted zooi nodig? Je doet drie keer ongeveer hetzelfde? Het enige wat je bij hoeft te houden is of je van categorie schakelt? Dat bepaalt of je wat extra HTML/wrappers weergeeft. Je kunt dus ook terug van twee naar één foreach/while loop? De bovenstaande code kan stukken minder wollig?
De enige reden dat je twee loops zou kunnen rechtvaardigen is als je de applicatielogica en layout verder uit elkaar zou trekken, bijvoorbeeld als je met templates werkt ofzo. Of misschien voor de overzichtelijkheid, maar ik vind de bovenstaande code allesbehalve overzichtelijk.
EDIT nog een alternatief: als je dan toch een loop spendeert aan het in een soort van datastructuur gieten van je data, organiseer dan je data per categorie, en zet daar dan de items onder, zodat je vervolgens dit kunt doen:
Als je dan toch arrays aan het bouwen bent, maak hier dan slim gebruik van.
De enige reden dat je twee loops zou kunnen rechtvaardigen is als je de applicatielogica en layout verder uit elkaar zou trekken, bijvoorbeeld als je met templates werkt ofzo. Of misschien voor de overzichtelijkheid, maar ik vind de bovenstaande code allesbehalve overzichtelijk.
EDIT nog een alternatief: als je dan toch een loop spendeert aan het in een soort van datastructuur gieten van je data, organiseer dan je data per categorie, en zet daar dan de items onder, zodat je vervolgens dit kunt doen:
Code (php)
Als je dan toch arrays aan het bouwen bent, maak hier dan slim gebruik van.
Gewijzigd op 26/04/2020 23:40:46 door Thomas van den Heuvel
Beste Thomas,
Dank voor jou input, echter:
1-> Er is geen controle meer of de categorie nu al dan niet reeds getoond werd of niet.
En krijg ik nu het volgende resultaat wat ik wel verwacht had.
A
A
A
B
B
B
C
C
C
C
D
D
D
Hoe zou jij het normaal doen?
Alvast bedankt voor jou antwoord.
Dank voor jou input, echter:
1-> Er is geen controle meer of de categorie nu al dan niet reeds getoond werd of niet.
En krijg ik nu het volgende resultaat wat ik wel verwacht had.
A
A
A
B
B
B
C
C
C
C
D
D
D
Hoe zou jij het normaal doen?
Alvast bedankt voor jou antwoord.
Je kunt in je query al de categorieën en de items daarbinnen sorteren. Deze staan dus al in de goede volgorde als je deze ophaalt uit de database.
Vervolgens kun je ofwel on-the-fly bijhouden of je van categorie geschakeld bent (maar dit levert redelijk wollige code op), of je bouwt eerst een hulparray (datastructuur) waarin je alles gewoon in een categorie-subarray duwt.
Dus zoiets:
En vervolgens kun je dit met de code uit mijn vorige reactie uitlezen.
Vervolgens kun je ofwel on-the-fly bijhouden of je van categorie geschakeld bent (maar dit levert redelijk wollige code op), of je bouwt eerst een hulparray (datastructuur) waarin je alles gewoon in een categorie-subarray duwt.
Dus zoiets:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
$myCategoryDataSet = array();
$res = $con->query($sql);
while ($row = $res->fetch_assoc()) {
if (empty($myCategoryDataSet[$row['Categorie_NL']])) {
// als dit categorie-array nog niet bestaat, maak deze aan
$myCategoryDataSet[$row['Categorie_NL']] = array(
'items' => array(),
// en wat je hier verder nog op categorie-niveau in wilt zetten
// als je verder geen categorie-specifieke informatie hebt zou
// je het items-subarray achterwege kunnen laten / eruit kunnen slopen
);
}
// nu we er van verzekerd zijn dat het categorie-subarray bestaat kunnen we zonder zorgen items toevoegen
// ik gooi hier simpelweg $row in, maar je zou dit verder zelf uit kunnen werken wat je van $row nodig hebt
$myCategoryDataSet[$row['Categorie_NL']]['items'][] = $row;
}
?>
$myCategoryDataSet = array();
$res = $con->query($sql);
while ($row = $res->fetch_assoc()) {
if (empty($myCategoryDataSet[$row['Categorie_NL']])) {
// als dit categorie-array nog niet bestaat, maak deze aan
$myCategoryDataSet[$row['Categorie_NL']] = array(
'items' => array(),
// en wat je hier verder nog op categorie-niveau in wilt zetten
// als je verder geen categorie-specifieke informatie hebt zou
// je het items-subarray achterwege kunnen laten / eruit kunnen slopen
);
}
// nu we er van verzekerd zijn dat het categorie-subarray bestaat kunnen we zonder zorgen items toevoegen
// ik gooi hier simpelweg $row in, maar je zou dit verder zelf uit kunnen werken wat je van $row nodig hebt
$myCategoryDataSet[$row['Categorie_NL']]['items'][] = $row;
}
?>
En vervolgens kun je dit met de code uit mijn vorige reactie uitlezen.
Thomas,
100x dank.
En zoals je zei heb ik eerst de data gesorteerd in de query.
De finale code werd dan. Dit werkt perfect.
Het gebruik van array's blijft een moeilijk thema.
Onderwerp gesloten.
100x dank.
En zoals je zei heb ik eerst de data gesorteerd in de query.
De finale code werd dan. Dit werkt perfect.
Het gebruik van array's blijft een moeilijk thema.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?php
$result = $con->query($sql);
if ($result->num_rows > 0) {
// output data of each row
while ($row = $result->fetch_assoc()) {
if (empty($myCategoryDataSet[$row['Categorie_NL']])) {
// als dit categorie-array nog niet bestaat, maak deze aan
$myCategoryDataSet[$row['Categorie_NL']] = array(
'items' => array(),
);
}
$myCategoryDataSet[$row['Categorie_NL']]['items'][] = $row;
}
}
else
{
echo"Er werden geen documenten weerhouden" ;
}
$con->close();
foreach ($myCategoryDataSet as $category) {
echo'
<button class="collapsible">'.$category['items'][0]["Categorie_NL"].' </button>
<div class="content"><ul>
';
foreach ($category['items'] as $item) {
echo"<li> ".$item["Artikel_ID"]."</li>\r\n" ;
}
echo"</ul></div>";
}
?>
$result = $con->query($sql);
if ($result->num_rows > 0) {
// output data of each row
while ($row = $result->fetch_assoc()) {
if (empty($myCategoryDataSet[$row['Categorie_NL']])) {
// als dit categorie-array nog niet bestaat, maak deze aan
$myCategoryDataSet[$row['Categorie_NL']] = array(
'items' => array(),
);
}
$myCategoryDataSet[$row['Categorie_NL']]['items'][] = $row;
}
}
else
{
echo"Er werden geen documenten weerhouden" ;
}
$con->close();
foreach ($myCategoryDataSet as $category) {
echo'
<button class="collapsible">'.$category['items'][0]["Categorie_NL"].' </button>
<div class="content"><ul>
';
foreach ($category['items'] as $item) {
echo"<li> ".$item["Artikel_ID"]."</li>\r\n" ;
}
echo"</ul></div>";
}
?>
Onderwerp gesloten.




