Blätterfunktion mit einem Array
Tolwin
- php
Hallo Forum,
ich habe ein Problem mit einer Blätterfunktion durch ein Array.
Da ich die Daten aus einer Datenbank ziehen muss und im Anschluss
mit Daten aus einem Flatfile verbinde, ist der Einsatz von LIMIT
nicht möglich. Die verquickten Daten werden dann in diesem Array
vorgehalten. Es handelt sich um News die zu unterschiedlichen Kategorien zugeordnet sind. Mit einem Dropdown habe ich die Auswahl zwischen bspw. Alle News anzeigen - dis gibt einfach das komplette Array nach Datum sortiert aus. Wenn ich nun aber eine spezielle Kategorie auswähle, sollen nur news dieser angezeigt werden. Hierzu
erstelle ich ein weiteres Array mit den der Kategorie entsprechenden Inhalten welches ich im Anschluss ausgeben lasse.
Meine Idee war nun anhand des Array Indexes und einem Start und Stop-Wert für die Blätterfunktion einen Seitenindex zu generieren. Nach dem Blättern gelange ich aber immer wieder auf die Ausgangsposition "Alle Anzeigen" da die Kategorie verloren geht. Was hierzu sicher beiträgt ist das Problem dass ich mit PHPSELF arbeite und hierzu $_POST verwenden muss, der Seitenindex aber aus dynamisch generierten Links besteht und $_GET benötigt. Wie kann ich es schaffen zu jeder Kategorie den passenden Seiten-Index zu erhalten?
Per Google habe ich schon ein paar Ideen finden , aber nicht sinnvoll verweden können. So sieht der wesentliche Teil meines Quellcodes aus (exklusive HTML-Part)
$counting = 0;
$array_result = array();
if($cat_select != 0)
{
foreach($result_array as $db_key => $result)
{
$datei = "/data/www/newsfsuche/".$result->news_nummer.".php";
$result_array[$db_key]->path = $kategorien[$result->category_id]['path'];
$result_array[$db_key]->sort = $kategorien[$result->category_id]['sort'];
if((integer)$result_array[$db_key]->sort == (integer)$cat_select)
{
$counting++;
array_push($array_result, $result_array[$db_key]);
}
}
$anz = $counting;
if($offset + 1 >= $anz-$step)
{
$offset = $anz - $step;
$diff = $anz % $diff;
$disabled[next] = TRUE;
}
if (!$offset || $offset<0)
{
$offset = 0;
$disabled[prev] = TRUE;
}
echo "OFFSET = $offset .... DIFF = $diff";
for($i = $offset; $i <= $diff; $i++)
{
echo "<tr><td valign="top" width="60" style="font-size:11px;font_weight:bold;background-color:#FFFFFF"><b>" .$array_result[$i]->date_german. "</b></td>";
echo "<td valign="top" width="500" style="font-size:11px;lighter:lighter;background-color:#FFFFFF;color:#000000;vertical-align:middle;height:18px;">" .$array_result[$i]->path. "</td></tr>";
echo "<tr><td></td><td valign="top" style="font-size:11px;background-color:#FFFFFF;color:#000000;"><a href="http://" .$server. "/admin/aw/newstool/suche/newsfsuche/" .basename($datei). "" target="_new">" .$array_result[$i]->titel. "</a></td>";
echo "<tr><td colspan="3"><hr color="#000000" size="1"></td></tr>";
}
echo "gezaehlt wurden $counting!";
}
else
{
foreach($result_array as $db_key => $result)
{
$datei = "/data/www/pvk/docs/admin/aw/newstool/suche/newsfsuche/".$result->news_nummer.".php";
$result_array[$db_key]->path = $kategorien[$result->category_id]['path'];
$result_array[$db_key]->sort = $kategorien[$result->category_id]['sort'];
if($cat_select == 0 || !isset($cat_select))
{
$counting++;
array_push($array_result, $result_array[$db_key]);
}
}
for($i = 0; $i < $counting; $i++)
{
echo "<tr><td valign="top" width="60" style="font-size:11px;font_weight:bold;background-color:#FFFFFF"><b>" .$array_result[$i]->date_german. "</b></td>";
echo "<td valign="top" width="500" style="font-size:11px;lighter:lighter;background-color:#FFFFFF;color:#000000;vertical-align:middle;height:18px;">" .$array_result[$i]->path. "</td></tr>";
echo "<tr><td></td><td valign="top" style="font-size:11px;background-color:#FFFFFF;color:#000000;"><a href="http://" .$server. "/admin/aw/newstool/suche/newsfsuche/" .basename($datei). "" target="_new">" .$array_result[$i]->titel. "</a></td>";
echo "<tr><td colspan="3"><hr color="#000000" size="1"></td></tr>";
}
echo "gezaehlt wurden $counting!";
if ($disabled[prev]!==TRUE) echo '<a href="'.$PHP_SELF.'?offset='.($offset-$step).'&cat_select='.$cat_select.'">Vorherige Seite << </a>';
for ($i=1;$i<=($anz/$step);$i++) echo '<a href="'.$PHP_SELF.'?offset='.($i*$step).'&cat_select='.$cat_select.'"> '.$i.'</a>';
if ($disabled[next]!==TRUE) echo '<a href="'.$PHP_SELF.'?offset='.($offset+$step).'&cat_select='.$cat_select.'"> >> Nächste Seite</a>';
Bin für jeden Hinweis dankbar, da ich unter Zeitdruck stehe....
Vielen Dank und Gruß
Tolwin
hi,
Wenn ich nun aber eine spezielle Kategorie auswähle, sollen nur news dieser angezeigt werden. Hierzu
erstelle ich ein weiteres Array mit den der Kategorie entsprechenden Inhalten welches ich im Anschluss ausgeben lasse.
Warum ein weiteres Array?
Warum durchläufst du nicht das originale Array, und berücksichtigst dabei nur die Elemente mit entsprechender Kategorie?
Nach dem Blättern gelange ich aber immer wieder auf die Ausgangsposition "Alle Anzeigen" da die Kategorie verloren geht. Was hierzu sicher beiträgt ist das Problem dass ich mit PHPSELF arbeite und hierzu $_POST verwenden muss, der Seitenindex aber aus dynamisch generierten Links besteht und $_GET benötigt.
Wenn die Kategorie "verloren geht", darf man wohl annehmen, dass du schon irgendwie versucht hast, sie an die nächste Scriptinstanz zu übertragen.
Sind das die Stellen, wo du
&cat_select='.$cat_select.'
in deinen Links einbaust?
Was hat dein Debugging ergeben, _warum_ der Wert dort plötzlich "fehlt"?
gruß,
wahsaga
Habe das Skript etwas umgebaut (hatte es vorher so gehabt)
$counting = 0;
$array_result = array();
if($cat_select != 0)
{
foreach($result_array as $db_key => $result)
{
$datei = "/data/www/pvk/docs/admin/aw/newstool/suche/newsfsuche/".$result->news_nummer.".php";
$result_array[$db_key]->path = $kategorien[$result->category_id]['path'];
$result_array[$db_key]->sort = $kategorien[$result->category_id]['sort'];
if((integer)$result_array[$db_key]->sort == (integer)$cat_select)
{
$counting++;
array_push($array_result, $result_array[$db_key]);
}
}
$anz = $counting;
if($offset >= $anz-$step)
{
$offset = $anz - $step;
$diff = $anz % $diff;
$disabled[next] = TRUE;
}
if (!$offset || $offset<0)
{
$offset = 0;
$disabled[prev] = TRUE;
}
echo "OFFSET = $offset .... DIFF = $diff";
for($i = $offset; $i <= $diff; $i++)
{
echo "<tr><td valign="top" width="60" style="font-size:11px;font_weight:bold;background-color:#FFFFFF"><b>" .$array_result[$i]->date_german. "</b></td>";
echo "<td valign="top" width="500" style="font-size:11px;lighter:lighter;background-color:#FFFFFF;color:#000000;vertical-align:middle;height:18px;">" .$array_result[$i]->path. "</td></tr>";
echo "<tr><td></td><td valign="top" style="font-size:11px;background-color:#FFFFFF;color:#000000;"><a href="http://" .$server. "/admin/aw/newstool/suche/newsfsuche/" .basename($datei). "" target="_new">" .$array_result[$i]->titel. "</a></td>";
echo "<tr><td colspan="3"><hr color="#000000" size="1"></td></tr>";
}
if ($disabled[prev]!==TRUE) echo '<a href="'.$PHP_SELF.'?offset='.($offset-$step).'&cat_select='.$cat_select.'">Vorherige Seite << </a>';
for ($i=1;$i<=($anz/$step);$i++) echo '<a href="'.$PHP_SELF.'?offset='.($i*$step).'&cat_select='.$cat_select.'"> '.$i.'</a>';
if ($disabled[next]!==TRUE) echo '<a href="'.$PHP_SELF.'?offset='.($offset+$step).'&cat_select='.$cat_select.'"> >> Nächste Seite</a>';
echo "gezaehlt wurden $counting!";
}
else
{
foreach($result_array as $db_key => $result)
{
$datei = "/data/www/newsfsuche/".$result->news_nummer.".php";
$result_array[$db_key]->path = $kategorien[$result->category_id]['path'];
$result_array[$db_key]->sort = $kategorien[$result->category_id]['sort'];
if($cat_select == 0 || !isset($cat_select))
{
$counting++;
array_push($array_result, $result_array[$db_key]);
}
}
for($i = 0; $i < $counting; $i++)
{
echo "<tr><td valign="top" width="60" style="font-size:11px;font_weight:bold;background-color:#FFFFFF"><b>" .$array_result[$i]->date_german. "</b></td>";
echo "<td valign="top" width="500" style="font-size:11px;lighter:lighter;background-color:#FFFFFF;color:#000000;vertical-align:middle;height:18px;">" .$array_result[$i]->path. "</td></tr>";
echo "<tr><td></td><td valign="top" style="font-size:11px;background-color:#FFFFFF;color:#000000;"><a href="http://" .$server. "/admin/aw/newstool/suche/newsfsuche/" .basename($datei). "" target="_new">" .$array_result[$i]->titel. "</a></td>";
echo "<tr><td colspan="3"><hr color="#000000" size="1"></td></tr>";
}
echo "gezaehlt wurden $counting!";
echo "</table>";
}
?>
Wenn ich nun bspw. die Kategorie 1 aufrufe (kategorie 0 ist Alle Anzeigen), zeigt er mir richtiger Weise die ersten 10 Einträge (Kategorie 1 hat 27) an. Der Offset ist 0 und DIFF = 10. Dies sollte dann die erste Seite sein. Allerdings sehe ich wenn ich mir den Link der 1. Seite anzeigen lasse die Parameter Offset = 10&cat_select=1 .
Dies sollte aber den Offset 0 anzeigen. Der Link zur 2. Seite zeigt Offset=20&cat_select=1 . Wenn ich diesen anklicke, erhalte ich aus dem debugging OFFSET = 17 DIFF = 7 .
Mir ist nicht ganz klar was ich da falsch mache.
Grüße
Tolwin
hi,
Allerdings sehe ich wenn ich mir den Link der 1. Seite anzeigen lasse die Parameter Offset = 10&cat_select=1 .
Dies sollte aber den Offset 0 anzeigen. Der Link zur 2. Seite zeigt Offset=20&cat_select=1 .
Also existiert das Problem mit der Übergabe der Kategorie-ID bei dieser Form des Scriptes offenbar nicht?
Und hier stimmt nur das Offset nicht - was du in deiner neuen Scriptversion aber schon bereinigt hattest?
gruß,
wahsaga
Und hier stimmt nur das Offset nicht - was du in deiner neuen Scriptversion aber schon bereinigt hattest?
nein, habe noch keinen Ansatz gefunden woran das mit dem falschen Offset liegen könnte.
Gruß
Tolwin