• Почему body min-height не работает?

    @Alexey10
    Лучше в 2019 году для прижатия футера к низу использовать flexbox.

    <html>
    <body>
    
    <div class="wrapper">
    
      <div class="content"></div>
    
      <div class="footer"></div>
    
    </div>
    
    </body>
    </html>


    * {
      margin: 0;
      padding: 0;
    }
    html,
    body {
      height: 100%;
    }
    .wrapper {
      display: flex;
      flex-direction: column;
      height: 100%;
    }
    .content {
      flex: 1 0 auto;
    }
    .footer {
      flex: 0 0 auto;
    }
    Ответ написан
    3 комментария
  • ЧПУ Yii2, передача GET параметров, как организовать?

    shcherbanich
    @shcherbanich Автор вопроса
    Программист
    Решение:
    'rules' => [
                    ['class' => 'app\components\CarUrlRule', 'connectionID' => 'db'],
                ],


    Код класса:
    <?php
    
    namespace app\components;
    
    use yii\web\UrlRule;
    
    class CarUrlRule extends UrlRule
    {
        public $connectionID = 'db';
        public $pattern = 'car';
        public $route = 'car';
    
        public function createUrl($manager, $route, $params)
        {
            if ($route === 'car/index') {
                if (isset($params['manufacturer'], $params['model'])) {
                    return $params['manufacturer'] . '/' . $params['model'];
                } elseif (isset($params['manufacturer'])) {
                    return $params['manufacturer'];
                }
            }
            return false;  // this rule does not apply
        }
    
        public function parseRequest($manager, $request)
        {
            $pathInfo = $request->getPathInfo();
    
            $segs=explode('/',$pathInfo.'/');
    
            $data = array();
               
            $n=count($segs);       
        
            for($i=0;$i<$n-1;$i+=2){
    
                if($segs[$i]==='') 
                    continue;
    
                $value = $segs[$i+1];
    
                if($m=preg_match_all('/\[(.*?)\]/',$segs[$i],$matches)){
                    
                    $name=substr($segs[$i],0,$pos);
    
                    for($j=$m-1;$j>=0;--$j)
                        if($matches[1][$j]==='')
                            $value=array($value);
                        else
                            $value=array($matches[1][$j]=>$value);
    
                    $data[$name]=$value;
                }
                else
                    $data[$segs[$i]]=$value;
            }
            return ['site/index', $data];
        }
    }
    Ответ написан
    1 комментарий
  • Как правильно передать model в layout в yii2?

    @myphpscript
    public function run() {
    		
    		
    		return $this->render('callbackform', [
    			'model' => new Callback(),
    		]);
    	}


    в frontend/widgets/views делаете вьюшку с формой callbackform.php типа такой
    <?php
    use yii\helpers\Url;
    use yii\helpers\Html;
    use yii\widgets\ActiveForm;
    ?>
    
    <div id="callback">
        <?php $form = ActiveForm::begin([
    	    'id' => 'callback-form',
    	    'enableAjaxValidation' => true,
    	    'action' => Url::to(['site/callback']),
    	    'validationUrl' => Url::to(['site/callback']),
    	]); ?>
    	
            <?= $form->field($model, 'name')->textInput([
    			'placeholder' => 'Имя',
    		])->label(''); ?>
    		
    		<?= $form->field($model, 'phone')->textInput([
    			'placeholder' => 'Телефон',
    		])->label(''); ?>
    		
    		 <?= Html::submitButton('Отправить', ['class' => 'btn btn-primary']) ?>
    
        <?php $form->end(); ?>
    </div>


    в контроллере site/callback валидацию и отправку
    Ответ написан
    1 комментарий
  • Yii2 и bootstrap 4, как обновить компоненты yiisoft/yii2-bootstrap до bootstrap4?

    @grozzzny
    Люблю кодить
    Подключите расширение через композер:
    composer require grozzzny/depends "dev-master"

    Затем в assets добавьте

    class AppAsset extends AssetBundle
    {
        public $depends = [
            'yii\web\YiiAsset',
            'grozzzny\depends\bootstrap4\Bootstrap4Asset',
            'grozzzny\depends\bootstrap4\Bootstrap4PluginAsset',
        ];
    }


    Класс Bootstrap4Asset при инициализации подписывается на события View и при возможности удаляет bootsrap 3
    class Bootstrap4Asset extends AssetBundle
    {
        public $sourcePath = '@vendor/twbs/bootstrap/dist';
        public $css = [
            'css/bootstrap.css',
        ];
    
        public function init()
        {
            parent::init(); // TODO: Change the autogenerated stub
            Yii::$app->view->on(View::EVENT_AFTER_RENDER, function (){
                unset(Yii::$app->view->assetBundles['yii\bootstrap\BootstrapAsset']);
            });
            Yii::$app->view->on(View::EVENT_BEGIN_BODY, function (){
                unset(Yii::$app->view->assetBundles['yii\bootstrap\BootstrapAsset']);
            });
        }
    }


    Таким образом можно играться с layouts.. Например админка может спокойно работать на bootstrap 3, а фронтенд на bootstrap 4.

    Но это еще не все.. Есть нюансы..
    С модальным окном пришлось унаследоваться от модального класса bootstrap 3
    С валидацией инпутов, перенаследовал миксины bootstrapa 4 и дописал в миксин реализацию от bootsrapa 3. (SCSS)
    Виджет меню стал примерно таким:
    <?= Nav::widget([
        'options' => ['class' => 'navbar-nav d-flex justify-content-between w-100'],
        'items' => [
            [
                'label' => ''Услуги,
                'options' => ['class' => 'nav-item'],
                'linkOptions' => ['class' => 'nav-link'],
                'url' => ['services'],
                'active' => Yii::$app->controller->id == 'services'
            ],
     ....
            [
                'label' => 'Контакты',
                'options' => ['class' => 'nav-item'],
                'linkOptions' => ['class' => 'nav-link'],
                'active' => Yii::$app->controller->id == 'contacts',
                'url' => ['/contacts']
            ]
        ]
    ]);?>

    Хлебные крошки:
    <nav aria-label="breadcrumb" class="mb-3">
        <?= Breadcrumbs::widget([
            'links' => $this->params['breadcrumbs'],
            'options' => ['class' => 'breadcrumb'],
            'tag' => 'ol',
            'itemTemplate' => "<li class='breadcrumb-item'>{link}</li>\n",
            'activeItemTemplate' => "<li class=\"breadcrumb-item active\" aria-current=\"page\">{link}</li>\n",
        ])?>
    </nav>

    Пагинация:
    <nav aria-label="Page navigation">
                <?= LinkPager::widget([
                    'pagination' => $provider->pagination,
                    'linkContainerOptions' => ['class' => 'page-item'],
                    'linkOptions' => ['class' => 'page-link'],
                    'disabledListItemSubTagOptions' => ['tag' => 'a', 'class' => 'page-link']
                ]) ?>
            </nav>


    Alerts:
    <?= Alert::widget([
                'options' => ['class' => 'alert alert-danger show', 'role' => 'alert'],
                'body' => $message,
            ]) ?>


    В общем в этой сборке cms от easyiicms, с которой можно спокойно работать с bootstrap 4. Там смеси от less и scss. CMS чисто шаблонная и измененная.. для себя писал, но решать вам
    composer create-project --prefer-dist --stability=dev grozzzny/yiicms www dev-master


    Вот еще надстройка Material Design for Bootstrap 4 с модулями от https://mdbootstrap.com:

    class AppAsset extends AssetBundle
    {
        public $depends = [
            ..
            //Material Design for Bootstrap 4
            'grozzzny\depends\mdbootstrap\MDBootstrapAsset',
            'grozzzny\depends\mdbootstrap\MDBootstrapPluginAsset',
            ..
       ];
    }


    В assetManager в главной конфигурации можно указать надстройки:
    'assetManager' => [
                'bundles' => [
                    // Если решили переопределить scss:
                    'grozzzny\depends\mdbootstrap\MDBootstrapAsset' => [
                        'basePath' => '@webroot',
                        'baseUrl' => '@web',
                        'css' => ['css/mdbootstrap/mdb.css'], 
                    ],
                    // Если решили подключить доступные модули в коллекции MDB:
                    'grozzzny\depends\mdbootstrap\MDBootstrapPluginAsset' => [
                        'chart' => true,
                        'enhancedModals' => true,
                        'formsFree' => true,
                        'jqueryEasing' => true,
                        'scrollingNavbar' => true,
                        'velocity' => true,
                        'waves' => true,
                        'wow' => true,
                    ],
                ],
            ],


    Создам нормальный лаяулт под Bootstrap 4 со всеми примерами и объяснениями, если данный ответ наберет лайки
    Ответ написан
    Комментировать