Простой плагин для Views, добавляющий фильтр "Товар имеет хоть одну опубликованную вариацию". Полезен когда у товаров может быть несколько вариаций и не хочется мучатся с агрегацией.
// src/Plugin/views/filter/ProductHasPublishedVariationViewsFilter.php
/**
* @ViewsFilter("product_has_published_variation")
*/
class ProductHasPublishedVariationViewsFilter extends FilterPluginBase {
/**
* {@inheritDoc}
*/
public function query() {
$this->ensureMyTable();
$query = $this->query; /** @var \Drupal\views\Plugin\views\query\Sql $query */
$query->addWhereExpression($this->options['group'], "
EXISTS (
SELECT *
FROM {commerce_product_variation_field_data}
WHERE
{commerce_product_variation_field_data}.product_id = {$this->tableAlias}.product_id AND
{commerce_product_variation_field_data}.status = 1
)
");
}
}
// MODULENAME.views.inc
/**
* Implements hook_views_data_alter().
*/
function MODULENAME_views_data_alter(array &$data): void {
$data['commerce_product_field_data']['has_published_variation'] = [
'title' => t('Product has published variation'),
'help' => t('Product has published variation'),
'filter' => [
'id' => 'product_has_published_variation',
],
];
}
Написанное актуально для
Commerce 2
Похожие записи
- Как работает опция "Aggregation type" в настройках полей Views при включённой агрегации
- AJAX в форме корзины Commerce 2
- Views сортировка по выражению/условию/формуле
- Как в Views программно изменить view mode выводимых сущностей по данным из cookie?
- Как в #ajax callback сгенерировать новую форму чтобы ей не мешали GET и POST данные текущего запроса
Добавить комментарий