HomeJournal › Search

Search

Journal-scoped article search — the advanced search form and the keyword-driven results screen it (and the header quick-search box) feed into — both served by the per-journal front controller index.php (?_action=advSearch / ?_action=article).

Page Status E2E Enhanced Legacy Ref Route Roles
Advanced Search Full Yes query-builder index.php?_action=advSearch /?_action=advSearch Public
Search Results Full Yes pagination index.php?_action=article /?_action=article&keywords=... Public

Features

FeatureStatusE2EDescription
Reader can build a field-scoped boolean article search (multiple conditions combined with AND/OR/NOT across all fields, title, author, DOI, abstract, keywords, subjects, full text) Full Yes Each condition row picks its own field scope and boolean operator; the first row is mandatory and rows can be added (max 6) or removed.
Reader can start a quick all-fields keyword search from any public journal page header Basic Yes TC-JR-HP-006 asserts the header Search link targets /new/en/advanced-search; the all-fields keyword mode itself is a condition row with scope 'all'.
Reader can filter search results by document/article type, offered only for types actually used by the journal's articles Full Checkbox grid; selected types are carried in the URL (types param) and shown as removable chips after search.
Reader can restrict the search to a publish-date range Full Date filter is off by default (no limit), matching legacy pb=0 default.
Reader can sort search results by article title, newest first, or oldest first Full Sort is URL-synced (sort param) and defaults to title.
Reader can page through search results and change results-per-page Full Legacy offered an 'All' (max_rows=0) unlimited option; the new per-page control uses fixed numeric sizes.
Reader can refine an executed search without retyping it (builder collapses into an applied-criteria summary and can be re-expanded) Full After a search the form collapses to the AdvancedSearchAppliedFiltersSummary panel; reopening restores the populated builder.
Reader can remove individual applied search criteria (condition, type, date bound) as chips from the results summary New Interactive chip removal edits the pending query; re-running the search applies the reduced criteria.
Reader sees an explicit no-results state with a one-click 'clear all filters' recovery New Shown only after at least one populated search has run.
Reader can reset the entire search form (conditions, types, date, sort) in one action New Also clears the URL search state so the reset is shareable/bookmarkable.
Reader gets live search-term length feedback (counter, warning, and error at the 200-character cap) New Applies to the primary condition row's term.
Reader loading a localized (second-language) journal site gets search matches against secondary-language title/abstract/author/subject fields Pending Legacy searchArticles() switches every searched column to its _2 variant when LANG_CODE == 2 (article.class.php:732-749); no verified counterpart in the new advanced-search API path.
Reader on a Persian/Hijri-locale journal enters the publish-date range in the journal's own calendar Pending Legacy pb date handling routes through pmktime/hmktime per the locale's DATE_FUNC (article.class.php:1085-1094); the new DateRangePicker is Gregorian-only as far as the web layer shows.
Search silently ignores terms shorter than 2 characters (quick keyword searches under 2 chars return no results) Pending Legacy guard at article.class.php:763-767 (keywords < 2 chars short-circuits) and :917 (per-token skip); not verified in the new stack's search path.
Scope boundary on the shared ?_action=article dispatch:
index.php's article/press case renders one PHP template (article_list.php) for several different navigational entries — browse-by-issue/year (vol=/issue=), articles-in-press (press), and the click-through results of Browse's author/subject/keyword indexes (au=/sb=/kw=) — all of which belong to Issues & Articles / Browse, not this module. "Search Results" above is only the sub-view triggered when kw1 or keywords is present: ArticleManager::articleList() then sets a searchForm flag that makes article_list.php render a collapsible "refine search" accordion plus a search-summary banner (active keywords/fields/date range/sort) atop the list — a materially different screen from the plain listing the other entry points produce. The header/sidebar quick-search box is a widget embedded on other pages, not a standalone screen — it submits ?_action=article&keywords=..., which the class internally rewrites to kw1 (all-fields mode), landing on the same "Search Results" row rather than a row of its own. Only the old theme implements this widget as its own standalone partial (themes/old/front/objects/search_box.php); every other theme embeds the identical hidden _action=article + keywords input markup inline inside header.php or primary_menu.php instead (e.g. themes/base/front/objects/header.php, themes/theme1/front/objects/primary_menu.php, themes/theme2/theme6's header.php, themes/theme7/front/objects/primary_menu.php), and theme4/theme5 have no widget file of their own — they inherit theme1's primary_menu.php via the theme-parent stack.
Judgement call — dispatch-dir correction:
the design brief's suggested anchor ("search branches in the mainm/mainn dispatch") was traced and not confirmed: neither mainm/index.php nor mainn/index.php contains an advSearch case or wires up searchArticles()/articleSearchForm() reachable from a themed per-journal page — both instead hardcode journal_code = 0 and reproduce a cross-journal "journals list" page, matching the Home module's independent finding that these two directories are Portal-style duplicates, not per-journal Home/Search implementations. The confirmed anchor is the top-level index.php (case 'advSearch' / case 'article'), which also matches apps/legacy/spec/journal/advanced-search.md's own "Controller: index.php" references.