Avatar billede supermand69 Nybegynder
19. februar 2006 - 13:58 Der er 20 kommentarer og
1 løsning

lave uddrag af sidevisninger

Hej, jeg sidder og roder med noget kode til script som skal lave et uddrag af sidevisninger

eks.
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10
=>
1 | 2 | 3 | 4 | 5 | ... | 9 | 10

I stedet for en næsten uendelig lang liste med siderne skal der laves et uddrag så det kommer til at se ud som vist ovenover. Jeg synes bare ikke helt jeg kan få det til at virke!?

Her er så halvdelen af min kode, altså den del som skal vise fra den viste side og fremefter f.eks. fra 4 som er den viste side og fremefter

Jeg vil tro at det er den bedste måde at lave det på, da man jo skal tælle udfra den pågældende side som vises

http://clark.avansis.dk/test/extracts_from/
Avatar billede supermand69 Nybegynder
19. februar 2006 - 14:00 #1
så snart man ændrer $cur_page til et højere tal går det kludder i visningerne :(
Avatar billede nielle Nybegynder
19. februar 2006 - 15:38 #2
Måske noget i denne stil?

$cur_page = 7;
$num_page = 16;

$border1 = 5;
$border2 = 2;

// Beregn start- og slutsiden:
$from_page = $curr_page - $border1;
$to_page = $curr_page + $border2;

// Hvis startsiden er for lille, skubbes intervallet:
if ($form_page <= 0)
{
    $diff_page = 1 - $from_page;
    $form_page += $diff_page;
    $to_page += $diff_page;
}

// Hvis slutsiden er for stor, rundes den ned:
if ($to_page > $num_page)
    $to_page = $num_page;

// Udskriv intervallet:

if ($form_page > 1) echo "... ";

$forst = true;
for ($page = $from_page; $page <= $to_page; $page++)
{
    if (!$first) echo "|";
    $first = false;

    if ($page == $cur_page)
        echo "<b>" . $page . "</b>";
    else
        $echo $page;
}

if ($to_page < $num_page) echo " ...";
Avatar billede supermand69 Nybegynder
19. februar 2006 - 17:22 #3
hvordan vil du få det til at virke? :)
Avatar billede nielle Nybegynder
19. februar 2006 - 17:36 #4
Hvad mener du? Uddyb lidt.
Avatar billede supermand69 Nybegynder
19. februar 2006 - 17:46 #5
har du selv testet det?
Avatar billede nielle Nybegynder
19. februar 2006 - 19:46 #6
Jae, der var jo nogle småfejl hist og her.

Denne er afprøvet:

<?
$cur_page = 7;
$num_page = 16;

$border1 = 5;
$border2 = 2;

// Beregn start- og slutsiden:
$from_page = $cur_page - $border1;
$to_page = $cur_page + $border2;

// Hvis startsiden er for lille, skubbes intervallet:
if ($from_page <= 0)
{
    $diff_page = 1 - $from_page;

    $from_page += $diff_page;
    $to_page += $diff_page;
}

// Hvis slutsiden er for stor, rundes den ned:
if ($to_page > $num_page)
    $to_page = $num_page;

// Udskriv intervallet:

if ($from_page > 1) echo "... ";

for ($page = $from_page; $page <= $to_page; $page++)
{
    if ($page != $from_page) echo "|";
    echo ($page == $cur_page) ? "<b>$page</b>" : $page;
}

if ($to_page < $num_page) echo " ...";
?>
Avatar billede supermand69 Nybegynder
19. februar 2006 - 20:25 #7
den virker ikke
Avatar billede nielle Nybegynder
19. februar 2006 - 20:44 #8
Kan du ikke være lidt mere specifik end det: Hvad sker der? Hvad sker der ikke? Hvad forventede du at der skulle ske? For du nogen fejlbeskeder? Hvilke?
Avatar billede supermand69 Nybegynder
20. februar 2006 - 19:50 #9
jeg kan lige komme med nogle eksempler :)

<> angiver den viste side

<1> | 2 | 3 | 4 | 5 | 6 | ... | 11 | 12

1 | 2 | 3 | 4 | 5 | <6> | 7 | 8 | 9 | 10 | 11 | 12

1 | 2 | ... | 7 | 8 | 9 | 10 | 11 | <12>

1 | 2 | ... | 4 | 5 | 6 | 7 | 8 | <9> | 10 | 11 | 12 | 13 | 14 | ... | 17 | 18
Avatar billede nielle Nybegynder
20. februar 2006 - 20:27 #10
Nåe, men det er da vist heller ikke helt det samme som at sige at det ikke virker. Så kunne du jo bare have fortalt at det var en anden effekt du var ude efter.

Kigger på det.
Avatar billede nielle Nybegynder
20. februar 2006 - 21:36 #11
<?
$cur_page = 9;
$num_page = 18;

$border1 = 5;
$border2 = 2;

$cur_page_lower = $cur_page - $border1;
if ($cur_page_lower < 1) $cur_page_lower = 1;

$cur_page_upper = $cur_page + $border1;
if ($cur_page_upper > $num_page) $cur_page_upper = $num_page;

$elipsis_mode = false;
for ($page=1; $page<=$num_page; $page++)
{
    $show = false;
    if ($page <= $border2)
        $show = true;
    else if ($cur_page_lower <= $page && $page <=$cur_page_upper)
        $show = true;
    else if ($num_page - $border2 < $page)
        $show = true;

    if ($show)
    {
        echo ($page == $cur_page) ? "<b>$page</b>" : $page;
        if ($page < $num_page) echo " | ";
        $elipsis_mode = false;
    }
    else if (!$elipsis_mode)
    {
        echo "... | ";
        $elipsis_mode = true;
    }
}
?>
Avatar billede supermand69 Nybegynder
20. februar 2006 - 21:44 #12
sorry... havde lige så mange ting at se til

uhhh, det ligner noget det her :) tak skal du have..

lav et svar
Avatar billede supermand69 Nybegynder
20. februar 2006 - 21:57 #13
hov, men ikke for at være besværlig.. jeg har rent faktisk lige en lille tilføjelse til scriptet - hvis det altså er noget du kan finde ud af at lave :p (- og ellers er det fint nok som det er)

jeg ændrer lige de 2 variabler for at gøre det lidt nemmere at overskue
$border1 = 3;
$border2 = 1;

når der ikke er nogle sider foran eller bagved den viste side skal det samlede resulatat af $border1 stadig være der.. altså ved den første kommer der så 6 synlige sider foran side 1

eks.
<1> | 2 | 3 | 4 | 5 | 6 | 7 | ... | 12

1 | 2 | <3> | 4 | 5 | 6 | 7 | ... | 12

1 | ... | 3 | 4 | 5 | <6> | 7 | 8 | 9 | ... | 12
Avatar billede nielle Nybegynder
20. februar 2006 - 22:16 #14
Sgo :^)

<?
$cur_page = 6;
$num_page = 12;

$border1 = 3;
$border2 = 1;

$cur_page_lower = $cur_page - $border1;
$cur_page_upper = $cur_page + $border1;

while ($cur_page_lower < 1)
{
    $cur_page_lower++;
    $cur_page_upper++;
}

while ($cur_page_upper > $num_page)
{
    $cur_page_lower--;
    $cur_page_upper--;
}

if ($cur_page_lower < 1) $cur_page_lower = 1;

$elipsis_mode = false;
for ($page=1; $page<=$num_page; $page++)
{
    $show = false;
    if ($page <= $border2)
        $show = true;
    else if ($cur_page_lower <= $page && $page <=$cur_page_upper)
        $show = true;
    else if ($num_page - $border2 < $page)
        $show = true;

    if ($show)
    {
        echo ($page == $cur_page) ? "<b>$page</b>" : $page;
        if ($page < $num_page) echo " | ";
        $elipsis_mode = false;
    }
    else if (!$elipsis_mode)
    {
        echo "... | ";
        $elipsis_mode = true;
    }
}
?>
Avatar billede nielle Nybegynder
20. februar 2006 - 22:16 #15
... og et svar :^)
Avatar billede supermand69 Nybegynder
20. februar 2006 - 22:17 #16
måske man så skulle ændre så $border bliver angivet samlet.. altså som 6 eller 3? ved ikke hvad der er nemmest at gøre? :)
Avatar billede supermand69 Nybegynder
20. februar 2006 - 22:17 #17
hov.. du var hurtigst ;)
Avatar billede nielle Nybegynder
20. februar 2006 - 22:22 #18
*G*
Avatar billede supermand69 Nybegynder
24. februar 2006 - 15:25 #19
jeg har så lige tilladt mig at reducere og moderere lidt i din kode :)

$cur_page = 8;
$num_page = 12;

$border1 = 3;
$border2 = 1;

$page_lower = $cur_page - $border1;
$page_upper = $cur_page + $border1;

while($page_lower < 1)
{
    $page_lower++;
    $page_upper++;
}

while($page_upper > $num_page)
{
    $page_lower--;
    $page_upper--;
}

for($page = 1; $page <= $num_page; $page++)
{
    if(($page <= $border2 || $page > $num_page - $border2) || ($page >= $page_lower && $page <= $page_upper))
    {
        $border_on = '';
       
        if($page == $cur_page) $page_overview_arr[] = '<b>'.$page.'</b>';
        else $page_overview_arr[] = $page;
    }
    else
    {
        if(!$border_on) $page_overview_arr[] = '...';
       
        $border_on = 1;
    }
}

echo implode(' | ', $page_overview_arr);
Avatar billede nielle Nybegynder
24. februar 2006 - 17:31 #20
Det er du da velkommen til.

Mens at du er ved det, kan vi jo lige ændre:

if($page == $cur_page) $page_overview_arr[] = '<b>'.$page.'</b>';
    else $page_overview_arr[] = $page;

- til:

$page_overview_arr[] = ($page == $cur_page) ? '<b>'.$page.'</b>' : $page;
Avatar billede supermand69 Nybegynder
24. februar 2006 - 20:48 #21
årkarj.. mere reducering ;)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester