yakamara / yform

YForm für REDAXO 5 – Formulare im Frontend und Backend mit Verwaltung von Datenbank-Tabellen.
MIT License
77 stars 55 forks source link

BE-Tabellenansicht: Mehrseitige Listen kommen stets zu Seite 1 statt 2,3,.. zurück. #1425

Open christophboecker opened 1 year ago

christophboecker commented 1 year ago

Hier der Case: Eine Tabelle im BE-Tablemanager hat 140 Sätze auf drei Seiten. Auf Seite 2 oder 3 rufe ich einen Datensatz in den Editor und habe über dem Formular den Link “Zurück zur Übersicht”. Es gab Zeiten, in denen man dann bei Klick auf den Link (oder beim Speichern) wieder auf Seite 2 oder 3 der Tabelle landete. Das ist bei mir nicht mehr der Fall. Ich lande stets auf Seite 1. Getestet mit einem frischen System plus YForm dazu. @skerbis hat gegengeprüft und bestätigt das Problem.

Die Situation entsteht durch zwei verschiedene Url-Parameter, die den Start der Folgeseite festlegen. Der Link der Paginator-Seiten ist z.B. index.php?page=yform/manager/data_edit&table_name=.....&start=0&.....&e7935559_start=50

Der Zurück-Link über dem Formular sieht ungefähr so aus: index.php?page=yform/manager/data_edit&table_name=.....&start=0&...... Nichts mehr von e7935559_start=50 zu sehen.

Der Wert für start wird hier ermittelt: https://github.com/yakamara/redaxo_yform/blob/3ce797de2238dcbc691c2be5b36582a7efbd8612/plugins/manager/lib/yform/manager.php#L83-L87

Logisch, dass hier für $rex_yform_list['start'] nicht ein e7935559_start=50 herangezogen wird, sondern start=0. Aber ist hier der ursächliche Fehler bzw. was könnte denn die ursächliche Fehlerquelle sein?

christophboecker commented 1 year ago

Ich helfe mir erstmal mit diesem Workaround in der project/boot.php (start=0 rauswerfen wenn es in der Url schon ein e7935559_start=50 gibt):

\rex_extension::register('YFORM_MANAGER_DATA_PAGE',function($ep) {
    $list = rex_request::request('list','string','');
    if( '' === $list) {
        return;
    }
    $list_start = rex_request::request($list.'_start','string','');
    if( '' === $list_start) {
        return;
    }
    $start = rex_request::request('start','string','');
    if( '0' === $start ) {
        unset($_REQUEST['start']);
    }
});