• Vue.js + Wordpress?

    @FullStackAlex Автор вопроса
    Веб-разработчик, электрик, кочевник
    Наконец таки я решил все технические вопросы для внедрения Vue.js в WordPress-Workflow. Долго я к этому шёл. Трудно было совместить freelancing на основе WordPress и WooCommerce и одновременно самообучение Symfony и Vue.js и создание первых реальных проектов на их основе. Но создание первого большого проекта на основе headless Symfony 4 (JSON API) и потребителя на основе Vue.js меня хорошо продвинуло вперед в направлении внедрения Vue.js в WordPress. Почему мне так интересен WordPress/WooCommerce умея делать Backend на основе Symfony? Потому что WordPress делает доступным веб технологии и маленьким клиентам по "демократическим" ценам, при этом всё ещё позволяя фрилансеру хорошо заработать (по крайней мере в Берлине, где я проживаю).

    Так как путь сюда до сих пор никем в интернете детально не описан и я угрохал недели если не месяцы на решение этой задачи прочитывая все статьи и docs с этой темой связанные (освоил для этого даже наконец таки Docker и Nginx и углубил знания в настройке Webpack) и пройдя многие не верные пути (vue-cli, nuxt.js) - я решил создать в течении следующих недель курс на Udemy.com на английском за 20 баксов. Если будет тут достаточно интереса (хотя бы лайков 10 ), то сделаю туториал и на русском. Курс будет содержать настройки Webpack, Docker (optional), Apache/Nginx. Моё решение сохраняет в отличии от nuxt.js все преимущества как WordPress так и Vue.js при этом соблюдая "законы" SEO и Social Marketing (Twitter Cards, Facebook Open Graph итп) и самое главное Hot Module Replacement с PHP/WordPress Templates!!!!!! .
    Я очень разочарован Nuxt.js и расскажу в Tutorial почему он далеко не во всех случаях технически годен и почему с точки зрения open source этот проект не оптимальный исходя из моего личного опыта.

    UPDATE 15.05.2019
    К сожалению руки до туториала так и не дошли. Но создал Github Repo с простым Starter Theme.
    Демо можно тут просмотреть: wue-theme.app
    Пока без доскональной документации. Надеюсь к концу месяца создам.
    Приколы темы:
    -Hot Module Replacement с PHP файлами (если только это интересно можно и тут скачать Webpack config)
    -полная поддержка SEO без Server Side Rendering (SSR). Реализуется это за счёт загрузки данных вместе с HTML в глобальном JS объекте "technomad", вместо дополнительного AJAX-запроса, что не поддерживается гуглом и для чего и нужны все прибамбасы типа Nuxt.js и phpv8/v8js.
    -элементы меню и новости автоматически добавляются через WordPress-Backend.
    -тема устонавливается как и любая другая тема без каких либо дополнительных настроек сервера (нужно скачать всю Repository и скомпремировать "wuetheme" папку в ZIP и тогда можно просто загружать как и обычную тему).
    -Github Repo без данных из демонстрации. Может ещё добавлю функцию установки демо данных.
    -сервер демо во Франкфурте без CDN. Так что во Владивостоке загрузка наверное немного дольше длится будет)) Из Берлина за 600-700ms загружается с VPS.
    -есть ещё много над чем работать (pagination, проверка загруженны ли скрипты и стили плагинов при Ajax route change, пока они загружаются только при инициальной загрузки, но скрипты и стили могут быть на каждой странице иные) , нo даже в данном виде эта тема на сколько я знаю уникальная.
    -тут можно проследить прогресс перестройки моего сайта с этой темой: stage.alexfullstack.dev, там больше клёвых анимаций))
    Пока всё. Have fun :)

    Update 30.05.2019
    Много чего обновил на Github.

    Update 02.06.2019
    Я решил вчерашнюю проблему)))
    Нужно было просто выспаться))
    Завтра подробно опишу и обновлю Github Repo.

    Update 03.06.2019
    -загрузил на Github новую "bulletproof SEO" версию с "Dynamic Rendering Implementation"
    -подробная статья тут

    Update 14.06.2019
    Перенёс сайт на wue-theme.app.
    Демонстрация Github версии тут: starter.wue-theme.app
    Добавил простую Load More Pagination и очистил код.
    Ответ написан
    21 комментарий
  • Удаление элемента?

    @montecazazza
    Node, GraphQL, React
    Если я правильно понял проблему, то вы хотите, привязать к обработчику onClick индекс элемента. Я предпочитаю делать это через замыкания.
    Попутно советую перенести bind в конструктор.
    Кстате, bind можно не делать, если заменить объявление метода на стрелочный синтаксис тогда все станет намного наглядней метод будет выглядеть вот так и как я сказал bind не нужен:
    removeCount = (idx) => (/*сюда будет передан event, но он вам типа не нужен*/) => {
      /* тело с this, он будет autobinded */
    }

    Конструктор тоже будет не нужен, можно просто написать state
    class App extends React.Component {
      //constructor(){
      //  super();
      //  this.state ={
      //   count: [1,2,3,4,5,6,7,8,9]
      //  }
      //  this.removeCount = this.removeCount.bind(this)
      //}
      this.state = {
        count: [1,2,3,4,5,6,7,8,9]
      };
      /*...*/
    }


    Но я сохранил твой вариант
    Если заменить метод splice на не мутирующий slice, то тело функции станет одной строкой без доп. переменных. Подсказка в коде

    class App extends React.Component {
      constructor(){
        super();
        this.state ={
          count: [1,2,3,4,5,6,7,8,9]
        }
      this.removeCount = this.removeCount.bind(this)
      }
      removeCount(idx) {
        return function() {
          let newItems = this.state.count;
          newItems.splice(idx, 1);
          this.setState({count: newItems});
          // this.setState({count: this.state.count.slice(/*чо нада*/)});
          // все что выше в методе тогда не нужно
        }
      }
      render() {
        const list = this.state.count.map(function(index, i){
          return (
            <div 
              key={i} 
              onClick={this.removeCount(i)}>
                <p>{index}</p>
            </div>
          );
        })
        return (
          <div className="row">
           {list}
          </div>
        );
      }
    }
    
    ReactDOM.render(<App />, document.getElementById('container'));


    Ну ОК, мой вариант выглядел бы так (возможны опечатки, пишу прям тут)
    class App extends React.Component {
       state ={
         count: [1,2,3,4,5,6,7,8,9]
      }
      removeCount = (idx) => () => {
        this.setState({count: this.state.count.slice(idx, 1)});
      }
      render() {
        return (
          <div className="row">
           {this.state.count.map(i => (
              <div 
                key={i} 
                onClick={this.removeCount(i)}>
                  <p>{i}</p>
              </div>
            ))}
          </div>
        );
      }
    }
    
    ReactDOM.render(<App />, document.getElementById('container'));
    Ответ написан
    Комментировать
  • Как расположить блоки в столбик?

    bootd
    @bootd Куратор тега CSS
    Гугли и ты откроешь врата знаний!
    Если нужно что бы список сам так выстраивался, иначе я не вижу смысла задавать этот вопрос, то используйте css свойство columns. Гугл в помощь
    Ответ написан
    1 комментарий
  • Как по клику добавлять класс следующим 4 элементам??

    0xD34F
    @0xD34F Куратор тега JavaScript
    $('селектор кнопки').click(function() {
      $('селектор-элементов')
        .not('.класс')
        .slice(0, количествоЭлементовКоторымНадоДобавитьКласс)
        .addClass('класс');
    });

    или

    const items = [...document.querySelectorAll('селектор элементов')];
    
    document.querySelector('селектор кнопки').addEventListener('click', () => {
      items
        .splice(0, количествоЭлементовКоторымНадоДобавитьКласс)
        .forEach(n => n.classList.add('класс'));
    });
    Ответ написан
    Комментировать
  • Где получить опыт в React?

    возможно есть на гитхаб какие опен сорс проекты


    Конечно же есть - их бесчисленное количество. Придумайте себе проект - и реализуйте его вот и опыт будет. По пути попробуйте актуальные библиотеки.. я бы рекомендовал изучить следующие:
    • react-router v4
    • redux, react-redux, reselect, redux-saga, redux-form
    • react-virtualized


    Есть вот такой ресурс - https://github.com/enaqx/awesome-react : там, помимо всего прочего, есть и примеры приложений на реакте.
    Ответ написан
    2 комментария
  • Удаление элемента?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    class App extends React.Component {
      constructor(){
        super();
        this.state ={
          count: [1,2,3,4,5,6,7,8,9]
        }
      }
      removeCount(idx){ // <= здесь было idk (опечатка)
        let newItems = this.state.count;
        newItems.splice(idx, 1);
        this.setState({count: newItems});
      }
      render() {
        const self = this
        const list = this.state.count.map(function(index, i){
          // здесь у вас был не тот this, так как вы используете обычную функцию, а не стрелочную, "this равный компоненту" теряется, чтобы разобраться можете тут сконослить this и self
          return <div key={i} onClick={self.removeCount.bind(self, i)}><p>{index}</p></div>
        })
        return (
          <div className="row">
           {list}
          </div>
        );
      }
    }
    
    ReactDOM.render(<App />, document.getElementById('container'));
    Ответ написан
    2 комментария
  • Datapicker криво отображает дату?

    AlekseyNemiro
    @AlekseyNemiro
    full-stack developer
    Используйте русскую локализацию:

    <script src="i18n/datepicker-ru.js"></script>
    $('#datepicker').datepicker($.datepicker.regional[ 'ru' ]);

    Скачать нужные ресурсы можно отсюда:
    https://github.com/jquery/jquery-ui/tree/master/ui/i18n

    Если вам нужен календарь на английском (или другом) языке, то задать первый день недели можно следующим образом:

    $('#datepicker').datepicker({ firstDay: 1 });
    // или
    $('#datepicker').datepicker('option', 'firstDay', 1);

    Посмотреть рабочий пример

    0 - воскресенье (Su - Sunday)
    1 - понедельник (Mo - Monday)
    и т.д.
    Ответ написан
    Комментировать
  • Разница в отображении у хрома и фаерфокс?

    webirus
    @webirus
    Тыжверстальщик! Наверстай мне упущенное...
    https://jsfiddle.net/webirus/dv5c8jdt/1/
    Я поставил свой reset.css и всё сошлось.

    Используйте корректный сброс стилей и такой проблемы не будет.

    Всё решается строкой.
    https://jsfiddle.net/webirus/dv5c8jdt/2/

    textarea {
        margin: 0;
        border: 0;
    }

    4a39e4be37164483a3b534673e570ad5.png
    Ответ написан
    5 комментариев
  • Как реализовать такую кнопку?

    Raxen
    @Raxen
    TechLead Frontend Developer, Beeline
    В общем суть такая -
    Слайдеру делаешь
    position: relative;

    Кнопку суешь не в слайд, а где-нибудь в контейнере слайдера и прописываешь
    position: absolute;
    z-index: 100;


    Для анимации кнопки все зависит от слайдера, но мысль такая -
    // Ловишь событие движение слайдера (у некоторых слайдеров есть события)
    $('slider').on('sliderMove', function() {
         // Вешаешь на кнопочку заранее написанную анимацию
         $('кнопка').addClass('doAnimation');
         SetTimeOut(function(){
            // Через пол секунды удаляешь анимацию кнопки
            $('кнопка').removeClass('doAnimation');
         }, 500);
    });
    Ответ написан
    3 комментария
  • Как реализовать такие блоки?

    Serj-One
    @Serj-One
    i'm sexy and i know it
    Псевдоэлементы.

    <section>
      <div class="container">
        Lorem ipsum dolor sit amet, consectetur adipisicing elit. 
      </div>
    </section>

    .container {
      width: 500px;
      height: 200px;
      margin: auto;
      background: green;
      position: relative;
    }
    .container:before {
      content: '';
      display: block;
      width: 1000px;
      height: 100%;
      background: green;
      position: absolute;
      left: -1000px;
      top: 0;
    }
    
    section {
      overflow-x: hidden;
    }

    codepen.io/Serj-One/pen/KzKWOO
    Ответ написан
    Комментировать
  • Белая полоса на некоторых страницах сайта в мобильной версии, в чём проблема?

    На странице poisk-auto.com/bort у вас заголовок "Бортовой журнал" с фиксированной шириной, он и дает вам полосу в мобильной версии.
    Ответ написан
    1 комментарий
  • Первая вёрстка. Чему дальше учится и что подтянуть?

    gatilin222
    @gatilin222
    Frontend-разработчик
    Через 3 недели уже подключить слайдер это круто!Я когда учился, первые месяца 3 вообще js не трогал)
    Ответ написан
    Комментировать
  • Первая вёрстка. Чему дальше учится и что подтянуть?

    @asd111
    Вы молодец. Пора искать работу. На работе будут конкретные задачи - сможете учить только то что нужно.
    Ответ написан
    Комментировать
  • Первая вёрстка. Чему дальше учится и что подтянуть?

    Ivanq
    @Ivanq
    Знаю php, js, html, css
    1. Меню, которое вверху, лучше вынести в левый столбец.
    2. Лучше простилизировать кнопку Shop
    3. В одном месте товары в столбик, в другом в линию. Лучше все время, как в начале на зеленом фоне сделано.
    4. Пишется не Bay, а Buy.
    5. Нижнюю часть с featured sale и так далее лучше поставить в несколько колонок и приделать им зеленый фон.
    6. Copyright лучше тоже поставить зеленый фон, вывести текст на середину экрана.
    7. У зеленых квадратов слева лучше не оставлять пустые места.
    (Там, где я указал зеленый фон, цвет текста лучше белый)

    Но для новичка, 3 недели с таким результатом - это очень хорошо. Помню, у меня было хуже.
    Ответ написан
    2 комментария
  • Первая вёрстка. Чему дальше учится и что подтянуть?

    Antonoff
    @Antonoff
    Разработчик
    Кнопку Bay Now, на лучше вертикально центрировать, а то немного вверх сьезжает.
    Ответ написан
    Комментировать