[PHP] Onderste blok zoeken (PHPMyStats)

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben bezig met het maken van een center functie voor PHPMyStats, alles werkt leuk en aardig. Alleen ik loop tegen een probleem aan als ik bezig ben met de admin functie.

Ik heb ongeveer de volgende opmaak als configuratiebestand:
code:
1
2
3
4
5
6
7
Eenofanderemodulehierzoja<;>left
DFgsghsdghsdfgSDF<;>right
ERT7efdghdfsbgn<;>center
Cvbsfgadfsas<;>left<;>more<;>options<;>available
Rfffrfffrrffrrr<;>right
Njhhbbggtsdrtasdfgoiu<;>right
Blaaterstaatietsindeweiofzo<;>center


Ik open het bestand en lees regel voor regel uit, die regels explode ik op <;> en dan voeg ik de array toe aan een andere array. Dit werkt allemaal perfect tijdens het bekijken van PHPMyStats, echter op de admin pagina krijg ik het niet voor elkaar om uit te zoeken welke als laatste moet komen te staan.

Ik dacht eerst om het aantal posities te tellen per onderdeel. Echter loop ik dan tegen het probleem dat ik niet weet waar de andere moule's zijn. En dus kan ik nooit weten of het de onderste module is.
Ik moet weten of het de laatste module is omdat ik daaraan knoppen moet toekennen ( omhoog, omlaag, links, rechts ). Tellen hoevaak alle module's al geweest zijn krijg ik dus niet voor elkaar omdat ik het bijbehorende algoritme niet lekker werkend krijg.

Mijn opbouw van admin.php kan je hier beneden bekijken:
PHP:
1
2
3
4
5
6
7
8
9
foreach($configfile as $rule) {
  if ($rule[1]=="left") {
    //left hier
  } elseif ($rule[1]=="right") {
    //right hier
  } elseif ($rule[1]=="center") {
    //center hier
  }
}


Ik zat zelf te denken om de configfile achterstevoren in te lezen (dus kijken wat de laatste regel is), als dat een center is dan gewoon blijven counten met een waarde en als dat gelijk is dan geen pijl naar onderen weergeven. Echter loopt dit vast als ik een center heb met daarna een right of left.
Ook als het een left en een right module zijn dan moetten die allebij geen knopje hebben, als het enkel een right is (na een center) dan de right niet en de center wel.

Wie kan er een manier bedenken dat de laatste module geen "down" knop krijgt?

Het gaat dus om dit: http://baracuda.homeip.net/phpmystats/admin.php

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik geef dit topic een kleine zwengel :)

Acties:
  • 0 Henk 'm!

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

Ik snap er echt niets van.. en ik heb het nu echt al 5 keer gelezen...

Je hebt een soort van templatesysteem gemaakt; en nu wil je dat degene die als laatste een center property heeft een aantal extra buttons krijgt. Klopt dit?

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
[of]ik had gehoopt dat iemand er iets van kon bakken :+ [/]

Om het maar visueel duidelijk te maken heb ik drie cases die ik me kan indenken (bij de gene met right onder dat kan ook left zijn ;) )
Ik wil dat de onderste module('s) geen "MOVE DOWN" knop hebben, dit geef ik aan door wel/niet neer te zetten.

code:
1
2
3
[       center - wel       ]
[left - wel ] [ right - wel ]
[      center - niet       ]

code:
1
2
3
[ left - wel ] [ right - wel ]
[       center - wel       ]
             [ right - niet ]

code:
1
2
[      center - wel        ]
[ left - niet ] [ right - niet ]

Acties:
  • 0 Henk 'm!

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

Ok.. die begrijp ik.. en wat is er nu voor bijzonders aan de center?

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Spider.007 schreef op 06 april 2004 @ 20:46:
Ok.. die begrijp ik.. en wat is er nu voor bijzonders aan de center?
Deze vraag zet me aan het denken, volgends mij dacht ik gewoon te moeilijk :+

Ik heb een theorie bedacht, echter zit ik met 1 probleem, stel iemand zet het een beetje raar neer(wat phpmystats wel goed parsed, maar de admin niet):
code:
1
2
3
4
[moduleeen<;>left
moduletwee<;>left
moduledrie<;>right
modulevier<;>right


Mijn theorie was:
PHP:
1
2
3
4
5
6
7
get laatste 2 waardes en zet in array

if (laatste 2 geen CENTER zijn) {
  bijde geen knop
} else {
  laatste geen knop
}

Maar dat kan dus niet omdat ik de volgorde van data niet kan beslissen.

Acties:
  • 0 Henk 'm!

  • Skinny
  • Registratie: Januari 2000
  • Laatst online: 19-09 16:45

Skinny

DIRECT!

Ik snap nog niet helemaal waar nou precies 1 regel in je config-file voor staat ... 1 regel = 1 module en bepaalt dan de left/center/right de positie van de module op het scherm ? Ken het phpMyStats project alleen van horen lezen ;), maar wellicht kan je eerst alle items inlezen in 3 "arrays" en deze daarna doorlopen zoals je nu met je "foreach" doet...

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// Lees items in 3 arrays : $left, $center, $right


foreach( $left as $rule )
{
    if( $rule == end( $left ) )
    { 
        // laatste item
    }
    else
    {
        // gewoon item
    }
}



[edit]Ik moet ook gewoon ff op die link klikken en eerst kijken voordat ik blaat.. ga ff verder denken..
[edit2]Volgens mij moet het op bovenstaande manier toch wel kunnen..

[ Voor 19% gewijzigd door Skinny op 06-04-2004 22:20 ]

SIZE does matter.
"You're go at throttle up!"


Acties:
  • 0 Henk 'm!

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

Ik denk dat ik het wel begrijp nu :D

Kun je geen tweedimensionale array maken om je elementen in te positioneren; en dan daar wat logica op loslaten? Als een element in 1 dimensie (vertikaal) op de laatste plaats staat moet hij wel knoppen hebben; en anders niet (toch) :)

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hoe bedoel je dat? Ik heb een paar dagen naar je post zitten kijken maar ik zou me geen array opbouw kunnen bedenken die ik makkelijk kan uitlezen :/

Acties:
  • 0 Henk 'm!

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

Kun je niet twee arrays maken; $leftColumn en $rightColumn.

Vervolgens parse je de configfile naar die arrays; dus

code:
1
2
3
[       1.  center - wel          ]
[2. left - wel ] [ 3. right - wel ]
[       4. center - niet          ]

PHP:
1
2
$leftColumn = 1, 2, 4
$rightColumn = 1, 3, 4

Vervolgens vraag je van de langste array het laatste element op. Dit element geef je geen buttons. Als ze even lang zijn haal je beide elementen op.

Dus hier volgt 4 uit

De rest uitgewerkt om te kijken of dit klopt:

code:
1
2
3
[ 1left - wel ] [ 2right - wel ]
[        3center - wel         ]
               [ 4right - niet ]

PHP:
1
2
$leftColumn = 1, 3
$rightColumn = 2, 3, 4


volgt 4 uit

code:
1
2
[         1center - wel          ]
[ 2left - niet ] [ 3right - niet ]

PHP:
1
2
$leftColumn = 1, 2
$rightColumn = 1, 3


volgen uit, 2 & 3

Klopt? Of niet?

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Echt geweldig, de puzzel valt in elkaar _/-\o_
Nou ik het zo bekijk is het best wel simpel, echter moet je er net op komen :+

[EDIT]
f*ck jou systeem is bugged :'(

code:
1
2
3
4
5
[        1.  center wel            ]
[2. left - wel  ] [ 3. right - niet ]
[4. left - wel  ]
[5. left - wel  ]
[6. left - niet ]

PHP:
1
2
$leftColumn = 1, 2, 4, 5, 6
$rightColumn = 1, 3

Langste is LEFT met de 6. Echter 3 mag ook geen knop, die zou hij zo wel krijgen.

[sup][edit2] hmz 3 moest ook GEEN knop :+

[ Voor 70% gewijzigd door Verwijderd op 20-04-2004 16:53 ]


Acties:
  • 0 Henk 'm!

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

Verwijderd schreef op 19 april 2004 @ 23:29:
Echt geweldig, de puzzel valt in elkaar _/-\o_
Nou ik het zo bekijk is het best wel simpel, echter moet je er net op komen :+

[EDIT]
f*ck jou systeem is bugged :'(

code:
1
2
3
4
5
[        1.  center wel            ]
[2. left - wel  ] [ 3. right - wel ]
[4. left - wel  ]
[5. left - wel  ]
[6. left - niet ]

PHP:
1
2
$leftColumn = 1, 2, 4, 5, 6
$rightColumn = 1, 3

Langste is LEFT met de 6. Echter 3 mag ook geen knop, die zou hij zo wel krijgen.
<!--Oei.. van die vereiste was ik even niet op de hoogte.. ik zal er over na gaan denken... het moet op te lossen zijn :)



Ben ik gek of is dit erg simpel op te lossen door gewoon altijd de laatste waardes uit beiden kolommen te pakken; zelfs als 1 van de twee langer is dan de ander?


En deze is trouwens ook lastig:
code:
1
2
3
4
5
[ 1left - wel ] [ 2right - wel ]
[ 3left - wel ] 
[ 4left - wel ] 
[        5center - wel         ]
               [ 6right - niet ]


$leftColumn = 1, 3, 4, 5
$rightColumn = 2, 5, 6

:(


Kun je de volgende logica niet gebruiken:

Het laatste element in de $leftColumn en het laatste element in de $rightColumn krijgen geen knop, tenzij het voorlaatste element in 1 van de twee kolommen ook voorkomt in de andere kolom (is dus een center).
-->

Volgens mij klopt het wel; je moet alleen van de langste kolom het element pakken. Als ze even lang zijn dan pak je ze beiden.

[ Voor 41% gewijzigd door Spider.007 op 20-04-2004 09:23 ]

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


Acties:
  • 0 Henk 'm!

  • SuperRembo
  • Registratie: Juni 2000
  • Laatst online: 20-08 14:36
Waarom hou je niet tijdens het lezen bij op welke regel elke module komt? Je houdt het regelnummer voor links en rechts apart bij. Dan weet je aan het eind genoeg om te bepalen welke knoppen je moet tonen.

In het voorbeeld:
code:
1
2
3
4
5
[        1.  center wel            ]
[2. left - wel  ] [ 3. right - wel ]
[4. left - wel  ]
[5. left - wel  ]
[6. left - niet ]


heb je dan
PHP:
1
2
3
$moduleRows = 1, 2, 2, 3, 4, 5
$maxRowLeft = 5
$maxRowRight = 2

| Toen / Nu


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
@ Spider.007:
De right module moet dus NIET een knop, ik had het zo opgeschreven omdat hij er wel een zou krijgen (beetje stom opgeschreven dus van mij). Dat heb ik nou aangepast.

@SuperRembo:
Hoe bedoel je dit? Dit gezien de fout (zie bovenaan deze post). Ik snap ook niet echt de bedoeling van moduleRows(vanwaar die dubbele 2? en waarom 3? die moet geen knop).

Acties:
  • 0 Henk 'm!

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

Verwijderd schreef op 20 april 2004 @ 17:07:
@ Spider.007:
De right module moet dus NIET een knop, ik had het zo opgeschreven omdat hij er wel een zou krijgen (beetje stom opgeschreven dus van mij). Dat heb ik nou aangepast.

[...]
Het zal aan mij liggen; maar ik ben ervanovertuigd dat het toch klopt. Je moet alleen het laatste element van de langste array pakken, tenzij ze even lang zijn.

code:
1
2
3
4
5
[        1.  center wel            ]
[2. left - wel  ] [ 3. right - niet ]
[4. left - wel  ]
[5. left - wel  ]
[6. left - niet ]
PHP:
1
2
3
4
<?
$leftColumn = 1, 2, 4, 5, 6
$rightColumn = 1, 3
?>

Vervolgens pak je alleen het laatste element van de langste array. Dat is dus 6 uit $leftColumn. Die geef je vervolgens een knop.. klopt toch? Of bekijk ik het probleem vanaf de verkeerde kant?

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Spider.007 schreef op 20 april 2004 @ 17:13:
Vervolgens pak je alleen het laatste element van de langste array. Dat is dus 6 uit $leftColumn. Die geef je vervolgens een knop.. klopt toch? Of bekijk ik het probleem vanaf de verkeerde kant?
Na het lezen van de vetgedrukte tekst dacht ik iets van Spider.007 is gek geworden. Ik ging even iets zoeken in de startpost waarin stond dat de onderste geen knoppen mochte hebben. Echter tot mijn verbazing zie ik het volgende staan:
Ik moet weten of het de laatste module is omdat ik daaraan knoppen moet toekennen ( omhoog, omlaag, links, rechts ).
Het is dus de bedoeling dat de laatste module's per kant GEEN knop heeft, die kan niet naar onderen (die is namelijk al onderaan) :+

Acties:
  • 0 Henk 'm!

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

Verwijderd schreef op 20 april 2004 @ 17:24:
[...]

Na het lezen van de vetgedrukte tekst dacht ik iets van Spider.007 is gek geworden. Ik ging even iets zoeken in de startpost waarin stond dat de onderste geen knoppen mochte hebben. Echter tot mijn verbazing zie ik het volgende staan:

[...]

Het is dus de bedoeling dat de laatste module's per kant GEEN knop heeft, die kan niet naar onderen (die is namelijk al onderaan) :+
Ach.. dat is een kwestie van het omdraaien van de logica; waarom zou je niet aan het laatste element uit de langste array geen knop toe kunnen voegen?

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Spider.007 schreef op 20 april 2004 @ 17:32:
Ach.. dat is een kwestie van het omdraaien van de logica; waarom zou je niet aan het laatste element uit de langste array geen knop toe kunnen voegen?
Ow ik snap het, per array (links EN rechts neem je de hoogste) die je geen item geeft, zijn ze het zelfde dan uit (bv) center array. Dan klopt het wel ja.
ik dacht uit bijde array's de hoogste :P

Acties:
  • 0 Henk 'm!

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

Verwijderd schreef op 20 april 2004 @ 19:05:
[...]

Ow ik snap het, per array (links EN rechts neem je de hoogste) die je geen item geeft, zijn ze het zelfde dan uit (bv) center array. Dan klopt het wel ja.
ik dacht uit bijde array's de hoogste :P
Mooi.. is dat dan ook de oplossing voor je probleem of zie ik nog iets over het hoofd? :)

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Spider.007 schreef op 20 april 2004 @ 19:45:
Mooi.. is dat dan ook de oplossing voor je probleem of zie ik nog iets over het hoofd? :)
Ik geloof dat het de oplossing is, ik zal morgen iets gaan maken dat dit doet. Tnx iig :> :)

Acties:
  • 0 Henk 'm!

  • SuperRembo
  • Registratie: Juni 2000
  • Laatst online: 20-08 14:36
Verwijderd schreef op 20 april 2004 @ 17:07:
@SuperRembo:
Hoe bedoel je dit? Dit gezien de fout (zie bovenaan deze post). Ik snap ook niet echt de bedoeling van moduleRows(vanwaar die dubbele 2? en waarom 3? die moet geen knop).
Vergeet m'n voorbeeld maar.
Tijdens het lezen van de modules is simpel bij te houden op welke regel een module komt. Daarvoor houd je de huidige regel voor links en rechts apart bij. Uiteindelijk weet je dan voor elke module op welke regel hij staat en je weet wat de laatste gevulde regels links en rechts zijn. Dan weet je ook of er een up en/of down knop op moet komen.

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
// Read modules
$rowLeft = 0;
$rowRight = 0;
foreach ($modules as $module) {
    switch ($module->alignment) {
        case 'left' :
            $module->row = ++$rowLeft;
        case 'right' :
            $module->row = ++$rowRight;
        case 'center' :
            $module->row = $rowLeft = $rowRight = max($rowLeft, $rowRight)+1;
    }
}

// Print modules
foreach ($modules as $module) {
    if ($module->row > 1) {
        PrintUpButton();
    );
    switch ($module->alignment) {
        case 'left' :
            if ($module->row < $rowLeft) {
                PrintDownButton();
            );
        case 'right' :
            if ($module->row < $rowRight) {
                PrintDownButton();
            );
        case 'center' :
            if ($module->row < max($rowLeft, $rowRight)) {
                PrintDownButton();
            );
    }
}

| Toen / Nu

Pagina: 1