Пытаюсь сделать фильтрацию на yii2. Есть поле формы в ней 3 input(type="radio") , каждый инпут должен искать товары с ценой в данном диапазоне. Вот код контроллера где выполняется поиск :
public function actionFilter()
{
$filter = trim(Yii::$app->request->get('filter'));
$this->setMeta('MAC-SHOPPER | ' . $filter);
if (!$filter) {
return $this->render('filter');
}
/*
if ($filter <= 15) {
$query = Product::find()->where(['<=', 'price', 15]);
}*/
$model = new Product();
if($Button1) {
$query = Product::find()->where(['between', 'price', "0", "50" ])->all();
}
//Создаем объект класса Pagination
//Передаем тотал каунт - общее количество записей, которыe мы вытащим
$pages = new Pagination(['totalCount' => $query->count(), 'pageSize' => 2, 'forcePageParam' => false, 'pageSizeParam' => false]);
//Выполняем сам запрос
//offset - с какой записи начинать
//limit - количество записей
$products = $query->offset($pages->offset)->limit($pages->limit)->all();
return $this->render('filter', compact('products', 'pages', 'filter', 'model'));
}
Код модели товаров :
<?php
namespace app\models;
use yii\db\ActiveRecord;
//класс для таблицы категории
class Product extends ActiveRecord
{
public $Button1;
public $Button2;
public $Button3;
public $radioButtonList;
//Поведение для картинок
public function behaviors()
{
return [
'image' => [
'class' => 'rico\yii2images\behaviors\ImageBehave',
]
];
}
public static function tableName()
{
return 'product';
}
public function getCategory()
{
//Связь таблиц, один продукт может иметь одну категорию (hasOne())
return $this->hasOne(Category::className(), ['id' => 'category_id']);
}
}
?>
И код самой формы :
<?php $form = ActiveForm::begin([
'id' => 'task-form',
'action' => \yii\helpers\Url::to(['category/filter']),
]
)?>
<?= $form->field($model, 'radioButtonList')
->radioList([
'Button1' => 'от 0-1500',
'Button2' => 'от 3000-5000',
'Button3' => 'от 5000-20000'
],[
'id' => 'radio_button',
]); ?>
<?= Html::submitButton('Найти', ['class' => 'btn btn-success']);?>
<?php $form = ActiveForm::end() ?>
Как мне поместить в свойства $Button1,$Button2,$Button3 price из таблицы товаров, чтобы при клике на определенный инпут он выводил товары как сделано в условии контроллера(то есть по диапазону цены)
Значит, идем в документацию, видим:
The data item used to generate the radio buttons. The array values are the labels, while the array keys are the corresponding radio values.
Значит, radioList
первым параметром, ожидает от вас, массив где ключи это ЗНАЧЕНИЯ инпута, а значения массива - это labels (этикетка/описание).
Собственно, если вы загляните в html, что выходит из вашего кода:
$form->field($model, 'radioButtonList')
->radioList([
'Button1' => 'от 0-1500',
'Button2' => 'от 3000-5000',
'Button3' => 'от 5000-20000'
]);
То увидите примерно:
<label>от 0-1500</label>
<input type="radio" value="Button1" name="radioButtonList"/>
<label>от 3000-5000</label>
<input type="radio" value="Button2" name="radioButtonList"/>
<label>от 5000-20000</label>
<input type="radio" value="Button3" name="radioButtonList"/>
Что будет если запостить такую форму? Ну к примеру постом? Что получите?
Вы получите в переменой $_POST
по ключу radioButtonList
значение Button1
, Button2
или Button3
.
И как же нам получить значение?
Из массива на прямую - $_POST['radioButtonList']
Через метод фреймворка - Yii::$app->request->post('radioButtonList')
Загрузить в модель -
$model = new Product();
if($model->load(Yii::$app->request->post())){
... $model->radioButtonList;
}
Пока, ваш контроллер это сплошной набор строк кода, который даже связать в голове не выходит, даже описывать не хочу. Просто укажу вам, что по умолчанию, ваша форма будет слать POST
запрос.
Причина ваших проблем (мне кажется, что та же причина, почему вам не хотят помогать тут) - вам стоит изучить документацию, и повторить примеры которые в ней. Это вообще как минимум. (хотя бы - ссылка).
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
Подскажите как в opencart сделать следующий функционал (можно готовые модули) сайт по продажи купонов:
Доброго времени сутокЧастенько делал регистрации на RedBeanPHP, и в данной ситуации тоже, но большое НО