webForumDet fria alternativet

Lista inlägg bakifrån

11 svar · 576 visningar · startad av web00132

web00132Medlem sedan maj 2001797 inlägg
#1

Hej hej! Jag har en gästbok med en pagingfunktion som listar inläggen, från en textfil, uppifrån och ner. Då kommer det första inlägget överst. Jag vill ju ha det senast inlagda inlägget överst på min webbsida. Hur fixa?

<?
function getContent($filename)
{ 
	$content = file($filename);
	return $content;
}
?>
<?
/*
    En funktion som ger sidlänkar i anslutning till utskrift från
    textfil eller databas.
    $page är vilken sida som är den aktuella.
    $pageNumbers är antal sidor som utskriften är uppdelad på.
    $numLinks är antal sidlänkar som ska visas.
    $align är antingen 'left' eller 'right'. Pagingen justerad 
    höger eller vänster.
    De variabler som finns i querystringen flyttas med 
    till nya sidor.
*/
function pagingList($page, $pageNumbers, $numLinks, $align)
{
    global $HTTP_SERVER_VARS, $HTTP_GET_VARS;
    
    $file = $HTTP_SERVER_VARS['PHP_SELF'];
    $getvar = $HTTP_SERVER_VARS['QUERY_STRING'];
    $search = "/(^page=\d*&*|&page=\d*)/i";
    $getvar = preg_replace($search, "", $getvar);
    if ($getvar != "") $getvar = "&".$getvar;
    
    if ($pageNumbers > $numLinks){
        $startLink = $page - floor($numLinks/2);
        if ($startLink >($pageNumbers - $numLinks +1)){
            $startLink = $pageNumbers - $numLinks +1;
        }
    }else $startLink = 1;
    if ($startLink<1) $startLink = 1; 
    $stopLink = $startLink + $numLinks -1;
    if ($stopLink>$pageNumbers) $stopLink=$pageNumbers;

    echo "<div class=\"paging\" style=\"text-align:$align\">\n";
    if ($page>1){
         $pageback = $page-1;
         echo "<a href=\"$file?page=$pageback$getvar\" class=\"paging\" ";
         echo "title=\"Föregående sida\"><b>Föregående</b></a>";

// Om jag någonsin skulle vilja ha siffror o skit, ta bort de 3 ovanstående raderna o avkommentera de nedan...
//         echo "<a href=\"$file?page=1$getvar\" class=\"paging\" ";
//         echo "title=\"F&ouml;rsta sidan\">&laquo;</a>";
    } else echo "<span class=\"pagingDim\"><!-- nothing --></span>";

// ...och avkommentera de 15 raderna nedan...
    //if ($startLink > 1){
    //    echo " ... ";
    //} else echo " -";
    //for ($i=$startLink; $i<=$stopLink; $i++){
    //    if ($i != $page){
    //        echo " <a href=\"$file?page=$i$getvar\" ";
    //        echo "class=\"paging\">$i</a> ";
    //    } else {
    //      echo " <span class=\"pagingDim\">( $i )</span> ";
    //    }
    //    if ($i<$stopLink) echo "-";
    //} 
    //if ($stopLink < $pageNumbers){
    //    echo " ... ";
    //} else echo "- ";
    if ($page<$pageNumbers){
         $pageforward = $page+1;
         echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
         echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
         echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
         echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
         echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
         echo "<a href=\"$file?page=$pageforward$getvar\" class=\"paging\" ";
         echo "title=\"Nästa sida\"><b>Nästa</b></a>";

// ...och ta bort de 3 ovanstående raderna o avkommentera de nedan
        //echo "<a href=\"$file?page=$pageNumbers$getvar\" ";
        //echo "class=\"paging\" ";
        //echo "title=\"Sista sidan\">&raquo;</a>\n";
    } else echo "<span class=\"pagingDim\"><!-- nothing --></span>\n";
    echo "</div>";

}

?>
<? 
// Hämtar innehållet till en tvådimensionell array.

$innehall = getContent("guestbook/guestshadow"); 

// Här börjar paging
$inlaggPerSida = 15; // Välj antal inlägg per sida, minst 1 
$antalPagLankar = 1; // Välj max antal visade paginglänkar 

$pageNumbers = ceil(sizeof($innehall)/$inlaggPerSida); 

if (isset($HTTP_GET_VARS["page"]))
{
	$page = $HTTP_GET_VARS["page"];
} else {
	$page = 1;
}
if ($page > $pageNumbers) { $page = $pageNumbers; }
if ($page < 1) { $page = 1; }

$start = ($page-1) * $inlaggPerSida; 
$stopp = $start + $inlaggPerSida; 
if ($stopp>sizeof($innehall)) { $stopp=sizeof($innehall); }

// Här slutar paging. $start och $stopp används vid hämtning

// här börjar listning av inlägg

for($i=$start; $i<$stopp; $i++)
{
$content = file("guestbook/guestshadow");
$content[$i] = explode("	", rtrim($content[$i]));
$a = $content[$i][0];
$b = $content[$i][1];
$c = $content[$i][2];
$d = $content[$i][3];
$e = $content[$i][4];
print "<tr><td height='1'></td></tr>";
print "<tr><td align='left'><hr width='200' color='white' noshade><br /><br /><b>";
if ($d != ""){print "<a href='mailto:".$d."' alt='[ " . $d . " ]'>";}
print stripslashes($a);
if ($d!=""){print "</a>";}
print "</b></td></tr><tr><td class='datum'>";
print date("Y-m-d -- H:i:s",$c);
print "<br /><br /></td></tr><tr><td><font color='white'>";
print stripslashes($b);
print "</font><br /><br /></td></tr>";
if ($e == "\n" || $e == "http://\n" || $e == "http:///\n" || $e == "" || $e == "http://" || $e == "http:///")
{
} else {
	print "<tr><td>";
	print "<a href='".$e."' target='new' alt='[ " . $e . " ]'>".$a."'s hemsida</a>";
	print "</td></tr>";
}
}

// Här presenteras pagingen

print "<tr><td height='40'></td></tr><tr><td>";

if ($pageNumbers > 1) 
pagingList($page, $pageNumbers, $antalPagLankar, "left"); 

print "</td></tr>";
// Här slutar presentationen

?>
SPiNMedlem sedan mars 20007 896 inlägg
#2

Byt ut:

for($i=$start; $i<$stopp; $i++)

Mot:

for( $i = $stopp; $i >= $start; $i-- )

Då borde det fungera.

web00132Medlem sedan maj 2001797 inlägg
#3

Ja, det funka ju bra. Tack ska du ha! Ett problem bara, nu dök det upp en rad överst i g-boken där det står: 1970-01-01 -- 01:00:00. Hur kommer det sig?

SPiNMedlem sedan mars 20007 896 inlägg
#4

Ja, du. Det var ju lite märkligt. Finns den raden med längst ned i textfilen?

web00132Medlem sedan maj 2001797 inlägg
#5

Tänkte på det också så jag tog bort den raden. Men den borde ju i så fall ha visats när man listar åt andra hållet också. Klurigt.

web00132Medlem sedan maj 2001797 inlägg
#6

Jag gav upp och tog bort den raden med en enkel if-sats. Men andra problem dök upp. Pagingen har spårat ur.
Jag har just nu 11 inlägg och jag vill lista max 5 inlägg på varje sida. På första sidan skrivs de ut så här:

sjätte inlägget
femte ''
fjärde ''
tredje ''
andra ''
första ''

På andra sidan:

elfte inlägget
tionde ''
nionde ''
åttonde ''
sjunde ''
sjätte ''

På tredje sidan:

elfte inlägget

Det skrivs alltså ut sex inlägg på varje sida fast att jag har ändrat variabeln $inlaggpersida till 5. Dessutom vill jag ha inlägg nr 1 sist på tredje sidan och alltså inte sist på första sidan.

Någon som förstår och kan hjälpa mig?

Så här ser min kod ut nu:

<?
function getContent($filename)
{ 
	$content = file($filename);
	return $content;
}
?><?

/*
    En funktion som ger sidlänkar i anslutning till utskrift från
    textfil eller databas.
    $page är vilken sida som är den aktuella.
    $pageNumbers är antal sidor som utskriften är uppdelad på.
    $numLinks är antal sidlänkar som ska visas.
    $align är antingen 'left' eller 'right'. Pagingen justerad
    höger eller vänster.
    De variabler som finns i querystringen flyttas med
    till nya sidor.
*/
function pagingList($page, $pageNumbers, $numLinks, $align)
{
    global $HTTP_SERVER_VARS, $HTTP_GET_VARS;

    $file = $HTTP_SERVER_VARS['PHP_SELF'];
    $getvar = $HTTP_SERVER_VARS['QUERY_STRING'];
    $search = "/(^page=\d*&*|&page=\d*)/i";
    $getvar = preg_replace($search, "", $getvar);
    if ($getvar != "") $getvar = "&".$getvar;

    if ($pageNumbers > $numLinks){
        $startLink = $page - floor($numLinks/2);
        if ($startLink >($pageNumbers - $numLinks +1)){
            $startLink = $pageNumbers - $numLinks +1;
        }
    }else $startLink = 1;
    if ($startLink<1) $startLink = 1;
    $stopLink = $startLink + $numLinks -1;
    if ($stopLink>$pageNumbers) $stopLink=$pageNumbers;

    echo "<div class=\"paging\" style=\"text-align:$align\">\n";
    if ($page>1){
         echo "<a href=\"$file?page=1$getvar\" class=\"paging\" ";
         echo "title=\"F&ouml;rsta sidan\">Första sidan</a> - ";
    } else echo "<span class=\"pagingDim\"><!-- nothing --></span>";

    if ($startLink > 1){
        echo " ... ";
    }
    for ($i=$startLink; $i<=$stopLink; $i++){
        if ($i != $page){
            echo " <a href=\"$file?page=$i$getvar\" ";
            echo "class=\"paging\">$i</a> ";
        } else {
          echo " <span class=\"pagingDim\">( $i )</span> ";
        }
        if ($i<$stopLink) echo "-";
    }
    if ($stopLink < $pageNumbers){
        echo " ... ";
    }
    if ($page<$pageNumbers){

        echo " - <a href=\"$file?page=$pageNumbers$getvar\" ";
        echo "class=\"paging\" ";
        echo "title=\"Sista sidan\">Sista sidan</a>\n";
        // &raquo;
    } else echo "<span class=\"pagingDim\"><!-- nothing --></span>\n";
    echo "</div>";

}

?>
<?
// Hämtar innehållet till en tvådimensionell array.
$innehall = getContent("guestbook/guestshadow");

// Här börjar paging
$inlaggPerSida = 5; // Välj antal inlägg per sida, minst 1
$antalPagLankar = 9; // Välj max antal visade paginglänkar

$pageNumbers = ceil(sizeof($innehall)/$inlaggPerSida);
if (isset($HTTP_GET_VARS["page"]))
{
	$page = $HTTP_GET_VARS["page"];
} else {
	$page = 1;
}
if ($page > $pageNumbers) { $page = $pageNumbers; }
if ($page < 1) { $page = 1; }
$start = ($page-1) * $inlaggPerSida;
$stopp = $start + $inlaggPerSida;
if ($stopp>sizeof($innehall)) { $stopp=sizeof($innehall); }
// Här slutar paging. $start och $stopp används vid hämtning

// här börjar listning av inlägg

// for($i=$start; $i<$stopp; $i++)
for($i=$stopp; $i>=$start; $i--)
{
	$content = file("guestbook/guestshadow");
	$content[$i] = explode("	", rtrim($content[$i]));
	$a = $content[$i][0];
	$b = $content[$i][1];
	$c = $content[$i][2];
	$d = $content[$i][3];
	$e = $content[$i][4];
	if ($a != "")
	{
		print "<tr><td height='1'></td></tr>";
		print "<tr><td align='left'><font size='2' color='#ffffff' face='verdana,tahoma,arial'><hr width='200' color='white' noshade><br /><br /><b>";
		if ($d != ""){print "<a href='mailto:".$d."' alt='[ " . $d . " ]'>";}
		print stripslashes($a);
		if ($d!=""){print "</a>";}
		print "</b></font></td></tr><tr><td class='datum'>";
		print date("Y-m-d -- H:i:s",$c);
		print "<br /><br /></td></tr><tr><td><font size='2' color='#ffffff' face='verdana,tahoma,arial'>";
		print stripslashes($b);
		print "</font><br /><br /></td></tr>";
		if ($e == "\n" || $e == "http://\n" || $e == "http:///\n" || $e == "" || $e == "http://" || $e == "http:///")
		{
		} else {
			print "<tr><td><font size='2' color='#ffffff' face='verdana,tahoma,arial'>";
			print "<a href='".$e."' target='new' alt='[ " . $e . " ]'>".$a."'s hemsida</a>";
			print "</font></td></tr>";
		}
	}
}

// Här presenteras pagingen
print "<tr><td height='40'></td></tr><tr><td colspan='3' align='right'>";
if ($pageNumbers > 1)
pagingList($page, $pageNumbers, $antalPagLankar, "left");

print "<br /></td></tr>";
// Här slutar presentationen
?>
MatteMedlem sedan aug. 20002 975 inlägg
#7

Enklast vore väl att vända på arrayen när du hämtat den:

function getContent($filename)
{ 
	$content = file($filename);
	$content = array_reverse($content);
	return $content;
}
web00132Medlem sedan maj 2001797 inlägg
#8

Tack ska du ha, men det fungerade tyvärr inte. Fler förslag?
Börjar bli frustrerad, kan inte fatta :l

MatteMedlem sedan aug. 20002 975 inlägg
#9

Vad jag menade var utifrån ditt ursprungliga skript.

Det fungerade ju om du körde dom rakt upp och ner.
Om man då spegelvänder arrayen, så borde du ju få det bakifrån.

En annan variant är att spara först i filen istället.

web00132Medlem sedan maj 2001797 inlägg
#10

Hmm, jag får det inte att funka hur jag än gör. Min PHP-version kanske är för gammal för array_reverse? Det står 4.0.4pl1 om jag kör phpversion().

Hur gör man då för att spara först? Funktion?

MatteMedlem sedan aug. 20002 975 inlägg
#11

För att spara till början av en textfil

$filename = "textfil.txt";

$ny_rad = "Ny rad i textfilen";

// Öppnar filen
$fp = fopen($filename, "r+");

// Läser in filens innehåll i en variabel
$content = fread($fp, filesize($filename));

// Spolar tillbaka till början av filen
rewind($fp);

// Skriver ny rad till fileb
fwrite($fp, $nyrad."\n");  // \r\n i Windows

// Skriver det ursprungliga innehållet till filen
fwrite($fp, $content);

fclose($fp);
web00132Medlem sedan maj 2001797 inlägg
#12

Nu fungerar det perfekt! Tack ska du ha! :bire

139 ms totalt · 3 externa anrop · v20260731065814-full.fb544a5a
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)