feature/category-tree
Co-authored-by: Krzysiej <krzysiej@gmail.com> Co-committed-by: Krzysiej <krzysiej@gmail.com>
This commit was merged in pull request #55.
This commit is contained in:
@@ -2,11 +2,11 @@
|
||||
|
||||
namespace Krzysiej\RyobiCrawler\Twig;
|
||||
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
use Illuminate\Database\Eloquent\Collection;
|
||||
use Krzysiej\RyobiCrawler\Models\Price;
|
||||
use Krzysiej\RyobiCrawler\Models\Product;
|
||||
use Krzysiej\RyobiCrawler\Models\Stock;
|
||||
use Symfony\Component\Routing\RouterInterface;
|
||||
use Twig\Extension\AbstractExtension;
|
||||
use Twig\TwigFilter;
|
||||
use Twig\TwigFunction;
|
||||
@@ -15,6 +15,10 @@ use function Symfony\Component\Clock\now;
|
||||
|
||||
class AppExtension extends AbstractExtension
|
||||
{
|
||||
public function __construct(public RouterInterface $route)
|
||||
{
|
||||
}
|
||||
|
||||
public function getFunctions(): array
|
||||
{
|
||||
return [
|
||||
@@ -23,6 +27,7 @@ class AppExtension extends AbstractExtension
|
||||
new TwigFunction('newCount', [$this, 'newCount']),
|
||||
new TwigFunction('discontinuedCount', [$this, 'discontinuedCount']),
|
||||
new TwigFunction('lowestPriceCount', [$this, 'lowestPriceCount']),
|
||||
new TwigFunction('renderCategoryTree', [$this, 'renderCategoryTree']),
|
||||
];
|
||||
}
|
||||
|
||||
@@ -56,7 +61,7 @@ class AppExtension extends AbstractExtension
|
||||
public function lowestPriceCount(): int
|
||||
{
|
||||
return Product::whereRaw('priceCurrent = priceLowest')
|
||||
->whereRaw('lastSeen = "'.now()->format('Y-m-d').'"')
|
||||
->whereRaw('lastSeen = "' . now()->format('Y-m-d') . '"')
|
||||
->whereRaw('priceCurrent < productStandardPrice')
|
||||
->count();
|
||||
}
|
||||
@@ -65,4 +70,28 @@ class AppExtension extends AbstractExtension
|
||||
{
|
||||
return $items->first(fn($item) => str_starts_with($item->created_at, $date));
|
||||
}
|
||||
}
|
||||
|
||||
public function renderCategoryTree($categories, $current, $level = 0): string
|
||||
{
|
||||
$tree = '';
|
||||
if ($level == 0) {
|
||||
$tree .= '<ul class="list-group list-group-flush">';
|
||||
}
|
||||
foreach ($categories as $categoryName => $category) {
|
||||
$currentClass = $categoryName == $current ? 'list-group-item-primary' : '';
|
||||
$tree .= '<a class="list-group-item list-group-item-action '.$currentClass.' text-decoration-none ms-' . ($level * 2) . '" href="' . $this->route->generate('app_category', ['category' => $categoryName]) . '">' . $categoryName . ' <span class="badge bg-primary rounded-pill">' . $category['count'] . '</span></a>';
|
||||
|
||||
unset($category['count']);
|
||||
if (is_array($category) && count($category) >= 1) {
|
||||
foreach ($category as $subcategoryName => $subCategory) {
|
||||
$tree .= $this->renderCategoryTree([$subcategoryName => $subCategory], $current, $level + 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
if ($level == 0) {
|
||||
$tree .= '</ul>';
|
||||
}
|
||||
return $tree;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user