В CMS за октябрь у меня есть страница, которая использует мой компонент:
title = "products"
url = "/filter-products/:category_slug?"
layout = "default"
is_hidden = 00
[filterproducts]
==
{{ form_ajax('onFilterProducts', { update: {'product/products-listing': '#partialProducts'} }) }}
{% partial 'products-filters' %}
{{ form_close() }}
<table id="partialProducts">
{% partial 'product/products-listing' products = filterproducts.products %}
</table>
Мой компонент выглядит так:
class FilterProducts extends ComponentBase
{
/** @var Collection */
public $products;
/**
* @return array
*/
public function componentDetails(): array
{
return [
'name' => 'Filter Products',
'description' => 'Filter Products',
];
}
public function onRun()
{
$this->products = $this->prepareProductsCollection();
}
public function onFilterProducts()
{
$this->products = $this->prepareProductsCollection();
}
public function prepareProductsCollection()
{
$options = post('filter', []);
return $this->filterProducts($options);
}
/**
* @param array $options
*
* @return \Illuminate\Database\Eloquent\Builder[]|Collection|\October\Rain\Database\Builder[]
*/
protected function filterProducts(array $options = [])
{
/** @var \October\Rain\Database\Builder $query */
$query = Product::query()->isActive();
if (!empty($options)) {
// do some filtering …
}
return $query->get();
}
}
И partial/product/products-listing.htm
выглядит так:
{% if products|length %}
{% for record in product %}
{% partial "product/product-row" record = record %}
{% endfor %}
{% else %}
{{ 'There are no Products that match the criteria'|_ }}
{% endif %}
Дело в том, что когда я в первый раз захожу на страницу, все товары отображаются правильно.
Но когда я всегда могу увидеть Нет ни одного товара, соответствующего критерию .
Когда я сбрасываю $options
, каждое поле формы отображается правильно.
Более того, когда я сбрасываю $this->products
в методе onFilterProducts()
, я получаю правильно отфильтрованную коллекцию, но эта коллекция не передается в частичную, которую следует обновить.
Итак, вопрос: как я могу передать продукты из запроса Ajax для обновления частичного.