Zur Navigation

Php Anpassung für ModRewrite

1 Holle

Hallo zusammen,
ich habe folgendes Problem:

Der php Code zum aufrufen dieser Links sieht so aus:

$pageString .= "<a href=\"$_SERVER[PHP_SELF]?$Qstring"."ItemNumber=$newStartIndex\"></a>&nbsp;&nbsp;&nbsp;&nbsp;";

$pageString .= "<a href=\"$_SERVER[PHP_SELF]?$Qstring"."ItemNumber=$tempStart\">$x</a>&nbsp;&nbsp;&nbsp;&nbsp;";

<a href=\"$_SERVER[PHP_SELF]?$Qstring"."ItemNumber=".($startNumber + $itemsPerPage)."\"></a>";


Resultat:
http://www.meinedomain.de/sport-tv.php?&ItemNumber=4
http://www.meinedomain.de/sport-tv.php?&ItemNumber=8

etc.



Nun habe ich folgendes in die .htaccess hinzugefügt:

RewriteRule sport-tv(.*)-(.*)\.php$ /sport-tv.php?=$1&ItemNumber=$2


So nun sind die Links unter :
www.meinedomain.de/sport-tv-4.php
www.meinedomain.de/sport-tv-8.php etc. aufrufbar.


Allerdings muß ich nun noch den php Code ändern, sprich die Links anpassen und da hapert es leider bei mir.

Wie krige ich die oberen drei zeilen dazu, daß diese in Form von: www.meinedomain.de/sport-tv-4.php etc.
ausgegebn werden?

LG Holle

07.09.2007 20:48

2 Jörg

Hallo Holle,

"$_SERVER[PHP_SELF]" repräsentier das aufgerufene Script, also sport-tv.php. Stattdessen möchtest du ja "sport-tv(.*)-(.*)\.php" verlinken. Die erste Variable steckt wohl in $Qstring - ist vorher noch aufgeführt, wie diese zusammengesetzt wird? Die zweite Variable steht jeweils hinter "ItemNumber=".

Die Links sollten dann so ausschauen:

$pageString .= "<a href=\"sport-tv$irgendwas-$newStartIndex.php\"></a>&nbsp;&nbsp;&nbsp;&nbsp;";

$pageString .= "<a href=\"sport-tv$irgendwas-$tempStart.php\">$x</a>&nbsp;&nbsp;&nbsp;&nbsp;";

<a href=\"sport-tv$irgendwas-".($startNumber + $itemsPerPage).".php\"></a>";

... wobei du halt noch $irgendwas aus $Qstring extrahieren musst...

07.09.2007 21:19 | geändert: 07.09.2007 21:21

3 Holle

Hallo Jörg,
so wie Du es beschrieben hast funktioniert es.

Was ich etwas blöd finde ist, daß www.meinedomain.de/sport-tv-4.php, meinedomain.de/sport-tv-8.php etc. aufrufbar ist - und leider nicht ...sport-tv-2, sport-tv-3 etc. (also nach der Seitenanzahl)
So wie ich es sehe sind die IntemNumber die Nachrichten als solche und werden dann auch für die Seitenzahl benannt.
Geht das ohne großartigen Aufwand auch einfacher?


<html>
<?php
$itemsPerPage = 4;
$numItems = "~~~NumberOfFeedItems~~~";

$onePage = 1;
$startNumber = 0;
if ($numItems > $itemsPerPage) {
  $onePage = 0;
  // Check for requested starting position
  if (isset($_REQUEST["ItemNumber"])) {
    $startNumber = $_REQUEST["ItemNumber"];
  }

  // Validate starting position
  if ($startNumber > $numItems) {
    $startNumber = 0;
  }
}

$pageString = "";
// Create the list of pages, if needed
if ($onePage == 0) {
  $Qparts = Array();
  $parts = explode("&", $_SERVER["QUERY_STRING"]);
  if (count($parts) > 0) {
    foreach ($parts as $value) {
      if (substr($value, 0, 10) != "ItemNumber") {
        $Qparts[] = $value;
      }
    }
    if (count($Qparts) == 0) {
      $Qstring = "";
    }
    elseif (count($Qparts) == 1) {
      $Qstring = $Qparts[0]."&amp;";
    } else {
      $Qstring = implode("&amp;", $Qparts)."&amp;";
    }
  }

  //
  // Previous Page
  $pageString = "<strong>";
  if ($startNumber > 0) {
    $newStartIndex = $startNumber - $itemsPerPage;
    if ($newStartIndex < 0) {
      $newStartIndex = 0;
    }
    //$pageString .= "<a href=\"$_SERVER[PHP_SELF]?$Qstring"."ItemNumber=$newStartIndex\"></a>&nbsp;&nbsp;&nbsp;&nbsp;";
    $pageString .= "<a href=\"sport-tv$irgendwas-$newStartIndex.php\"></a>&nbsp;&nbsp;&nbsp;&nbsp;";

  }


  //
  // The jump to page markers
  if ($numItems > $itemsPerPage) {
    $tempPages = (int)(($numItems / $itemsPerPage) + 1);
    $x = 1;
    if ($tempPages > 12) {
      // There are too many pages to fit across
      if ((($startNumber+1)/10) > 7) {
        $pageString .= "...&nbsp;&nbsp;&nbsp;&nbsp;";
        $x = 1 + (int)(($startNumber+1)/10) - 6;
      }
    }

    for ($y = 0; $x <= $tempPages; $x++, $y++) {
      $tempStart = ($itemsPerPage * ($x - 1));
      if (($tempStart <= $startNumber) && ($startNumber < ($tempStart + $itemsPerPage))) {
        $pageString .= "$x&nbsp;&nbsp;&nbsp;&nbsp;";
      } else {
        $pageString .= "<a href=\"sport-tv$irgendwas-$tempStart.php\">$x</a>&nbsp;&nbsp;&nbsp;&nbsp;";
      }
      if ($y >= 12) {
        $pageString .= "...&nbsp;&nbsp;&nbsp;&nbsp;";
        break;
      }
    }
  }

  //
  // Next Page
  if ($startNumber + $itemsPerPage <= $numItems) {
    $pageString .= "<a href=\"$_SERVER[PHP_SELF]?$Qstring"."ItemNumber=".($startNumber + $itemsPerPage)."\"></a>";
   // <a href=\"sport-tv$irgendwas-".($startNumber + $itemsPerPage).".php\"></a>";
  }
  $pageString .= "</strong>";
}

?>
  <head>
    <meta http-equiv="content-type" content="text/html;charset=utf-8">
    <title>~~~FeedTitle~~~</title>
  </head>
  <body>
    <h1>~~~FeedTitle~~~</h1>
    <h2>~~~FeedDescription~~~</h2>
<?php
echo "$pageString<br>\n";
$x = 0;
?>
    <hr>

    <table width="100%">
      ~~~BeginItemsRecord~~~
<?php
if ($onePage == 0) {
  if (($startNumber <= $x) && ($x < $startNumber+$itemsPerPage)) {
?>
      <tr><td>~~~ItemPubShortDate~~~ ~~~ItemPubShortTime~~~</td></tr>
      <tr><td><B><a href="~~~ItemLink~~~"><font color="#5A8FC3">~~~ItemTitle~~~</B></font></a></td></tr>
      <tr><td>~~~ItemDescription~~~</td></tr>
      <tr><td><hr></td></tr>
<?php
  }
  $x++;
}
?>
      ~~~EndItemsRecord~~~
    </table>
<?php
echo "$pageString<br>\n";
?>
  </body>
</html>
<BR><BR>

Ich habe mal den Code angehängt
Gruß Holle

08.09.2007 18:01

4 Jörg

Hallo Holle,

in dem Fall müsstest du IntemNumber auf den verlinkenden Seiten durch $itemsPerPage teilen und dies als Parameter in der URL übergeben und auf den verlinkten Seiten diesen Parameter wieder mit $itemsPerPage multiplizieren, um IntemNumber zu erhalten.

09.09.2007 14:55 | geändert: 09.09.2007 14:56

5 Holle

Hallo Jörg,
ich habe es jetzt so gemacht


for ($y = 0; $x <= $tempPages; $x++, $y++) {
    $tempStart = ($itemsPerPage * ($x - 1));
      

    $seitenzahl = ($x-1+6 / $itemsPerPage );

         
      if (($tempStart <= $startNumber) && ($startNumber < ($tempStart + $itemsPerPage))) {
        $pageString .= "$x&nbsp;&nbsp;&nbsp;&nbsp;";
      } else {
     // $pageString .= "<a href=\"$_SERVER[PHP_SELF]?$Qstring"."ItemNumber=$tempStart\">$x</a>&nbsp;&nbsp;&nbsp;&nbsp;";

        $pageString .= "<a href=\"sport-tv$irgendwas-$seitenzahl.php\">$seitenzahl</a>&nbsp;&nbsp;&nbsp;&nbsp;";
      }
      if ($y >= 12) {
        $pageString .= "...&nbsp;&nbsp;&nbsp;&nbsp;";
        break;

Jetzt stimmt zwar die Seitenzahl (sport-tv-1.php / sport-tv-2.php / sport-tv-3.php etc. , allerdings wiederholen sich nun die Einträge auf den jeweiligen Seiten!

10.09.2007 18:12

6 Jörg

allerdings wiederholen sich nun die Einträge auf den jeweiligen Seiten!

Hast du die Werte dort wieder zurückübersetzt, d.h. mit $itemsPerPage multipliziert? Au den verlinkten Seiten wird ja vermutlich nicht die Seitenzahl, sondern wie bisher die Variable ItemNumber benötigt, um die Einträge aus der Datenbank zu holen

10.09.2007 18:33 | geändert: 10.09.2007 18:34

7 Holle

Zitat von Jörg
allerdings wiederholen sich nun die Einträge auf den jeweiligen Seiten!

Hast du die Werte dort wieder zurückübersetzt, d.h. mit $itemsPerPage multipliziert? Au den verlinkten Seiten wird ja vermutlich nicht die Seitenzahl, sondern wie bisher die Variable ItemNumber benötigt, um die Einträge aus der Datenbank zu holen

Wo muß ich dann $seitenzahl * $itemsPerPage einsetzen?

10.09.2007 21:28

8 Jörg

Hm, ich seh grad, dass es ja dasselbe Script ist. Ganz oben wird die Variable aus der URL asugelsen, probier's mal so:

if (isset($_REQUEST["ItemNumber"])) {
   $startNumber = $_REQUEST["ItemNumber"] * $itemsPerPage;
 }

10.09.2007 21:38

9 Holle

Danke Jörg, so klappt es :)
Allerdings ist jetzt:

www.meinedomain.de/sport-tv-0.php >>> Seite 1
www.meinedomain.de/sport-tv-1.php >>> Seite 2
www.meinedomain.de/sport-tv-2.php >>> Seite 3

Wobei eigentlich z.B: sport-tv-1.php bzw. sport-tv.php auch Seite 1 sein sollte oder sport-tv-2.php Seite 2

Gruß Holle


11.09.2007 20:38

10 Holle

Zitat von Holle
Danke Jörg, so klappt es :)
Allerdings ist jetzt:

www.meinedomain.de/sport-tv-0.php >>> Seite 1
www.meinedomain.de/sport-tv-1.php >>> Seite 2
www.meinedomain.de/sport-tv-2.php >>> Seite 3

Wobei eigentlich z.B: sport-tv-1.php bzw. sport-tv.php auch Seite 1 sein sollte oder sport-tv-2.php Seite 2

Gruß Holle



$seitenzahl = ($x-1+6 / $itemsPerPage );

Ausgabe: Seite 1,2,3,4 etc.

Doch wie kriege ich nun das Script dazu, daß sport-tv-1.php auch die Seite 1 ist ... und nicht wie derzeit Seite 2?

Wäre über jede Hilfe sehr dankbar
Gruß Holle

13.09.2007 22:35