Skip to content

Add option to specify filter URL type - #1558

Merged
zonky2 merged 5 commits into
hotfix/2.4.16from
hotfix/fix_issue_139
May 10, 2026
Merged

Add option to specify filter URL type#1558
zonky2 merged 5 commits into
hotfix/2.4.16from
hotfix/fix_issue_139

Conversation

@zonky2

@zonky2 zonky2 commented May 1, 2026

Copy link
Copy Markdown
Contributor

fix issue #139

@zonky2
zonky2 requested review from discordier and stefanheimes May 1, 2026 10:39
@zonky2 zonky2 self-assigned this May 1, 2026
@zonky2 zonky2 added this to the 2.4.x milestone May 1, 2026
@zonky2 zonky2 added the enhancement This issue is about an enhancement (aka new feature) label May 1, 2026

@discordier discordier left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM - need to tackle the FIXME in a later release

@zonky2
zonky2 merged commit a26c239 into hotfix/2.4.16 May 10, 2026
4 checks passed
@zonky2

zonky2 commented May 10, 2026

Copy link
Copy Markdown
Contributor Author

fixed #139 13 years later...

@zonky2
zonky2 deleted the hotfix/fix_issue_139 branch May 10, 2026 10:55
zonky2 added a commit that referenced this pull request May 12, 2026
Fix PR #1558 - Update filter URL handling to support slugNget type
zonky2 added a commit that referenced this pull request Aug 6, 2026
The URL parameter type ("URL type for the parameter") introduced with #1558 and
fixed up in #1563 was only honoured for filter rules that render a frontend filter
widget. ListControllerTrait::getFilterParameters() obtained the type from
getParameterFilterWidgets(), which returns nothing for rules without widget - the
usual detail page rules. Those parameters fell back to "slugNget" and were accepted
as slug as well as GET, no matter what was configured.

The type is now obtained from the filter settings themselves:

* Simple::getParameterTypes() reports the configured param_type for all parameters
  of a setting, WithChildren and ExpressionRule merge the types of their children
  and Collection::getParameterTypes() aggregates all settings of the collection.
* ParameterTypes::fromSetting() provides the backwards compatibility layer for
  filter settings not implementing getParameterTypes(). They are treated as
  "slugNget" and trigger a deprecation. The method becomes part of ISimple in
  MetaModels 3.0 - adding it now would break implementations not extending Simple.

Render\Setting\Collection::buildJumpToUrlFor() builds the jumpTo URL of the detail
page as slug or as GET according to the configured type - it always used slug
before, so a rule configured as GET produced links that did not match its own
configuration.

A parameter passed via another type than the configured one now results in a 404
instead of silently rendering the unfiltered list under an URL that looks like it
is filtered. This is limited to rules without frontend filter widget; for widgets
the frontend filter handles the URL (see #1563) and a value of the wrong type stays
unused as before.

As a side effect the expensive getParameterFilterWidgets() call is gone from the
regular rendering path. It is only performed when a mismatch was detected, that is
on the path ending in a 404 anyway.

(cherry picked from commit c89ad6d)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement This issue is about an enhancement (aka new feature)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants