Задать вопрос
  • Какую систему выбрать для документирования рабочих процессов в фирме?

    Мы используем notion.so и довольны как летающие слоны.

    • Может не подойти тот факт, что это SaaS; но в любой момент можно экспортировать всю базу документов в формате Markdown.
    • После определённого объёма документов придётся перейти на тарифный план с оплатой по $8 в месяц за каждого пользователя с правами на редактирование. Все, кто не нуждается в редактировании, могут быть добавлены как гости (без включения в команду), они будут иметь доступ только на чтение и их может быть сколько угодно.
    Ответ написан
    Комментировать
  • Как в react-router сделать сайдбар опциональным?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    Можно сделать 2 разных "разметки", так сказать. В одной у вас есть сайдбар, в другой нет.
    2 разные разметки = 2 разных компонента (роут-с-сайдбаром, роут-без-сайдбара).
    Оборачиваете дочерние роуты в роут-с-сайдбаром, или в роут-без-сайдбара и там рисуете нужный шаблон + this.props.children. Вложенность роутов друг в друга - любая, можно таким образом еще усложнить логику отрисовки шаблона.

    p.s. 4ю версию роута еще не смотрел. Но таким решением пользуюсь с 3й версией, думаю в 4м так же, либо еще удобнее придумали.

    p.p.s. тема с фильтрацией, которую посоветовал Aves тоже подходит.

    (пример, используется getComponent - это для динамической подгрузки)
    <Route path='/reports' component={AuthenticatedContainer} onEnter={_ensureAuthenticated}>
      <Route getComponent={() => def(import('../containers/WiwthSidebar'))}>
        <Route path='/reports/a' getComponent={() => def(import('../containers/A'))} />
        <Route path='/reports/b' getComponent={() => def(import('../containers/B'))} />
      </Route>
      <Route getComponent={() => def(import('../containers/WithoutSideber'))}>
        <Route path='/reports/c' getComponent={() => def(import('../containers/C'))} />
      </Route>
    </Route>
    Ответ написан
    Комментировать
  • Стоит ли выносить папку web?

    webinar
    @webinar Куратор тега Yii
    Учим yii: https://youtu.be/-WRMlGHLgRg
    Смотря как сервер настроен. Вынос web оправдан, что бы содержимое web было в публичной папке, а остальные файлы framework-а за пределами публичной папки. Это безопасность и это меньше танцев с бубнами вокруг .htaccess. Это проще, когда автоподдомены. Да и чисто эстетически красивее.
    В любом случае плюсы есть, минусов нет.
    Вот видео по теме:
    https://youtu.be/hg5t5F3HdM4
    Ответ написан
    4 комментария
  • Как вернуть данные из класса?

    @bagzon
    Backend PHP, NodeJs, JS
    Ты должен заретурнить содержимое своих функций, а они в свою очередь отдадут тебе промис, снаружи ты уже работаешь с промисами как обычно.
    Ответ написан
    5 комментариев
  • Как сделать страницу 404, в проекте, где внутри Route есть другие Route?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    Добавьте его 1 раз в самом низу.

    ReactDOM.render(
      <Router history={browserHistory}>
        <Route path="/" component={Layout}>
          <Route path="/sing" component={SignUp}/>
          <Route path="/profile" component={Profile} />
          <Route path="/register_approve" component={Validation} />
          <Route path="/forgot_password" component={ForgotPassword} />
          <Route path="/confirm_email" component={ConfirmEmail} />
          <Route path="/restore_password/:token" component={RestorePassword} />
          <Route path="/confirm_invite" component={ConfirmInvite} />
          <Route path="/my-cabinet" component={Cabinet} />
          <Route path="/members" component={Members} />
          <Route path="/invite-member" component={InviteMember} />
    
          <Route path="/not_access" component={NotAccess} />
    
          <Route path="/finance" component={Finance}>
            <Route path="/finance/project" component={FinanceProject}/>
            <Route path="/finance/fixed-costs" component={FinanceFixedCost}/>
            <Route path="/finance/fixed-costs" component={FinanceFixedCost}/>
            <Route path="/finance/salary" component={FinanceSalary}/>
            <Route path="/finance/other" component={FinanceOther}/>
          </Route>
        </Route>
        <Route path="*" component={NotFound} />
      </Router>,
      document.getElementById('root')
    Ответ написан
    2 комментария
  • Как лучше спроектировать react приложение?

    k12th
    @k12th
    console.log(`You're pulling my leg, right?`);
    Flux/Redux/MobX не рассматривали? С этими вещами гораздо веселее жить в реакте (хотя, конечно, порог обучения присутствует).

    В принципе, то, что вы ищете, называется паттерн Dependency Injection. Можете поискать какую-то реализацию для React, но, в общем-то, react-redux именно это и делает.
    Ответ написан
    3 комментария
  • Как спроектировать массив для active form с множественным выбором?

    qonand
    @qonand
    Software Engineer
    $form->field($model, 'number_area_stand')->dropDownList($items, ['multiple' => true]);

    позволит выбирать несколько записей (с зажатой клавишей Ctrl). Не стоит так же забывать что если Вы в форме позволяете делать выбор множества значений для атрибута number_area_stand, он должен быть в модели массивом.
    А вообще если стоит задача множественного выбора я бы порекомендовал не использовать стандартный dropDownList. Вместо него лучше использовать специализированные виджеты, например Select2. Это позволит сделать более удобным для пользователя ресурс
    Ответ написан
    Комментировать
  • Как удалить определенный символ, в определенном столбце таблицы?

    Rastishka
    @Rastishka
    UPDATE `table` SET `data` = REPLACE(`data`, '\\\\', '\\');

    Заменяем двойные \\ на одинарные
    Ответ написан
    Комментировать
  • Как удалить определенный символ, в определенном столбце таблицы?

    @d-stream
    Готовые решения - не подаю, но...
    update 'table' set 'field'=replace('field', '\\', '')
    Ответ написан
    Комментировать
  • Как повысить уровень программирования?

    tiabc
    @tiabc
    Бизнес-партнер и консультант по технологиям
    Хорошие разработчики постоянно развиваются и никогда не стоят на месте. Любое развитие состоит в делании дел, в решении конкретных задач и в обратной связи, которую ты получаешь от других или в результате рефлексии.

    TL;DR: Читайте книжки, делайте дела, читайте чужой код.

    Что можно начать делать прямо сейчас, чтобы стать программистом лучше?

    1. Изучайте базу. Алгоритмы, сети, криптографию, архитектуру, ос, устройство браузеров, компиляторы и т.д. Изучение подобных вещей дает понимание какие задачи бывают в реальном мире и как "большие дядьки" решают возникающие проблемы. Это кладезь инсайтов.

    2. Устройтесь на фултайм-работу с сильной командой даже если джуниором. Я считаю, что есть только один способ расти как разработчик: работать фултайм над одним бизнес-продуктом. Такой подход учит решать проблемы масштабируемости, думать заранее, работать над процессом, которому вы следуете в разработке, решать задачи, возникающие с длительной эксплуатацией, решать проблемы с удобными окружениями и вообще учиться планировать свою работу в связи с нуждами бизнеса.

    3. Написание кода - не самая большая часть работы сеньор-девелоперов, я бы сказал. Но когда речь заходит о самом коде, нужно понимать что ты пишешь и зачем. Есть классические книжки, которые можно найти, например, в матрице компетентности программиста, есть современные, но полезные типа The Art of Readable Code, которую я очень рекомендую. Нужно читать книжки. На собеседовании я всегда спрашиваю какие книжки читал или читает соискатель и если ответ отрицательный, то это большой минус.

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

    5. Наберитесь терпения. Это не случится за один день. Думайте над именованием, разделяйте обязанности, изучайте алгоритмы и экосистему, оптимизируйте ваше рабочее место, изучайте новые технологии, читайте статьи и в течение ближайших лет регулярных усилий вы обретете новый способ мышления и будете разрабатывать поддерживаемое и надежное ПО. Легкого пути, к сожалению, нет.
    Ответ написан
    2 комментария
  • Чему научиться за год до эмиграции?

    BBmike
    @BBmike
    Язык, язык, язык и еще раз язык.
    Всё. Больше ни на что не заморачивайся.
    Считай это универсальной аксиомой отбывающего.
    Ответ написан
    10 комментариев
  • Как заставить работать прелоадер?

    yarkov
    @yarkov Куратор тега JavaScript
    Помог ответ? Отметь решением.
    А где у вас элемент с классом report-preloader-title?
    $('.report-preloader > .title') - вижу
    $('.report-preloader-title') - не вижу )))
    Ответ написан
    4 комментария
  • Как формируется datetime в mysql (mariaDB)?

    orlov0562
    @orlov0562
    I'm cool!
    Можно поменять часовой пояс, вот тут написано подробно:
    https://dev.mysql.com/doc/refman/5.5/en/time-zone-...
    Ответ написан
    Комментировать
  • Как сделать условный вывод элементов в стандартном CRUD модуле в YII2?

    slo_nik
    @slo_nik Куратор тега Yii
    Добрый день.
    В контроллере создаёте метод
    public function findModel()
    	{
    		if(!$model = Users::findOne(Yii::$app->user->identity->getId())){
    			return false;
    		}
    
    		return $model;
    	}

    Вывод нужных полей делаете используя данный метод
    public function actionIndex()
    	{
    		return $this->render('index', ['model' => $this->findModel()]);
    	}
    Ответ написан
  • Как в API яндекс метрике, сделать выборку по городам России?

    artemky
    @artemky
    Переходите на api2, там есть группировка по городам:
    https://tech.yandex.ru/metrika/doc/api2/ga/ga/impl...
    Ответ написан
    Комментировать
  • Как лучше всего реализовать временное(на 1 час) сохранение токена в react.js?

    @dmtrrr
    Backend developer
    Не изобретайте велосипед, смотрите JWT.
    В любом случае время жизни токена должен проверять сервер.
    Ответ написан
    Комментировать
  • Как лучше всего реализовать CRUD - DOM на ReactJS?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    по поводу вопроса 2: вам будет необходимо взять еще что-то. Например, можно использовать веб сокеты, чтобы рассылать всем подписчикам события: элемент_создан / удален и т.д. Без такой "рассылки" по подписчикам (подключенным клиентам) не получится сделать, разве что будет какой-то костыль с таймером (не надо так).

    по поводу вопроса 1, за неимением хорошего простого примера под рукой, предлагаю сделать по шагам, если получится - уверяю, с "расширением" пойдет гораздо лучше:

    Например есть страница с номерами телефонов и именем.

    На этой странице у вас компонент PhonesAndNames в момент componentDidMount делаете xhr вызов и получает список всех телефонов и номеров. Например, это GET запрос на ваш сервер: GET /api/phones

    Полученные данные вы кладете в state и в рендере компонента у вас строится таблица по данным из state компонента. Следовательно, как только у вас xhr запрос завершится, данные окажутся в state, случится ре-рендер и все будет хорошо. Для полного счастья, можно добавить переменную isLoading, например, и ставить ей true в начале выполнения запроса, и false в момент получения ответа. В рендере компонента, в зависимости от значения isLoading - рисовать прелоадер. Конечно, isLoading тоже будет жить в state.

    Далее, при наведении на строку - у вас, к примеру рисуется "крестик". По клику на крестик - производится запрос на сервер, например: DELETE /api/phones/айди. Внутри компонента PhonesAndNames это будет просто onClick на элементе крестик и функция, которая опять же отправляет xhr запрос. Когда будет получен ответ, вы должны поиском найти id удаленного элемента из вашего списка в state и вернуть список элементов. Изменился state - случился ререндер - все в порядке.

    Так же с добавлением. Вам достаточно поставить пару input'ов + кнопку "добавить". Опять обработчик на onClick (или на onSubmit, если сделаете это как форму) - опять xhr запрос (POST /api/phones), опять на успешный ответ операция со списком телефонов и имен в state, а именно: банально добавление в конец или в начало нового элемента.

    Остался только update. С ним тоже самое. В простейшем примере, чтобы не заморачиваться, все ваши телефоны и имена могут быть в таблице внутри тэга input и в конце строки, там же где крестик - иконка "обновить".
    ---
    Получается, если вы будете использовать web-сокеты, то вам нужно будет настроить свой сервер так, чтобы в момент успешного ответа на все вышеизложенные методы бродкастилось (от broadcast, т.е. рассылать) какое-то событие, на которое ваши клиенты умеют реагировать.
    ---

    Чтобы все это в процессе "расширения" и "усложнения" не превратилось в трудноподдерживаемую кашу, рекомендую использовать любую из библиотек для "управления состоянияем приложения", так сказать. Мне очень нравится redux.
    Ответ написан
    7 комментариев
  • Как удалить подстроку в строке, если мы знаем только первые символы подстроки и последний символ?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега JavaScript
    // Подстрока начинается с "id-" и заканчивается ";"
    // Между ними может быть всё, что угодно, кроме ";"
    const regexp = /id-.+?;/;
    
    const str = 'foo id-42; bar; baz';
    
    str.replace(regexp, ''); // "foo  bar; baz"
    Ответ написан
    3 комментария
  • Как лучше всего сделать загрузку видео, при скролинге к блоку с видео?

    webirus
    @webirus
    Тыжверстальщик! Наверстай мне упущенное...
    Когда-то давно, делал подобное через viewportchecker.js.
    В момент скролла до блока через replaceWith подгружал блок с видео.
    Для красоты там еще стоял небольшой прелоадер.
    https://jsfiddle.net/webirus/tt0uf3sj/ - добавление всего блока
    https://jsfiddle.net/webirus/tt0uf3sj/1/ - добавление источников в html
    Ответ написан
    7 комментариев