CoolCMS API

SearchBox extends BaseComponent
in package
uses FormTrait

FinalYes

Renders the eshop search box.

Styles: Mini is a fulltext field plus a button (headers of eshop layouts).

Unlike Bazaar and Comcat the eshop has only Mini on purpose: categories and parameters are chosen in the left panel (frontEshopProductCategoryList and frontEshopProductFilterBox), so the search box would duplicate them. A future Medium or Large style must print its fields explicitly; a loop over $group->getControls() would spill new fields into the header too.

$categoryManager serves only the root category select (FormTrait), an optional field that the template10 theme template (Templates/Template10/Desktop/Mini.latte) prints explicitly; the default Templates/Default/Mini.latte does not render it, so other templates are unchanged.

Usage:

{control frontEshopSearchBox, 'Mini'}

Table of Contents

Constants

LIST_PAGE_SLUG  : mixed = \App\Core\Routers\PageId::ESHOP_PRODUCT_LIST
Fixed id of the catalog page, the search target.

Properties

$container  : Container
$routerDispatcher  : RouterDispatcher
$translator  : ITranslator
$appContext  : AppContext
$componentParameters  : array<string, mixed>
$currencyContext  : CurrencyContext|null
$deviceDetector  : DeviceDetector|null
$languageContext  : LanguageContext|null
$localizationContext  : LocalizationContext|null
$settingContext  : SettingContext
$themeContext  : ThemeContext|null
$translatorDomain  : string|null
$categoryManager  : ProductCategoryManager

Methods

__call()  : mixed
Dispatches `renderXyz()` to `render('Xyz', ...$args)`.
__construct()  : mixed
createComponent()  : IComponent|null
getAppContext()  : AppContext
getComponentParameter()  : mixed
Returns a component parameter, or null when it is not set.
getContainer()  : Container
getCurrencyContext()  : CurrencyContext|null
getLanguageContext()  : LanguageContext|null
getLocalizationContext()  : LocalizationContext|null
getRouterDispatcher()  : RouterDispatcher
getSettingContext()  : SettingContext
getSettings()  : array<int, array<string, mixed>>
getThemeContext()  : ThemeContext|null
hasServiceByType()  : bool
Returns whether the container has a service of the given type.
initializeAllContexts()  : void
injectDeviceDetector()  : void
onCreate()  : void
onSuccess()  : void
render()  : void
setAppContext()  : $this
setComponentParameter()  : void
Sets a component parameter.
setCurrencyContext()  : $this
setLanguageContext()  : $this
setLocalizationContext()  : $this
setSettingContext()  : $this
setThemeContext()  : $this
setup()  : void
setupAppContext()  : void
typedComponent()  : T
Returns a subcomponent with a verified type.
createComponentForm()  : Form
frontPresenter()  : BasePresenter|null
Returns the front presenter the component is attached to (null outside the front end or when detached).
getTranslator()  : ITranslator
setTemplateFile()  : void
setTranslator()  : self
buildCategorySelectItems()  : array<int, NotTranslate>
Returns options of the root category select (`parent_id IS NULL`) for the template10 theme.
createMultiplierComponent()  : Multiplier<string|int, IComponent>
Creates a multiplier for the component.
createNewComponentInstance()  : IComponent|null
Creates a new component instance without adding it to the presenter; used by the multiplier.
createStandardComponent()  : IComponent|null
Creates a standard component (not a multiplier).
prepareParametersForRedirectLink()  : array<string, int|string>
Builds the parameters of the link to the catalog list.

Constants

LIST_PAGE_SLUG

Fixed id of the catalog page, the search target.

private mixed LIST_PAGE_SLUG = \App\Core\Routers\PageId::ESHOP_PRODUCT_LIST

Properties

$componentParameters

protected array<string, mixed> $componentParameters = []

component parameters set by setComponentParameter()

$translatorDomain

protected string|null $translatorDomain = 'front.eshop.components.searchBox'

Methods

__call()

Dispatches `renderXyz()` to `render('Xyz', ...$args)`.

public __call(string $name, array<string|int, mixed> $args) : mixed

Called only when the component has no renderXyz() method of its own.

Parameters
$name : string
$args : array<string|int, mixed>

createComponent()

public createComponent(string $name) : IComponent|null
Parameters
$name : string
Return values
IComponent|null

getComponentParameter()

Returns a component parameter, or null when it is not set.

public getComponentParameter(string $name) : mixed
Parameters
$name : string

getContainer()

public getContainer() : Container
Return values
Container

getSettings()

public getSettings() : array<int, array<string, mixed>>
Return values
array<int, array<string, mixed>>

hasServiceByType()

Returns whether the container has a service of the given type.

public hasServiceByType(string $className) : bool

The name is composed dynamically (module plus component), so class_exists() runs first, and a true result guarantees a valid type.

Parameters
$className : string
Tags
phpstan-assert-if-true

class-string $className

Return values
bool

onSuccess()

public onSuccess(Form $form, ArrayHash $values) : void
Parameters
$form : Form
$values : ArrayHash

render()

public render([string $style = 'Mini' ]) : void
Parameters
$style : string = 'Mini'

setComponentParameter()

Sets a component parameter.

public setComponentParameter(string $name, mixed $value) : void
Parameters
$name : string
$value : mixed

typedComponent()

Returns a subcomponent with a verified type.

public typedComponent(string $name, T> $type) : T

Use it instead of an inline @var above $this['x'] (which does not narrow the type) and instead of the generic IComponent that $this['x'] returns. See Form::typedComponent().

Parameters
$name : string
$type : T>
Tags
template
Return values
T

frontPresenter()

Returns the front presenter the component is attached to (null outside the front end or when detached).

protected frontPresenter() : BasePresenter|null
Return values
BasePresenter|null

getTranslator()

protected getTranslator() : ITranslator
Return values
ITranslator

setTemplateFile()

protected setTemplateFile(string $dir, string $filename) : void
Parameters
$dir : string
$filename : string

setTranslator()

protected setTranslator(ITranslator $translator) : self
Parameters
$translator : ITranslator
Return values
self

buildCategorySelectItems()

Returns options of the root category select (`parent_id IS NULL`) for the template10 theme.

private buildCategorySelectItems() : array<int, NotTranslate>

It uses the same manager as ProductCategoryListComponent/Traits/InitializationTrait, with include(['translations']) and no asset, which the select does not need.

IMPORTANT: names are already localized DB data, not translation keys, so they are wrapped in NotTranslate. The form has a translator for labels and the select would otherwise look up every option as a key, and Tracy would report missing translations for category names.

Return values
array<int, NotTranslate>

createMultiplierComponent()

Creates a multiplier for the component.

private createMultiplierComponent(string $name) : Multiplier<string|int, IComponent>
Parameters
$name : string
Return values
Multiplier<string|int, IComponent>

createNewComponentInstance()

Creates a new component instance without adding it to the presenter; used by the multiplier.

private createNewComponentInstance(string $baseName[, int|string|null $uniqueKey = null ]) : IComponent|null
Parameters
$baseName : string
$uniqueKey : int|string|null = null
Return values
IComponent|null

createStandardComponent()

Creates a standard component (not a multiplier).

private createStandardComponent(string $name) : IComponent|null
Parameters
$name : string
Return values
IComponent|null

Builds the parameters of the link to the catalog list.

private prepareParametersForRedirectLink(ArrayHash $values) : array<string, int|string>

The route 200 mask is <slug>[/<category>][/s-<search>][/p-<page=1>o-<order=0>].

IMPORTANT: page and order are always sent, even when they are defaults. Nette builds the URL even without an optional segment and without them fails with "Invalid link: Missing parameter".

IMPORTANT: order = 0 is the sentinel "the user did not choose a sort order" and must stay 0; otherwise the search would land on a list with manual sorting and Elasticsearch relevance would never be enabled.

The category is passed only when the user chose it in the select. The field always exists in the form but only the template10 theme renders it, so on other themes category stays empty. The router translates the id to a slug itself (as {plink} does in the category list).

Parameters
$values : ArrayHash
Return values
array<string, int|string>
On this page

Search results