Как лучше сделать панельки в Yii2 help!

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
AlexSergeev1990
Сообщения: 109
Зарегистрирован: 2017.06.22, 10:43

Как лучше сделать панельки в Yii2 help!

Сообщение AlexSergeev1990 »

Привет всем!!! Помогите плиз панелькой. В тостере задал такой вопрос:
Yii2 как запустить action для модального окна?
Всем привет я новичок в Yii2 многое не понятно) поэтому могу задавать глупые вопросы.... Ребят подскажите как организовать запуск action.
Допустим у меня есть основная страничка с основным url www.test.ru/system - system основная страничка класса, т.е рендеринг происходит на actionIndex.
на system.php у меня есть панелька с кнопками, для примера возьмем три кнопки
<button id='zhurnal">Журнал<button>
<button id='status">Статус<button>
<button id='createZakupki">Закупка<button>
все три кнопки открывают модальные окна. Пока все данные в модальные окна поступают из одного actionIndex. Но мне хочется разгрузить Акшион.
Вопрос как сделать так чтобы запускались для каждой кнопки свой action?
Для запуска actionZhurnal надо чтобы произощел переход на system/zhurnal - > но тогда у меня теряется панелька c тремя кнопками.....
дублировать код панельки с js сриптами не охота.....думаю что надо копать в сторону URl manager.
Надеюсь объянил как мог...Подскажите плиз... В Идеале мне охота чтобы модальные окна хранились каждый в отдельном файле _modalZhurnal.php где был бы только дизайн в выводимыми данными, а сейчас у меня в все модальные окна прописаны в вьюшке system.php
если есть пример дайте ссылку) Всем спасибо!!! :D
Мне ответили:

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

<button id="zhurnal" data-url="/system/journal">Журнал<button>
<button id="status" data-url="/system/status">Статус<button>
<button id="createZakupki" data-url="/system/order">Закупка<button>


$('button[data-url]').click(function(e) {
  $.ajax({
    url: $(this).data('url'),
    type: 'get',
    dataType: 'html'
  }).done(function(response) {
    $('.modal-body').html(response);
  });
})


SystemController.php
// ...
public function actionJournal()
{
  return $this -> renderAjax('journal');
}
// ...l');
}
// ...

Но когда я так делаю...если просто в адресную строку прописать /journal/ Мой контроллер возвращает вид....
Вопрос : как правильно сделать панельку с кнопкапми? Может у кого нить есть пример? Ребят помогите плиз!!
Аватара пользователя
Dominus
Сообщения: 892
Зарегистрирован: 2013.03.14, 21:27
Откуда: Россия, Иваново
Контактная информация:

Re: Как лучше сделать панельки в Yii2 help!

Сообщение Dominus »

Ну в общем всё правильно вам подсказали.
Controller:

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

// app/controllers/SystemController.php
use Yii;
use yii\web\Controller;
use yii\web\BadRequestHttpException;

class SystemController extends Controller
{
//...
    /**
     * @return string
     */
    public function actionIndex()
    {       
        return $this->render('index');
    }
    
    /**
     * @return string
     * @throws BadRequestHttpException
     */
    public function actionJournal()
    {
        if (Yii::$app->request->isAjax) {
            $value = "Это журнал";
            return $this->renderAjax('modal/journal', ['value' => $value]); // app/views/system/modal/journal.php
        } else {
            throw new BadRequestHttpException(Yii::t('app', 'Bad request!'));
        }
    }
    
    /**
     * @return string
     * @throws BadRequestHttpException
     */
    public function actionStatus()
    {
        if (Yii::$app->request->isAjax) {
            $value = "Это статус";
            return $this->renderAjax('modal/status', ['value' => $value]); // app/views/system/modal/status.php
        } else {
            throw new BadRequestHttpException(Yii::t('app', 'Bad request!'));
        }
    }
    
    /**
     * @return string
     * @throws BadRequestHttpException
     */
    public function actionOrder()
    {
        if (Yii::$app->request->isAjax) {
            $value = "Это закупка";
            return $this->renderAjax('modal/order', ['value' => $value]); // app/views/system/modal/order.php
        } else {
            throw new BadRequestHttpException(Yii::t('app', 'Bad request!'));
        }
    }
//...  
} 
View:

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

<?php
// app/views/system/index.php

/* @var $this yii\web\View */

use yii\helpers\Url;
use yii\web\JsExpression;

$script = new JsExpression("
    $('button[data-url]').click(function(e) {
      $('.modal-body').html('".Yii::t('app', 'Loading...')."');
      $.ajax({
         url: $(this).data('url'),
         type: 'get',
         dataType: 'html'
      }).done(function(response) {
         $('.modal-body').html(response);
      });
    });
");
$this->registerJs($script, \yii\web\View::POS_END);
?>

<div class="system-index">
    <p>
        <button id="zhurnal" data-toggle="modal" data-target="#myModal" data-url="<?= Url::to(['system/journal']) ?>">Журнал</button>
        <button id="status" data-toggle="modal" data-target="#myModal" data-url="<?= Url::to(['system/status']) ?>">Статус</button>
        <button id="createZakupki" data-toggle="modal" data-target="#myModal" data-url="<?= Url::to(['system/order']) ?>">Закупка</button>
   </p>
   
   <!-- Modal -->
    <div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
        <div class="modal-dialog" role="document">
            <div class="modal-content">
                <div class="modal-header">
                    <h5 class="modal-title" id="exampleModalLabel">Modal title</h5>
                    <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                        <span aria-hidden="true">&times;</span>
                    </button>
                </div>
                <div class="modal-body">
                    <?= Yii::t('app', 'Loading...') ?>
                </div>
                <div class="modal-footer">
                    <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
                    <button type="button" class="btn btn-primary">Save changes</button>
                </div>
            </div>
        </div>
    </div>
    <!-- Modal end -->
    
</div>
Каждому action свой вид:

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

// app/views/system/modal/journal.php
// app/views/system/modal/status.php
// app/views/system/modal/order.php

    <h1><?= $this->context->action->uniqueId ?></h1>
    <p>
        This is the view content for action "<?= $this->context->action->id ?>".
        The action belongs to the controller "<?= get_class($this->context) ?>"
        in the "<?= $this->context->module->id ?>" module.
    </p>
    <p><?= $value ?></p>
    <p>
        You may customize this page by editing the following file:<br>
        <code><?= __FILE__ ?></code>
    </p>
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!
Ответить