• Популярные плагины для Laravel - какие именно?

    ajaxtelamonid
    @ajaxtelamonid
    Laravel
    Совсем мастхэв наверное только два
    barryvdh/laravel-ide-helper
    barryvdh/laravel-debugbar
    А дальше по задачам, какие надо решать.
    Очень хорошего качества пакеты у этих ребят:
    https://spatie.be/open-source/packages
    https://github.com/beyondcode
    Если сайт не чистый SPA, но активно юзается js в виджетах, то скорее всего понадобится следующее:
    aaronlord/laroute
    laracasts/PHP-Vars-To-Js-Transformer
    Ответ написан
    4 комментария
  • Как заказать статью на Хабре?

    wilelf
    @wilelf
    SEO, музыка, веб-аналитика
    Как вариант - поискать похожие по тематике статьи, и напрямую обратиться к автору. Статьи, правда, будут публиковаться от их аккаунтов.
    Мы тоже с этим направлением работаем. Здесь описание и ссылка на кейс: https://www.nevsem.ru/content-marketing
    Ответ написан
    Комментировать
  • Что за строка и как ее распарсить на php?

    @WebEagle
    это результат выполнения функции serialize, для получения исходного объекта воспользуйтесь
    unserialize('a:2:{s:2:"uk";i:3860;s:2:"ru";i:2423;}')
    Ответ написан
    Комментировать
  • Что означает "?v=1" при подключении .css?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Означает, что какая бы ни была кеширующая система на сервере и на клиенте, добавление такой фигни форсирует кеш (почти) без вариантов, потому что это как бы другой файл. То есть если что-то изменили в css, можно это добавить, и в новой страничке загрузится новая версия css, а не из кеша.
    Ответ написан
    4 комментария
  • Как обернуть переменную PHP в тег?

    @sergmit
    <a href="<?= $doc['url'] ?>">Ссылка</a>
    Ответ написан
    Комментировать
  • Как в yii2 создать несколько тем?

    slo_nik
    @slo_nik Куратор тега Yii
    Добрый день.
    Когда-то тоже интересовался этой темой. Есть несколько вариантов решения проблемы.
    Например, в SiteController можно сделать так:
    public function init() 
        {
            parent::init();
            // Вариант 1
            // Работает без компонента в конфигурации
            // 'view' => [
            //    'theme' => []
            // ]
            $theme = Yii::$app->request->get('theme');
            if($theme){
                $this->getView()->theme = Yii::createObject([
                    'class' => '\yii\base\Theme',
                    'baseUrl' => '@web/themes/'.$theme,
                    'basePath' => '@app/themes/'.$theme,
                    'pathMap' => ['@app/views' => '@app/themes/'.$theme],
                 ]);
             }
            
            // Вариант 2
            //Работает, если в конфигурации есть компонент без параметров
            // 'view' => [
            //    'theme' => []
            // ]
            Yii::$app->view->theme->basePath = '@app/themes/admin';
            Yii::$app->view->theme->baseUrl = '@web/themes/admin';
            Yii::$app->view->theme->pathMap = ['@app/views' => '@app/themes/admin'];
    
        } 
    
        // Вариант 3
        // устанавливает тему на лету
        // вид ссылки
        // <a href="themeswitch/theme=theme_name">theme_name</a>
        // 
        public function actionThemeswitch($theme)
        {
    
            if($theme == 'default'){
                Yii::$app->response->cookies->remove('theme');
                return $this->redirect(['index']);
            }
    
            $options = ['name'=>'theme','value'=>$theme,'expire'=>time()+86400*365];
            $cookie = new \yii\web\Cookie($options);
            Yii::$app->response->cookies->add($cookie);
    
            return $this->redirect(['index']);
        }
    
        public function beforeAction($action)
        {
            if (parent::beforeAction($action)) {
                if (Yii::$app->request->cookies['theme']) {
                    $theme = Yii::$app->request->cookies->getValue('theme');
    
                    Yii::$app->view->theme = new \yii\base\Theme([
                        'pathMap' => ['@app/views' => '@app/themes/'.$theme],
                        'baseUrl' => '@web',
    
                    ]);
    
                }
                return true;  // or false if needed
            } else {
                return false;
            }
        }

    Ещё вариант Как правильно сделать свою themes для проекта на yii2?
    Мой пример(вариант № 3)

    P.S. Пример по варианту № 3 придуман не лично мной. Нашёл на просторах инета, может даже на toster.ru. Показал как demo.

    P.S.S
    Допустим тема Portfolio(по ссылке.)
    Тема находится по пути themes/portfolio
    Изображения для темы themes/portfolio/assets/ims (там же находятся css, js)
    Виды темы в themes/portfolio/views/site
    В файле index.php темы
    use app\assets\PortfolioAsset;
     $image = PortfolioAsset::register($this);
     $theme = $this->theme;

    Изображения в этом же файле подключаю так:
    echo Html::img($image->baseUrl.'/img/portfolio-1.jpg',
                             ['alt' => '']);

    И конечно же в PortfolioAsset такой параметр
    public $sourcePath = '@app/themes/portfolio/assets';
    Ответ написан
    9 комментариев
  • Почему возникает ошибка 530 Login or password incorrect в FileZilla?

    shmatuan
    @shmatuan
    8 year of Web, 5 years of Vue
    Login or password incorrect

    Потому что неправильный логин или пароль -_-
    Ответ написан
    4 комментария
  • Оценка своего уровня. Как улучшить код?

    rockon404
    @rockon404 Куратор тега React
    Frontend Developer
    1. Используйте const вместо let для определения переменных которые не переопределяются в коде. Это помогает снизить когнитивную нагрузку с человека читающего код и негласный стандарт в React разработке.

    2. Такие вещи как globalStyles и конфигурацию store лучше вынести в отдельные файлы. Они могут со временем хорошо разрастись.
    По поводу globalStyles, вы вообще можете вынести их в отдельный css файл.

    3. Вместо:
    {
      isModal
      ? <Route path="/auth" component={AuthPopup} />
      : null
    }

    лучше:
    {isModal && <Route path="/auth" component={AuthPopup} />}


    4. Вместо:
    function mapDispatchToProps(dispatch) {
        return {
            autoLogin: () => dispatch(autoLogin()),
            getBrowser: () => dispatch(getBrowser()),
            getMedia: () => dispatch(getMedia())
        }
    }


    лучше:
    const mapDispatchToProps = {
      autoLogin,
      getBrowser,
      getMedia,
    };


    5. Точки с запятыми в конце то есть, то нет. Определитесь и приведите код к одному виду.

    6.
    & label {}
    & input {}
    & span {}

    Это не очень хороший подход. Во-первых ваши стили не изолированные, что может приводить к неожиданным результатам. Во-вторых у вас очень много дублирования стилей. Определите Input и Label как базовые компоненты и используйте в разных местах, то же с остальным если есть.

    7. Почему папка со страницами называется Containers? Дань бойлерплейтам?

    8. Использование trailing comma является хорошей практикой.

    9.
    import {combineReducers} from 'redux';
    import photoReducer from './photoReducer';
    import authReducer from './authReducer';
    import globalReducer from './globalReducer';
    
    export default combineReducers({
        photoReducer, authReducer, globalReducer
    })


    Все таки приятней работать с хранилищем в котором ключи не имеют в названии слова reducer:
    import {combineReducers} from 'redux';
    import photo from './photoReducer';
    import auth from './authReducer';
    import global from './globalReducer';
    
    export default combineReducers({
      photo, 
      auth,
      global,
    });


    10. Забудьте вообще, что в языке есть возможность использовать вложенный тернарный оператор:
    return e === 'invalid-email' ? 'Неверно указан e-mail'
        : e === 'user-not-found' ? 'Указанный e-mail на найден'
        : e === 'wrong-password' ? 'Неверный пароль'
        : e === 'email-already-in-use' ? 'Указанный e-mail уже используется'
        : e === 'network-request-failed' ? 'Нет подключения к интернету'
        : e === 'operation-not-allowed' ? 'Произошла ошибка, попробуйте снова'
        : e === 'popup-closed-by-user' ? 'Окно авторизации закрыто пользователем'
        : e === 'account-exists-with-different-credential' ? 'Аккаунт уже существует с другими данными, используйте другой способ авторизации'
        : e

    Это одна из самых худших практик в JavaScript разработке. Тут лучше подойдет конструкция switch case

    11. Константы actionTypes лучше вынести в папку constants и разложить по разным файлам, иначе со временем у вас там будет свалка.

    12. Вместо:
    import {SET_ACTIVE, CHANGE_VALUE, SET_DEFAULT, UPLOAD, UPDATE_IMAGE, SET_IMAGE_ERROR, SET_LIKE, SET_COMMENT, ADD_ARTICLE_SUCCESS, FETCH_ARTICLES_START, FETCH_ARTICLES_SUCCESS, FETCH_ARTICLES_ERROR} from '../actions/actionTypes';

    Лучше:
    import {
      SET_ACTIVE,
      CHANGE_VALUE,
      SET_DEFAULT, UPLOAD,  
      UPDATE_IMAGE,
      SET_IMAGE_ERROR,
      SET_LIKE,
      SET_COMMENT,
      ADD_ARTICLE_SUCCESS,
      FETCH_ARTICLES_START,
      FETCH_ARTICLES_SUCCESS,
      FETCH_ARTICLES_ERROR,
    } from '../actions/actionTypes';


    13. Попробуйте внедрить библиотеку reselect. И для получения значения из store вместо записи вида:
    function mapStateToProps(state) {
        return {
            browser: state.globalReducer.browser
        }
    }


    использовать селектор:
    const mapStateToProps = state => ({
      browser: browserSelector(state),
    });
    Ответ написан
    12 комментариев
  • За работу в офисе больше платят, или как верстальщики 1000$ зарабатывают?

    opium
    @opium
    Просто люблю качественно работать
    Частные случаи возможны, но глобально на рынке верстальщики не знающие жс никому не нужны нынче.
    Ответ написан
    3 комментария
  • Почему купленное доменное имя заблокировано?

    Francyz
    @Francyz
    Photographer & SysAdmin
    Данный вопрос надо задавать не людям из интернета, а в службу тех поддержки компании в которой купили домен.
    Ответ написан
    Комментировать
  • Почему пишет, что хедер уже послан?

    DevMan
    @DevMan
    вангую: файл сохранен в кодировке с bom.
    Ответ написан
    2 комментария
  • Возможно ли создать сайт " поиск авиабилетов " на Vue или ...?

    @Doc44
    Нет.
    Если вы задаете такие вопросы, то лично у вас ничего не выйдет.

    А вообще можно конечно.

    Дело не в инструменте.
    А в степени вашего владения им.

    Инструменты-то - универсальны.
    Ответ написан
    4 комментария
  • Почему не работает цикл?

    @Arik
    $i = count($url_arts);

    тут < или <= , но никак не =

    По коду получается вы переменной $i присваиваете результат count($url_arts), что дает тот же результат условию. Выходит если кол-во 0, то будет false, если больше нуля - true, и никакое кол-во итераций не изменит эту ситуацию, на что и получаете бесконечный цикл
    Ответ написан
    Комментировать
  • В чем смысл ВУЗа?

    @Anthony7
    Лохотрон это, просто попробуй связаться с работодателями с интересной для тебя вакансией, скажи что знаешь все что они хотят, но диплома у тебя нет. Если согласятся, забивай на ВУЗ. В наших вузах из полезного только столовая и телки. Я лично отучился и толку никакого, последние пару лет тролил преподов, что они тупее большинства студентов (мой ВУЗ сейчас в середине рейтинга лучших универов по стране). Они растягивают любую программу и добавляют туда воды, чтобы ты подольше платил)
    Ответ написан
    3 комментария
  • Php не видит $_POST['data'] передаваемые ajax-ом?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Так вы и не передаёте $_POST['data']. Сделайте var_dump($_POST) и увидите, что пришло.
    Ответ написан
    1 комментарий
  • Сравнение безопасности 1c bitrix и сайт на yii?

    usdglander
    @usdglander
    Yipee-ki-yay
    Думается мне, что никто за вас безопасным приложение не сделает. Поэтому любая платформа + прямые руки и трезвая голова.
    Хотя из этих двух вариантов я бы выбрал Yii2.
    Ответ написан
    Комментировать
  • Сравнение безопасности 1c bitrix и сайт на yii?

    Zatmil
    @Zatmil
    Fullstack-разработчик
    ИМХО, Битрикс - худшее из всего, что только можно выбрать. И я не только о безопасности говорю.

    Если речь идет о высокой степени защищенности сайта, то тут вопрос не о выборе фреймворка и надежде на его внутренние механизмы, а о выборе специалиста, который сможет реализовать это.
    Ответ написан
    1 комментарий
  • Почему не воспроизводится видеобекграунд В ХРОМЕ?

    sagrana
    @sagrana
    Вёрстка и немного кодинга)
    Мне помог атрибут muted
    <video muted autoplay loop>...</video>
    Ответ написан
    1 комментарий
  • Как извлечь из БД MySQL больше одной строки?

    @Yan-s
    где код?
    Ответ написан
    Комментировать