PHP-delar sökes!

Tråden skapades och har fått 7 svar. Det senaste inlägget skrevs .
1
  • Medlem
  • Uppsala
  • 2007-09-16 19:32

Min bror eftersöker detta:

"1. En riktigt enkel paging funktion där man kan bestämma antal resultat per sida, första sidan blir automatiskt page=1 och längst ner ser man alla sidor 1 2 3 osv

2. En bra, enkel och säker kommentarfunktion som har något slags skydd mot spam.

Allt PHP såklart."

Hjälp tack.

http://www.phpportalen.net kanske har sådana färdiga script...

Jag råkade hitta detta när jag googlade lite, för jag blev nyfiken. Jag är ingen PHP-expert, jag utvecklar i Lasso, men finns detta alltså inte inbyggt, som i Lasso?

http://www.weberdev.com/ViewArticle/466

  • Oregistrerad
  • 2007-09-16 22:49
Ursprungligen av Taz_1999:

Jag råkade hitta detta när jag googlade lite, för jag blev nyfiken. Jag är ingen PHP-expert, jag utvecklar i Lasso, men finns detta alltså inte inbyggt, som i Lasso?

http://www.weberdev.com/ViewArticle/466

Till skillnad från lasso så är php en utvecklarmiljö, inte ett färdigt paket. Ung. som att säga att det borde finnas inbyggt i c++ eller asambler...

MySQL är också en databasmotor, och hhar ingent med php o göra.

Nej, det finns inte inbyggt i PHP. Använder man någon slags framework när man kodar så finns det dock nästan alltid inbyggt där.

Ah, du behöver inte lära mig vad Lasso är och inte är, det vet jag.

Lasso är också en utvecklingsmiljö (alltså inte ett färdigt paket), men i den har man alltså gett utvecklarna kommandon att använda för att göra bläddringsstrukturer, dessa saknas alltså i PHP och man får skriva dem själv, eller söka fram frameworks eller scriptarkiv där de finns och kopiera och använda, som liknar de i länken jag hade med ovan.

Nu hade jag inte tänkt att kidnappa denna tråd med en Lasso VS PHP-diskussion (även om jag tycker sådana är jättekul som synes av mina tidigare inlägg i ämnet här på 99.se), så jag avslutar bara med att skriva ett exempel på hur man gör länkar till föregående sida, sid 1, sid 2, sid 3, sid 4 och nästa sida i Lasso 8. Läs mera här [Link_NextRecordURL] och här Lasso documentation.

Kod

Denna kod gör en sökning i en databas och visar upp resultatet (i detta exempe

[Inline: (Action_Params),
-Search,
-Database='Contacts',
-Table='People',
-KeyField='ID',
-MaxRecords=4]
<p>[Found_Count] records were found, showing [Shown_Count]
records from [Shown_First] to [Shown_Last].
[Records]
<br>[Field: 'First_Name'] [Field: 'Last_Name']
[/Records]
[Link_SetFormat: -NoClassic]
[Variable: 'Count' = 0]
[While: $Count < (Found_Count)]
<br><a href="[Link_CurrentActionURL: -SkipRecords=$Count]">
Page [Loop_Count]
</a>
[Variable: 'Count' = $Count + (MaxRecords_Value)]
[/While]
[/Inline]

Resultat
Här är resultatet av ovanstående kod:

<p>16 records were found, showing 4 records from 1 to 4.
<br>Jane Doe
<br>John Person
<br>Jane Person
<br>John Doe
<br>Page 1
<br>Page 2
<br>Page 3
<br>Page 4

(I detta exempel är inte föregående sida och nästa sida med, dessa kodas så här:

[Link_SetFormat: -NoClassic]
[Link_FirstGroup] <br>First [MaxRecords_Value] Records [/Link_FirstGroup]
[Link_PrevGroup] <br>Previous [MaxRecords_Value] Records [/Link_PrevGroup]
[Link_NextGroup] <br>Next [MaxRecords_Value] Records [/Link_NextGroup]
[Link_LastGroup] <br>Last [MaxRecords_Value] Records [/Link_LastGroup]

och visas sålunda:

<br>Next 4 Records
<br>Last 4 Records

(Om det finns föregående och första så visas dessa också).

Senast redigerat 2007-09-16 23:27
  • Medlem
  • Göteborg
  • 2007-09-17 00:06

Det första du efterfrågar är ju egentligen ganska enkelt. Sidnumret bestäms med GET-variabeln "page". Skapa en variabel som innehåller antalet databasposter du vill visa per sida:

$antalPoster = 10;

Du skickar sidnumret med en GET-variabel som sagt. Skapa en funktion där du skickar med antalPoster-variabeln, samt GET-variabeln med sidnumret;

function visaSida($sidnummer, $antalPoster) {
   $sqlQuery = "SELECT blaha FROM Blabla WHERE bla = bla LIMIT " . $antalPoster - ($sidnummer * $antalPoster) . ", " . $sidnummer * $antalPoster;
   
   //Gör utfrågningen osv.
}

För att längst ner göra en lista med alla sidor kan man köra en COUNT i tabellen det gäller, och dividera det antalet man får ut med $antalPoster, så vet du hur många sidor det finns. Sen är det bara att skapa en lista med länkar till de olika sidnumrena, och eftersom det var en GET-variabel så blir varje länk nåt i stil med "http://hoppsan.com/hejsan.php?page=1".

Där har du det

Ursprungligen av xevve:

Det första du efterfrågar är ju egentligen ganska enkelt. Sidnumret bestäms med GET-variabeln "page". Skapa en variabel som innehåller antalet databasposter du vill visa per sida:

$antalPoster = 10;

Du skickar sidnumret med en GET-variabel som sagt. Skapa en funktion där du skickar med antalPoster-variabeln, samt GET-variabeln med sidnumret;

function visaSida($sidnummer, $antalPoster) {
   $sqlQuery = "SELECT blaha FROM Blabla WHERE bla = bla LIMIT " . $antalPoster - ($sidnummer * $antalPoster) . ", " . $sidnummer * $antalPoster;
   
   //Gör utfrågningen osv.
}

För att längst ner göra en lista med alla sidor kan man köra en COUNT i tabellen det gäller, och dividera det antalet man får ut med $antalPoster, så vet du hur många sidor det finns. Sen är det bara att skapa en lista med länkar till de olika sidnumrena, och eftersom det var en GET-variabel så blir varje länk nåt i stil med "http://hoppsan.com/hejsan.php?page=1".

Där har du det

Dock vill man ju oftast även ta det totala antalet poster, så man kan lägga en länk till sista sidan av listan.

Det är inte för inte som det finns pager-klasser i massor med frameworks

För att fortsätta trenden med exempel så tänkte jag posta den biten som använder pagern ur citatsidan jag skrev tidigare ikväll :). Förhoppningsvis kan det här kanske inspirera någon till att skriva en egen pagerklass. Lite modifierad dock för att demonstrera ett par grejer, och inte ha med massor med kod som inte demonstrerar något nytt.

I controllern:

$pager = new sfDoctrinePager('Quote', $this->getRequestParameter('perpage', 10));
$pager->getQuery()->orderby('Quote.id DESC');
$pager->setPage($this->getRequestParameter('page',1));
$pager->init();

$this->pager = $pager;

I viewen:

<?php foreach ($pager->getResults() as $quote): ?>
<div>
      <h2><?php echo link_to($quote->content, 'quote/show?id='.$quote->id); ?></h2>
      <p>By <?php echo $quote->author; ?></p>
</div>
<?php endforeach; ?>


  <?php if ($pager->haveToPaginate()): ?>
    <?php echo link_to('«', 'quote/list?page=1') ?>
    <?php echo link_to('<', 'quote/list?page='.$pager->getPreviousPage()) ?>

    <?php foreach ($pager->getLinks() as $page): ?>
      <?php echo link_to_unless($page == $pager->getPage(), $page, 'quote/list?page='.$page) ?>
      <?php echo ($page != $pager->getCurrentMaxLink()) ? '-' : '' ?>
    <?php endforeach; ?>

    <?php echo link_to('>', 'quote/list?page='.$pager->getNextPage()) ?>
    <?php echo link_to('»', 'quote/list?page='.$pager->getLastPage()) ?>
  <?php endif ?>
1
Bevaka tråden