• Как выровнять button по центру блока?

    gluck59
    @gluck59
    Виртуальный глюк
    .Absolute-Center 
    {
    width: 100%;
    text-align: center;
    }
    Ответ написан
    2 комментария
  • Что лучше: yii\db\Query или Active Record?

    maxkh
    @maxkh
    Web developer
    В батле Query VS ActiveRecord - нет победителя - это инструменты для решения разных задач.

    Но я хочу отвлечься от вашего вопроса и поинтересоваться настроены ли в вашей БД внешние ключи ? Если нет, то советую начать изучение именно с этого момента, понимание внешних ключей в MySQL.

    После чего, нужно очень вдумчиво и хорошо прочесть официальную документацию на тему ActiveRecord (www.yiiframework.com/doc-2.0/guide-db-active-recor...

    После этого, у вас должна сложиться более целостная картинка о том, как это использовать вместе и что за что отвечает.

    Теперь вернемся к использованию Query и AR, ну тут все просто, приведу просто пример кода

    /**
     * Class VehicleQuery
     * @package frontend\modules\v1\models\vehicle
     */
    class VehicleQuery extends ActiveQuery
    {
        public $type;
    
        /**
         * @param \yii\db\QueryBuilder $builder
         * @return \yii\db\Query
         */
        public function prepare($builder)
        {
            if ($this->type !== null) {
                $this->andWhere([Vehicle::tableName() . '.vehicle_type' => $this->type]);
            }
            return parent::prepare($builder);
        }
    
        /**
         * Returns popular and active vehicles based on vehicle type
         * @return $this
         */
        public function popular()
        {
            $this->andWhere([
                Vehicle::tableName() . '.promoted' => 1,
                Vehicle::tableName() . '.deleted' => 0,
                Vehicle::tableName() . '.status' => '1',
                Vehicle::tableName() . '.in_use' => 1
            ]);
            return $this;
        }
    
        /**
         * @return $this
         */
        public function active()
        {
            $this->andWhere([
                Vehicle::tableName() . '.status' => '1',
                Vehicle::tableName() . '.deleted' => 0
            ]);
            return $this;
        }
    
        /**
         * @return $this
         */
        public function inUse()
        {
            $this->andWhere([Vehicle::tableName() . '.in_use' => 1]);
            return $this;
        }
    
    
        /**
         * Returns most rated vehicles
         * @return $this
         */
        public function rated()
        {
            $this->addOrderBy([
                Vehicle::tableName() . '.rating' => SORT_DESC,
                Vehicle::tableName() . '.created_at' => SORT_DESC
            ]);
            return $this;
        }
    
        /**
         * Returns most recently vehicles
         * @return $this
         */
        public function recently()
        {
            $this->addOrderBy([
                Vehicle::tableName() . '.created_at' => SORT_DESC,
                Vehicle::tableName() . '.rating' => SORT_DESC
            ]);
            return $this;
        }
    }


    Мы имеем модель Vehicle и для работы с этой моделью нам необходимо строить запросы, именно этим и занимается класс VehicleQuery - он берет на себя эту ответственность. Очень важно что бы Query класс был ответственный только за построение запросов, методы не должны возвращать find или save, они должны возвращать только экземпляр Query.

    Приведу код модели Vehicle
    class Vehicle extends ActiveRecord
    {
        public static function find()
        {
            return new VehicleQuery(get_called_class());
        }
    
        /**
         * @return \yii\db\ActiveQuery
         */
        public function getCarBrand()
        {
            return $this->hasOne(CarBrand::className(), ['id' => 'car_brand_id']);
        }
    
        /**
         * @return \yii\db\ActiveQuery
         */
        public function getCarGeneration()
        {
            return $this->hasOne(CarGeneration::className(), ['id' => 'car_generation_id']);
        }
    
        /**
         * @return \yii\db\ActiveQuery
         */
        public function getLanguage()
        {
            return $this->hasOne(Language::className(), ['id' => 'language_id']);
        }
    
        /**
         * @return \yii\db\ActiveQuery
         */
        public function getUser()
        {
            return $this->hasOne(User::className(), ['id' => 'user_id']);
        }
    
        /**
         * @return \yii\db\ActiveQuery
         */
        public function getPosts()
        {
            return $this->hasMany(Post::className(), ['car_id' => 'id']);
        }
    }


    Модель описывает entity, rules, relations, attributes - собственно это главная ответственность модели, никакую дополнительную логику в моделе не рекомендуется имплементировать.

    Из выше описанного ваш запрос может выглядеть следующим образом

    Vehicle::find()->with(['user', 'posts'])->active()->recently();


    Этот запрос выберет активные транспортные средства за последнее время со связями getUser(владелец) и getPosts(блоги).
    Ответ написан
    1 комментарий
  • С какой шириной вы рисуете адаптивные сайты?

    @Step_M
    На основе практики создания адаптивных сайтов, используем вот такой комплект ширин (для верстки с использованием брейкпоинтов):
    320 или 480 — телефоны/смартфоны
    800 — смартфоны/планшеты
    1024 — ноутбуки/планшеты
    1280 — десктопы/планшеты/ноутбуки
    1600 — десктопы

    А вообще, суть адаптивного сайта автоматически подстраиваться под любой размер экрана, и в идеале лучше вообще обойтись без переломных точек, а просто плавно подстраивать элементы сайта (размеры блоков, размеры шрифтов и т.д.) под размер экрана.
    Ответ написан
    1 комментарий
  • Post и Get запросы, какая между ними разница и что лучше и для каких целей?

    socengel
    @socengel
    7 лет native php в продакшене, онлайн 20000+,
    Общего между ними то что они работают одинаково. Разницы между ними технически никакой. А вот идеологические различия есть.

    Я расскажу о них в контексте PHP. Прошу заметить что протокол HTTP к PHP имеет косвенное отношение потому что он создавался для обмена html страницами а PHP просто расширяет возможности и того и другого.

    GET запрос используется чтобы получить данные а POST чтобы отправить. (Напоминаю что технически они работают одинаково).

    Поэтому в контексте PHP опираясь на эту идеологию сделали следующим образом:
    1. При каждом запуске PHP по умолчанию создаются суперглобальные массивы ($_GET, $_POST).
    2. Если в строке запроса есть вопросительный знак(?). То все что после него считается параметрами GET запроса они представлены в формате 'ключ'='значение' и в качестве разделителя используется знак амперсанда (&)
    Пример:
    GET /index.php?name=Андрей&surname=Галкин
    это строка запроса, тут 2 параметра. эти параметры попадут в массив $_GET.
    3. $_POST заполняется другим способом. содержимое этого массива заполняется из "заголовков запроса". То есть из места, скрытого от глаз в явном виде. Всю рутину по созданию таких заголовков берет на себя браузер. Хотя иногда и что-то редактируется в заголовках в ручную.

    Чаще всего пост запрос используется в формах (для отправки данных).

    Например у нас есть форма для входа 2 поля логин и пароль.

    Представим что мы используем GET метод. Тогда при отправке формы мы перейдем на следующий адрес /login.php?login=Андрей&password=123 согласитесь что так передавать такую информацию совсем не безопасно. Любой может открыть ваш браузер и начиная вводить адрес сайта он из истории может увидеть ваши пароли и логины.

    А вот если бы мы указали методом POST то мы бы получили следующий запрос:
    POST /login.php (login=Андрей&password=123) то что в скобочках было бы скрыто и никак не сохранено в браузере.

    Теперь другая ситуация например форма поиска. Мы вводим текст и получаем страницу с результатами. Вот тут уместнее GET форма. потому что нам было бы удобно сразу иметь ссылку на результат поиска, то есть добавить в строку запроса можно выразится "Публичные параметры", которыми можно поделиться. И как результат в строке браузера будет конкретная ссылка на текущую страницу. Мы можем ее скопировать, и разместить где-нибудь, или например скинуть другу. И получить при переходе одну и ту же страницу. А не просить других людей зайти на сайт и в поиск вбить определенную фразу чтобы получить необходимую страницу.

    В общем подводя итог:
    GET - это чтобы получить определенную страницу в определенном виде ( сортировка, текущая страница в блоге, строка поиска и т.п. ).
    POST - для оправки данных которые не влияют на отображение страницы, в том плане что эти данные влияют только на результат выполнения скрипта ( логины, пароли, номера кредиток, сообщения и т.п. ).

    И еще одна хорошая новость их можно комбинировать, например
    POST /index.php?page=login (login=Андрей&password=123) Думаю я уже достаточно объяснил что из этого получится и какие параметры в какой массив попадут.
    Ответ написан
    2 комментария
  • Почему сайт гуляет на мобильных экранах?

    YouFire
    @YouFire
    Потому что у тебя возможно,что то выходит за рамки,просто удаляй всё пока этого не будет,как удалишь тот div и у тебя не будет гулять,восстанавливай код и работай с поломанным div классом
    Ответ написан
    Комментировать