Как сделать регистрацию и оформление заказа на одной странице

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
nekit555
Сообщения: 1
Зарегистрирован: 2017.05.20, 23:01

Как сделать регистрацию и оформление заказа на одной странице

Сообщение nekit555 »

Здравствуйте! Пишу специфичную программу, и нужно сделать регистрацию и оформление заказа на одной странице.
Товары не нужно набирать, как в обычном ИМ, их немного. Товары расположены в таблице(~15 шт). Человек просто задает количество, нажимает кнопку "Зарегистрироваться".
Думал писать отдельный контроллер Cart, и кидать товары в сессии, но не вариант. Товаров то мало. И товары просто набираются на одной странице.
Использую таблицы:
Products - информация о товаре(Id, название, цена, путь к картинке, статус( 0/1)
Users - данные о пользователе. Уже готово - проблем нет;
Orders - данные о заказе.
Order_Products - заказанные продукты. (Id, order_id, product_id, name, quantity, price)
------
Товаров 15 шт. Но в таблицу Order_Products попадают только товары с выбранным кол-вом > 1.
Думаю реализовать при помощи Табличного ввода. Model::loadMultiple()/Model::validateMultiple().
Но я не знаю, как сделать 15 input полей для таблицы Orders_Products, где отбираются значения с кол-во>0, где product_id соответствует реальному продукту, которые сохранятся в таблицу Orders_Products
Yii2 я еще не так глубоко изучил, а мозгов не хватает, как это реализовать. Перечитал русскоязычную документацию, но хочется сделать коротко и грамотно. Помогите пожалуйста!

Что примерно нужно.
Изображение

(Код с регистрацией пользователя я опустил)
Контроллер

Код: Выделить всё

public function actionSignup()
    {
        $model = new SignupForm();
        $order = new Orders();
        $products = Products::find()->indexBy('id')->where(['status' => 1])->all();
	$count_order_p = count(Yii::$app->request->post('order_products', []));
        $order_products = [new OrderProducts()];
        for($i = 1; $i < $count_order_p; $i++) {
            $order_products[] = new OrderProducts();        
        }
        if (Model::loadMultiple($order_products, Yii::$app->request->post()) && Model::validateMultiple($order_products)) {
            foreach ($order_products as $order_product) {
                $order_product->save(false);
            }
        }
        if (Model::loadMultiple($products, Yii::$app->request->post()) && Model::validateMultiple($products)) {
            foreach ($products as $product) {
                $product->save(false);
            }
        }
        
        return $this->render(
            'signup',
            [
                'model' => $model,
                'order' => $order,
                'order_products' =>$order_products,
                'products' =>$products
            ]
        );
    }
Представление

Код: Выделить всё

<?php $form = ActiveForm::begin(); ?>
    <div class="col-md-6">
          <?php if (\Yii::$app->session->hasFlash('success')):?>
            <div class="alert alert-success" role="alert"><?= \Yii::$app->session->getFlash('success')?></div>
           <?php endif?>
           <?php if (\Yii::$app->session->hasFlash('error')):?>
            <div class="alert alert-danger" role="alert"><?= \Yii::$app->session->getFlash('error')?></div>
           <?php endif?>
          <?php $form = ActiveForm::begin(); ?>
          /*** Поля для регистрации пользователя ***/
      </div>
      <div class="col-md-6">
        <table class="table">
            <thead>
              <tr>
                <th>Фото</th>
                <th>Название</th>
                <th>Кол-во</th>
                <th>Цена</th>
                <th>Удалить</th>
              </tr>
            </thead>
            <tbody>
            	/*Просто заполняю продукцию из таблицы Products*/
                <?php foreach ($products as $product): ?>
                    <tr>
                        <td><?= $form->field($product,"[]name"); ?></td>
                        <td><?= $form->field($product,"[]price"); ?></td>
                        <td><?= $form->field($product,"[]quantity"); ?></td> /*Вот это поле должно заполнять таблицу Order_Products , но не знаю как*/
                        <td><?= $form->field($product,"[]image"); ?></td>
                        <td><?= $form->field($product,"[]status"); ?></td>      
                    </tr>
                <?php endforeach; ?>
            </tbody>
        /*Здесь попробовал вывести таблицу Order_Products*/, выводит 1 строчку(
        </table>
          </br>
          <table class="table">
            <thead>
              <tr>
                <th>Фото</th>
                <th>Название</th>
                <th>Кол-во</th>
                <th>Цена</th>
                <th>Удалить</th>
              </tr>
            </thead>
            <tbody>
                <?php foreach ($order_products as $order_product): ?>
                    <tr>
                        <td><?= $form->field($order_product,"[]product_id"); ?></td>
                        <td><?= $form->field($order_product,"[]product_name"); ?></td>
                        <td><?= $form->field($order_product,"[]order_id"); ?></td>
                        <td><?= $form->field($order_product,"[]quantity"); ?></td>
                        <td><?= $form->field($order_product,"[]price"); ?></td>         
                    </tr>
                <?php endforeach; ?>
            </tbody>
        </table>
      </div>
      <div class="form-group">
                <?= Html::submitButton('Отправить', ['class' => 'btn btn-primary']) ?>
      </div>
      <?php ActiveForm::end(); ?>
Ответить