Модуль с модальным окном

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

Модуль с модальным окном

Сообщение RuZzz »

хочу сделать модуль суть которого - модальное окно(окно которое позволяет при этом нажимать форму на заднем плане), внутри которого могут отображаться другие модули
вот этот код нужно разбить на две части(скопипастил из первого же сайта, который был под рукой)

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

<!--?php
$this--->beginWidget('zii.widgets.jui.CJuiDialog', array(
                    'id' => 'mydialog',
                    'options' => array(
                        'title' => 'Отправить сообщение',
                        'autoOpen' => false,
                        'modal' => true,
                        'resizable'=> false
                    ),
                ));
                $qForm = new QuickForm;
  
                $form = $this->beginWidget('CActiveForm', array(
                            'id' => 'quick-form',
                            'enableClientValidation' => true,
                            'clientOptions' => array(
                                'validateOnSubmit' => true,
                            ),
                            'action' => array('site/quick'),
                        ));
                ?>
      
                    <!--?php echo $form--->errorSummary($qForm); ?>
              
                        <!--?php echo $form--->labelEx($qForm,'name'); ?>
                        <!--?php echo $form--->textField($qForm,'name', array('size'=>35)); ?>
                        <!--?php echo $form--->error($qForm,'name'); ?>
      
                        <!--?php echo $form--->labelEx($qForm,'phone'); ?>
                        <!--?php echo $form--->textField($qForm,'phone', array('size'=>35)); ?>
                        <!--?php echo $form--->error($qForm,'phone'); ?>
          
                        <!--?php echo $form--->labelEx($qForm,'timeToCall'); ?>
                        <!--?php echo $form--->textField($qForm,'timeToCall', array('size'=>35)); ?>
                        <!--?php echo $form--->error($qForm,'timeToCall'); ?>
              
                  
                        <!--?php echo CHtml::submitButton('Отправить'); ?-->
                  
                <!--?php
                $this--->endWidget();
                $this->endWidget('zii.widgets.jui.CJuiDialog');
                ?>
чтобы один модуль использовал представление с модальным окном CJuiDialog,а второй бы модуль выводил форму для заполнения(или просто картинку) внутри модального окна
поэтому сценарий примерно такой
1. пользователь заходит на страницу сайта(при этом посылает запрос обычному контроллеру, а не контроллеру в модуле)
(как сделать автоматическую подгрузку модального окна модуля? чтоб пользователю неприходилось вызывать сам модуль)
2. Запускается модальное окно модуля (где при этом должно находится объявление CJuiDialog? в main\layout нашего модуля?)
3. В модальном окне подгружается другой модуль(надеюсь тут проблем не возникнет)
RuZzz
Сообщения: 85
Зарегистрирован: 2011.10.16, 23:43

Re: Модуль с модальным окном

Сообщение RuZzz »

я конечно могу выложить свой говнокод, но что конкретно выкладывать я не понимаю
RuZzz
Сообщения: 85
Зарегистрирован: 2011.10.16, 23:43

Re: Модуль с модальным окном

Сообщение RuZzz »

при этом модальное окно модуля у меня выводится нормально (через запрос типа app/index.php?r=module/site), а хочется просто чтоб выводилось при app/index.php
Аватара пользователя
lancecoder
Сообщения: 2532
Зарегистрирован: 2012.06.26, 17:16

Re: Модуль с модальным окном

Сообщение lancecoder »

RuZzz писал(а):но что конкретно выкладывать я не понимаю
RuZzz писал(а):я конечно могу выложить свой говнокод
8-)
RuZzz
Сообщения: 85
Зарегистрирован: 2011.10.16, 23:43

Re: Модуль с модальным окном

Сообщение RuZzz »

допустим я отправляю запрос
модуль называется abstracter
в коде особо и смотреть неначто, всё стандартно
index.php?r=abstracter

файл
protected/modules/abstracter/AbstracterModule.php

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

class AbstracterModule extends CWebModule
{
    public function init()
    {
        $this->setImport(array(
            'abstracter.controllers.*',
            'abstracter.models.*',
            'abstracter.components.*',
        ));
        // set the layout path
        $this->layoutPath = Yii::getPathOfAlias('abstracter.views.layouts');
        // set the layout
        $this->layout = 'main';
        //$p      = Yii::app()->createController('abstracter/default');
        //$p[0]->actionIndex();
        //$this->defaultController->actionIndex();
    }

    public function beforeControllerAction($controller, $action)
    {
        if(parent::beforeControllerAction($controller, $action))
        {
            // this method is called before any module controller action is performed
            // you may place customized code here
            return true;
        }
        else
            return false;
    }
    
    public function create()
    {
        echo "fasa asaf";
        //$this->defaultController->actionIndex();
    }
    
    /**
        Run.
    */
    public function run()
    {
        $this->render('/site/index', array(
            'panels' => 'test'
        ));
    }
}
protected/modules/abstracter/controllers/SiteController.php

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

<?php

class SiteController extends  CController
{
    /**
    Declares class-based actions.
     */
    public function actions()
    {
        return array(
            // captcha action renders the CAPTCHA image displayed on the contact page
            'captcha'=>array(
                //'class'=>'CCaptchaAction',
                'class'=>'Yii3dCaptcha',
                'width'=>400,
                'height'=> 50,
                'backColor'=>0xFFFFFF,
                'maxLength'=> 7,
                'testLimit'=> 1,
                'minLength'=> 5,
                'foreColor'=> 0x0000FF,
            ),
            // page action renders "static" pages stored under 'protected/views/site/pages'
            // They can be accessed via: index.php?r=site/page&view=FileName
            'page'=>array(
                'class'=>'CViewAction',
            ),
        );
    }

    /**
    * Specifies the access control rules.
    * This method is used by the 'accessControl' filter.
    * @return array access control rules
    */
    public function accessRules()
    {
        return array(
        array('allow',  // allow all users to perform 'index' and 'view' actions
                    'actions'=>array('index','error','login','contact'),
                    'users'=>array('*'),
        ),
        array('allow', // allow authenticated user to perform 'create' and 'update' actions
                    'actions'=>array('logout'),
                    'users'=>array('@'),
        ),
        array('allow', // allow admin user to perform 'admin' and 'delete' actions
                    'actions'=>array('debug'),
                    'users'=>array('admin'),
        ),
        array('deny',  // deny all users
                    'users'=>array('*'),
        ),
        );
    }

    /**
    This is the default 'index' action that is invoked
    when an action is not explicitly requested by users.
    */
    public function actionIndex()
    {
        $this->render('index');
    }
...
protected/modules/abstracter/views/site/index.php

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

$this->beginWidget('zii.widgets.jui.CJuiDialog', array(
        'id' => 'mydialog',
        'options' => array(
                'title' => 'Абстрактер',
                'autoOpen' => true,
                'modal' => false,
                'resizable'=> false,
                'position'=> 'right bottom',
        ),
        'htmlOptions'=>array('style'=>'opacity:0.5; background:rgba(255,255,255, 0.5);'),
));
echo CHtml::link(CHtml::image('/files/rec/left.png','test',    array(
                                                                'width'=>44,
                                                                'class'=>'tess',
                                                                )), array('default/prev'));

echo CHtml::link(CHtml::image('/files/rec/right.png','test',    array(
        'width'=>44,
        'class'=>'tess',
)), array('default/next'));
$this->endWidget('zii.widgets.jui.CJuiDialog');
окно появляется, но я то хотел, чтоб оно появилось при запросе index.php, типа как yii-debug-toolbar всегда доступен для работы, пока лазишь по сайту

и как правильно организовать, чтоб можно было отображать другие модули внутри окна - непонятно
RuZzz
Сообщения: 85
Зарегистрирован: 2011.10.16, 23:43

Re: Модуль с модальным окном

Сообщение RuZzz »

вопрос примерно такой какой в каком

где должно находится это объявление

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

$this->beginWidget('zii.widgets.jui.CJuiDialog', array(
        'id' => 'mydialog',
        'options' => array(
                'title' => 'Абстрактер',
                'autoOpen' => true,
                'modal' => false,
                'resizable'=> false,
                'position'=> 'right bottom',
        ),
        'htmlOptions'=>array('style'=>'opacity:0.5; background:rgba(255,255,255, 0.5);'),
));
в layouts/main.php модуля или в views/site/index.php, чтобы я мог подгружать другие модули в это окно не создавая снова $this->beginWidget('zii.widgets.jui.CJuiDialog'

правильно ли делать макет модуля внутри макета приложения. Или же правильно делать только один макет?
RuZzz
Сообщения: 85
Зарегистрирован: 2011.10.16, 23:43

Re: Модуль с модальным окном

Сообщение RuZzz »

теперь хочу тоже самое сделать на yii2 скажем один модуль для управления модальным окном, и другой модуль внутри этого же модального окна, например с формой для регистрации пользователя.
gto23
Сообщения: 67
Зарегистрирован: 2013.06.08, 22:03

Re: Модуль с модальным окном

Сообщение gto23 »

Ruzz читай доку, ту ее часть, где объясняются базовые понятия - модуль, расширение и т.д.
gto23
Сообщения: 67
Зарегистрирован: 2013.06.08, 22:03

Re: Модуль с модальным окном

Сообщение gto23 »

А вообще мой тебе совет, с таким уровнем понимания, не берись за такое задание, модальные окна, тем более связанные, довольно сложная штука. Я себя самым полным нубом не считаю, но сделал близкую по сути штуку не сразу, столько намудился, что пожалеть успел, что взялся так реализовывать вообще. Да и то попроще было задание у меня, мне нужно было форму внутри диалога сделать, которая при заполнении бы обновляла грид на основной странице, с которой вызывается диалог
RuZzz
Сообщения: 85
Зарегистрирован: 2011.10.16, 23:43

Re: Модуль с модальным окном

Сообщение RuZzz »

наоборот хорошо, когда есть стимул для изучения доки. но на самом деле только по доке сложновато разобраться с такой ситуацией.
хочется более конкретных полезных ссылок. лано бум дальше копать.
RuZzz
Сообщения: 85
Зарегистрирован: 2011.10.16, 23:43

Re: Модуль с модальным окном

Сообщение RuZzz »

начну пожалуй издалека... я сгенерировал базовое приложение(может стоило генерировать расширенное, фиг с ним) без разделения на пользовательскую и админскую часть(может тоже ошибка на раннем этапе - не знаю).

создал модуль abstracter для модального окна, скопировал его, буду делать параллельно из копии модуль для регистрации пользователя.
RuZzz
Сообщения: 85
Зарегистрирован: 2011.10.16, 23:43

Re: Модуль с модальным окном

Сообщение RuZzz »

ну вот модальное окно я сделал

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

Dialog::begin(array(
        'clientOptions' => array(
                'modal' => false,
                'autoOpen' => true,
                'resizable'=> true,
                'position'=> 'right bottom',
                ),
));
//???
Dialog::end();
 
а как в него встроить модуль? мне нужно что то вроде полиморфизма для классов модуля.
мне из класса-потомка View контроллер модуля вызывать или как?

теперь делаю приложение в стиле app-advanced, так вот не очень ясно куда добавлять(в какой конфиг) список модулей, в идеале хотелось бы чтоб модули были доступны из администраторской и пользовательской части. То есть должен быть некий файл common/config/main.php но его нету по умолчанию.
Ответить