Added filter on the page

This commit is contained in:
Stepan 2025-06-28 08:41:09 +02:00
parent c374c50ca0
commit 51899db9fb
6 changed files with 103 additions and 233 deletions

View File

@ -139,7 +139,7 @@ abstract class AdminSingleController extends AdminBaseController
case 'image':
$file = $_FILES[$field['model_field']];
if (isset($file)) {
$path = upload_file($file, $this->model_сlass_name::$table_name . '/', 'image');
$path = upload_file($file, $this->model_сlass_name::get_table_name() . '/', 'image');
if (!empty($path)) {
$field_value = $path;

View File

@ -2,9 +2,55 @@
namespace Lycoreco\Apps\Recipes\Controllers;
use Lycoreco\Apps\Recipes\Models\{
CategoryModel,
IngredientModel,
RecipeModel
};
use Lycoreco\Includes\BaseController;
define('CATALOG_MAX_RECIPES', 20);
class CatalogController extends BaseController
{
protected $template_name = APPS_PATH . '/Recipes/Templates/catalog.php';
}
public function get_context_data()
{
$context = parent::get_context_data();
$context["page"] = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$context['categories'] = CategoryModel::filter(sort_by: ['obj.name'], count: 200);
$context['ingredients'] = IngredientModel::filter(sort_by: ['obj.name'], count: 200);
// GET request to filter catalog
$fields = array();
$category_id = isset($_GET['category']) ? $_GET['category'] : null;
if ($category_id) {
$fields[] = array(
'name' => 'obj.category_id',
'type' => '=',
'value' => $category_id
);
}
$ingredient_ids = isset($_GET['ingredient']) ? $_GET['ingredient'] : null;
if ($ingredient_ids) {
$fields[] = array(
'name' => 'tb2.ingredient_id',
'type' => 'IN',
'value' => $ingredient_ids,
'is_having' => true
);
}
$context['recipes'] = RecipeModel::filter(
$fields,
['-obj.created_at'],
CATALOG_MAX_RECIPES
);
return $context;
}
}

View File

@ -1,4 +1,6 @@
<?php
require_once APPS_PATH . '/Recipes/components.php';
the_header(
'Recipes',
'Explore our delicious recipes and find your next favorite dish.',
@ -12,173 +14,16 @@ the_header(
<div class="container">
<div class="catalog">
<div class="catalog-items">
<a class="catalog-recipe hover-anim">
<div class="catalog-recipe__image">
<img src="media/recipe1.png" alt="Recipe 1">
</div>
<div class="catalog-recipe__info">
<div class="catalog-recipe__title">
<h3>Pizza</h3>
</div>
<div class="catalog-recipe__meta meta">
<div class="catalog-recipe__category">
Lunch
</div>
<div class="catalog-recipe__ingredients">
Tomatoes, Pepperoni
</div>
</div>
</div>
</a>
<a class="catalog-recipe hover-anim">
<div class="catalog-recipe__image">
<img src="media/recipe1.png" alt="Recipe 1">
</div>
<div class="catalog-recipe__info">
<div class="catalog-recipe__title">
<h3>Pizza</h3>
</div>
<div class="catalog-recipe__meta meta">
<div class="catalog-recipe__category">
Lunch
</div>
<div class="catalog-recipe__ingredients">
Tomatoes, Pepperoni
</div>
</div>
</div>
</a>
<a class="catalog-recipe hover-anim">
<div class="catalog-recipe__image">
<img src="media/recipe1.png" alt="Recipe 1">
</div>
<div class="catalog-recipe__info">
<div class="catalog-recipe__title">
<h3>Pizza</h3>
</div>
<div class="catalog-recipe__meta meta">
<div class="catalog-recipe__category">
Lunch
</div>
<div class="catalog-recipe__ingredients">
Tomatoes, Pepperoni
</div>
</div>
</div>
</a>
<a class="catalog-recipe hover-anim">
<div class="catalog-recipe__image">
<img src="media/recipe1.png" alt="Recipe 1">
</div>
<div class="catalog-recipe__info">
<div class="catalog-recipe__title">
<h3>Pizza</h3>
</div>
<div class="catalog-recipe__meta meta">
<div class="catalog-recipe__category">
Lunch
</div>
<div class="catalog-recipe__ingredients">
Tomatoes, Pepperoni
</div>
</div>
</div>
</a>
<a class="catalog-recipe hover-anim">
<div class="catalog-recipe__image">
<img src="media/recipe1.png" alt="Recipe 1">
</div>
<div class="catalog-recipe__info">
<div class="catalog-recipe__title">
<h3>Pizza</h3>
</div>
<div class="catalog-recipe__meta meta">
<div class="catalog-recipe__category">
Lunch
</div>
<div class="catalog-recipe__ingredients">
Tomatoes, Pepperoni
</div>
</div>
</div>
</a>
<a class="catalog-recipe hover-anim">
<div class="catalog-recipe__image">
<img src="media/recipe1.png" alt="Recipe 1">
</div>
<div class="catalog-recipe__info">
<div class="catalog-recipe__title">
<h3>Pizza</h3>
</div>
<div class="catalog-recipe__meta meta">
<div class="catalog-recipe__category">
Lunch
</div>
<div class="catalog-recipe__ingredients">
Tomatoes, Pepperoni
</div>
</div>
</div>
</a>
<a class="catalog-recipe hover-anim">
<div class="catalog-recipe__image">
<img src="media/recipe1.png" alt="Recipe 1">
</div>
<div class="catalog-recipe__info">
<div class="catalog-recipe__title">
<h3>Pizza</h3>
</div>
<div class="catalog-recipe__meta meta">
<div class="catalog-recipe__category">
Lunch
</div>
<div class="catalog-recipe__ingredients">
Tomatoes, Pepperoni
</div>
</div>
</div>
</a>
<a class="catalog-recipe hover-anim">
<div class="catalog-recipe__image">
<img src="media/recipe1.png" alt="Recipe 1">
</div>
<div class="catalog-recipe__info">
<div class="catalog-recipe__title">
<h3>Pizza</h3>
</div>
<div class="catalog-recipe__meta meta">
<div class="catalog-recipe__category">
Lunch
</div>
<div class="catalog-recipe__ingredients">
Tomatoes, Pepperoni
</div>
</div>
</div>
</a>
<a class="catalog-recipe hover-anim">
<div class="catalog-recipe__image">
<img src="media/recipe1.png" alt="Recipe 1">
</div>
<div class="catalog-recipe__info">
<div class="catalog-recipe__title">
<h3>Pizza</h3>
</div>
<div class="catalog-recipe__meta meta">
<div class="catalog-recipe__category">
Lunch
</div>
<div class="catalog-recipe__ingredients">
Tomatoes, Pepperoni
</div>
</div>
</div>
</a>
<?php
foreach ($context['recipes'] as $recipe) {
the_product_item($recipe);
}
?>
</div>
<div class="filters-container">
<div class="filters">
<div class="filters-inner">
<form class="filters-form" action="" method="get">
<form class="filters-form" method="get">
<div class="categories-filter">
<h3 class="filters__title">
Categories</h3>
@ -189,42 +34,19 @@ the_header(
<!-- All labels and ids are the same for template design purposes (all labels point to same checkbox) -->
<div class="filters-checkboxes">
<ul>
<?php foreach ($context['categories'] as $cat):
$field_id = 'cat_' . $cat->get_id();
$is_checked = false;
$category = $_GET['category'] ?? null;
if($category == $cat->get_id())
$is_checked = true;
?>
<li>
<input id="category" type="checkbox" name="category" id="category">
<label for="category">Category</label>
<input id="<?= $field_id ?>" type="radio" name="category" value="<?= $cat->get_id() ?>" <?= $is_checked ? 'checked' : '' ?>>
<label for="<?= $field_id ?>"><?= $cat->field_name ?></label>
</li>
<li>
<input id="category" type="checkbox" name="category" id="category">
<label for="category">Category</label>
</li>
<li>
<input id="category" type="checkbox" name="category" id="category">
<label for="category">Category</label>
</li>
<li>
<input id="category" type="checkbox" name="category" id="category">
<label for="category">Category</label>
</li>
<li>
<input id="category" type="checkbox" name="category" id="category">
<label for="category">Category</label>
</li>
<li>
<input id="category" type="checkbox" name="category" id="category">
<label for="category">Category</label>
</li>
<li>
<input id="category" type="checkbox" name="category" id="category">
<label for="category">Category</label>
</li>
<?php endforeach; ?>
</ul>
</div>
</div>
@ -237,42 +59,21 @@ the_header(
</div>
<div class="filters-checkboxes">
<ul>
<?php foreach ($context['ingredients'] as $ing):
$field_id = 'ing_' . $ing->get_id();
$is_checked = false;
$ingredients = $_GET['ingredient'] ?? null;
if($ingredients) {
if (in_array($ing->get_id(), $ingredients))
$is_checked = true;
}
?>
<li>
<input id="category" type="checkbox" name="category" id="category">
<label for="category">Category</label>
<input id="<?= $field_id ?>" type="checkbox" name="ingredient[]" value="<?= $ing->get_id() ?>" <?= $is_checked ? 'checked' : '' ?>>
<label for="<?= $field_id ?>"><?= $ing->field_name ?></label>
</li>
<li>
<input id="category" type="checkbox" name="category" id="category">
<label for="category">Category</label>
</li>
<li>
<input id="category" type="checkbox" name="category" id="category">
<label for="category">Category</label>
</li>
<li>
<input id="category" type="checkbox" name="category" id="category">
<label for="category">Category</label>
</li>
<li>
<input id="category" type="checkbox" name="category" id="category">
<label for="category">Category</label>
</li>
<li>
<input id="category" type="checkbox" name="category" id="category">
<label for="category">Category</label>
</li>
<li>
<input id="category" type="checkbox" name="category" id="category">
<label for="category">Category</label>
</li>
<?php endforeach; ?>
</ul>
</div>
</div>

View File

@ -0,0 +1,15 @@
<a href="<?php the_permalink('recipes:single', [$recipe->get_id()]) ?>" class="catalog-recipe hover-anim">
<div class="catalog-recipe__image">
<img src="<?= $recipe->get_image_url() ?>" alt="<?= $recipe->field_title ?>">
</div>
<div class="catalog-recipe__info">
<div class="catalog-recipe__title">
<h3><?= $recipe->field_title ?></h3>
</div>
<div class="catalog-recipe__meta meta">
<div class="catalog-recipe__category">
<?= $recipe->category_name ?>
</div>
</div>
</div>
</a>

View File

@ -0,0 +1,8 @@
<?php
use Lycoreco\Apps\Recipes\Models\RecipeModel;
function the_product_item(RecipeModel $recipe)
{
require_once APPS_PATH . '/Recipes/Templates/components/catalog-item.php';
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 385 KiB