Я создал одно расширение, чтобы показать бестселлера, используя подкатегорию. Я должен передать данные в URL, используя название категории, например 1) бестселлер / xyz и бестселлер / xyz / abc /.Для этого у меня есть файл маршрута. Итак, у меня правильно получено динамическое действие.
Файл блока:
публичная функция getBestsellerProduct ($ category_url) {
$limit = $this->getProductLimit();
$objectManager = \Magento\Framework\App\ObjectManager::getInstance(); // Instance of object manager
$resource = $objectManager->get('Magento\Framework\App\ResourceConnection');
$connection = $resource->getConnection();
$sql = "SELECT sb.* FROM `sales_bestsellers_aggregated_yearly` sb where sb.product_id is not null AND (sb.store_id IN(0)) AND (sb.store_id IN(0)) GROUP by sb.product_id ORDER BY sb.qty_ordered DESC LIMIT 10";
$resourceCollection =$connection->fetchAll($sql);
if (!empty($category_url)) {
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$categoryFactory = $objectManager->create('Magento\Catalog\Model\CategoryFactory');
$category = $categoryFactory->create()->loadByAttribute('url_key',$category_url);
$category_id[] = $category->getId();
$subcategories = $category->getChildrenCategories();
if(isset($subcategories) && !empty($subcategories)) {
foreach ($subcategories as $subcategorie) {
$category_id[] = $subcategorie->getId();
$subcategorie1=$subcategorie->getChildrenCategories();
foreach ($subcategorie1 as $subcat)
{
$category_id[] = $subcat->getId();
}
}
}
$category_id = implode(',',$category_id);
//echo $category_id;
$sql = "SELECT sb.* FROM `sales_bestsellers_aggregated_yearly` sb join catalog_category_product ccp on sb.product_id=ccp.product_id where ccp.category_id in($category_id) and sb.product_id is not null AND (sb.store_id IN(0)) AND (sb.store_id IN(0)) GROUP by sb.product_id ORDER BY sb.qty_ordered DESC LIMIT 1000";
$resourceCollection =$connection->fetchAll($sql);
}
//$resourceCollection->setPageSize($limit);
return $resourceCollection;
}
In controller I have call this block using following way
$block = $resultPage->getLayout()
->createBlock('Weismann\Bestsellerwidget\Block\Bestsellerdproduct')
->getBestsellerProduct($category_slug);
$block1 = $resultPage->getLayout()->createBlock('Test\Bestseller\Block\Bestsellerdproduct',"Test_Bestseller1",
[
'data' => [
'my_arg' => $block
]
]
)->setData('area', 'frontend')
->setTemplate('Test_Bestseller::bestsellerproduct.phtml')->toHtml();
$this->getResponse()->setHeader('Content-Type', 'text/html', true)->setBody($block1);
Теперь ядолжен показать мой файл phtml правильно, потому что он не показывает верхний и нижний колонтитулы.