• Что нужно знать про ООП?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    А я бы добавил что ООП это украшение кода, а не его суть

    Cейчас есть способы платить Амазону и вообще не писать код, создавая апишки в админке с помощью мышки. Все что будет нужно от ПХП - это делать простые скрипты которые передают данные из точки А в точку Б. Там вообще не нужен будет ООП, потому что не будет понятия "цельный проект" в рамках папки с файлами. Цельный проект это будет куча компьютеров, а на этом конкретно есть передача из А в Б. И тут уже PHPшники посмеются)) Они то готовы к такому

    Увидев, что тебе понравился первый ответ (может ты его и искал?), я попробую пояснить его для тех, кому термины ничего не говорят:

    https://qna.habr.com/q/655113#answer_1431141

    думаю сейчас ты увидишь как набегут великие архитекторы, которые давали тебе советы по этим словам и начнут говорить что то не про это, а это не так и это не здесь. вот это еще одно что надо знать про ООП. Ты никогда не услышишь, что ты прав, потому что термины заменили им мозг, а если им сказать об этом - они объединяются в стаи, чтобы завалить тебя стикерами и унижениями.
    Ответ написан
    19 комментариев
  • Как заставить работать фильтр элементов по свойству "список" в Битриксе?

    @jasper-blondin
    У Вас есть свойство ARCHIVE типа Список. Вы создали два варианта значений для этого свойства, например:
    - 123--active--Активное
    - 456--archive--Архивное
    Здесь:
    123 -- идентификатор варианта значения
    active -- XML-код значения
    Активное -- описание значения.

    Допустим, нужно отфильтровать только активные записи. Это можно сделать двумя способами.
    1.
    $GLOBALS['arrFilter'] = array("PROPERTY_ARCHIVE" => 123);

    2.
    $GLOBALS['arrFilter'] = array("PROPERTY_ARCHIVE_VALUE" => 'Активное');


    Источник: https://dev.1c-bitrix.ru/api_help/iblock/classes/c...
    Ответ написан
  • Как вурнуть массив из ajax?

    @DanKud
    Потому что это работает не так, как вы подумали. Вы присваиваете своей переменной ссылку на сам AJAX-объект, а не результат выполнения AJAX-запроса. С данными полученными в AJAX-запросе вам нужно работать именно в коллбэк-функции. То есть вот так:
    success: function (res) {
        /* здесь весь остальной код для работы с данными полученными в запросе */
    }});

    Или прописать отдельную функцию и передавать ее имя:
    function customFunc(res) {
        /* здесь весь остальной код для работы с данными полученными в запросе */
    }
    
    $.ajax({ // получаем массив вопросов
        .....
        success: customFunc
    });

    А присвоить эти данные переменной можно только через промис. Например так:
    (async () => {
        let array = await new Promise(resolve => {
            $.ajax({ // получаем массив вопросов
                type: "POST",
                url: '/site/questions',
                cache: false,
                dataType: 'json',
                global: false,
                success: function (res) {
                    return resolve(res);
                }
            });
        });
        console.log(array); /* вот сейчас в переменной будет то, что вам нужно */
    })();
    Ответ написан
    4 комментария
  • Как менять картинки в своем слайдере из админки в wordpress?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Везде пишут про специальные плагины для WP. Но можно ли обойтись без них?

    Можно и даже нужно.

    Ready-made плагины слайдеров для WP - адский треш и угар. Там обычно целый Adobe Premier и Adobe AfterEffects в админке, позволяющий настраивать эффекты переходов между слайдами, длительность (и даже кривую Bezier) анимаций и тд. Разумному человеку эта ересь конечно же не нужна.

    Для вывода загруженных картинок в свой слайдер вам всего лишь нужно получить нужные аттачменты (post type) с помощью запроса WP_Query. Как организовать механизм загрузки картинок в админке именно в нужном вам месте (Customizer, страница настроек, страница редактирования front page и тд) - зависит от того где вам это надо, но наиболее простой и удобный способ - воспользоваться плагином ACF (или аналогом).
    Ответ написан
    2 комментария
  • Как соединить линиями блоки div?

    arsenty
    @arsenty
    Full Stack Designer
    Без JS и с описанной адаптивностью: https://codepen.io/arsenty/pen/mYxXoQ
    Ответ написан
    1 комментарий
  • Какие есть открытые Vue проекты?

    @AndrewStr
    Есть неплохой репозиторий который содержит приложение из "реального мира разработки", одна спека - множество реализаций, Vue там тоже есть:
    https://github.com/gothinkster/realworld
    Ответ написан
    Комментировать
  • Существуют ли сайты, которые созданы в Elementor и от которых сносит крышу?

    OtshelnikFm
    @OtshelnikFm Куратор тега WordPress
    Обо мне расскажет yawncato.com
    Однажды строители изобрели панели. И стали из них строить панельные дома. Быстро. Но на одно лицо. И с ограничение в этажность. Но эти дома текут, ветер в щелях гуляет. И если хлопок не дай боже - то разваливаются как карточные домики.
    Вот это и есть элементор и другие пейдж билдеры.

    Крутого пейджбилдерного сайта я не видел.

    Да блин и без них все сайты на одно лицо. Вон медиум или хабр - не на ВП совсем. А все равно унылые сайты.
    Крутые сайты, что иногда попадаются, сносят крышу моему кулеру на процессоре - они просто нагибают браузер и съедают все ресурсы. Нафиг такие рюшечки.
    Ответ написан
    2 комментария
  • Как убрать все лишние тэги генерируемые Contact Form 7?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Здравствуйте!
    Обычно помогает:
    define( 'WPCF7_AUTOP', false );
    Подробная инструкция здесь - https://stackoverflow.com/questions/32539905/conta...
    Ответ написан
    5 комментариев
  • Как сверстать такой элемент, если блоков не 4 а больше?

    flapflapjack
    @flapflapjack
    на треть я прав
    Стиль с поворотными стрелками назначается для :first-child и :last-child, остальные внутри имеют одинаковый резиновый стиль с flex

    Ответ написан
    9 комментариев
  • Разные размеры миниатюр на главной странице?

    wppanda5
    @wppanda5 Куратор тега WordPress
    WordPress Mедведь
    <?php if ( have_posts() ) :  $n=1; while ( have_posts() ) : the_post(); 
    $flag = $n%5 ;
    /** если повторяете через 5 постов то делите по модулю на 5
    * дальше от результата деления подставляете 
    * необходимый размер миниатюры
    * соответственно при $flag = 2 ||  $flag = 4 средний
    * при 6 и 8 мелкий
    * при 0 большой
    * и на новый круг
    * или 
    *if( $flag >0 && $flag < 5 ) {
    * } elseif { ( $flag > 5 ) {
    *} else {
    *}
    */
    
    
    $n++; endwhile; else: ?>
    <p><?php _e('Sorry, no posts matched your criteria.'); ?></p>
    <?php endif; ?>
    Ответ написан
    Комментировать
  • Как вы учитесь и ищете чужие исходники?

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

    Так из обычной html-верстки я начал влезать в js и php одновременно, но предпочтение все же отдал js, хотя и ковыряние в вордпрессе дали некоторое понимание как работает php и как стоит писать/как не стоит.

    Далее я уже не боялся брать чуть более сложные задачи (для меня тогда), просто рылся в скриптах, которые использовал (чтобы понимать почему ЭТО работает). На том же вордпрессе стал делать более грамотные темы, писать возможности кастомизации и прочее, шаг за шагом в этом разбираетесь и все.

    Далее, открыв все прелести говнокодинга на js, я стал покупать себе книги, читать статьи, смотреть что пишут другие, иногда просто заходил и смотрел ролики на ютьюбе от забугорных ребят.

    Спустя какое-то время наслышавшись всяких ES5, React, Angular, Vue, стал просто читать что это, как это, ничерта не понял, закрыл.

    Через какое-то время уровень проектов пошел такой, что я понял смысл использования того же VUE, открыл всю ту же зеленую книгу с носорогом стал вдоль и поперек ее изучать. Спустя время, документация по vue меня нисколько не пугала, я сел и стал переписывать проект, который до этого писал на javascript + jquery.

    С тем же PHP такая же ситуация, мне просто стало интересно (а иногда и нужно), как работаю серверы, как делаются api и так далее, товарищ, работающий в подобной сфере в хорошей компании, быстро сказал в каких аспектах я дно, после того как я задал ему пару глупых вопросов. И я стал снова: читать статьи, практиковаться, исправляться, смотреть что пишут другие.

    В целом схема обучения проста: вы берете какую-то задачу, которую сходу не можете сделать, начинаете ее решать, пока решаете, возникает куча вопросов, вы ищете информацию, МНОГО ИНФОРМАЦИИ, так и учитесь. Я соглашусь, что пилить всякие todo листы наверное не интересно, попробуйте написать что-то интересное для себя, либо интересное с точки зрения: ВАУ Я МОГУ СДЕЛАТЬ ЭТУ ВЕЩЬ.

    Самое главное - не пытайтесь гнаться за всем подряд, не надо сидеть разбираться с гитхабом, если на вашем уровне профессионализма он вообще никак не задействован. Не надо учить React, Vue, Angular, если на вашем этапе профессионализма они вам не требуются. Не надо вникать в ООП, если для вас написание простых функций уже является сложностью. Делайте постепенно и не гонитесь ни за чем.
    Ответ написан
    4 комментария
  • Как сверстать шапку такой формы?

    Ankhena
    @Ankhena Куратор тега CSS
    Нежно люблю верстку
    Без SVG, картинок и псевдоэлементов,
    CSS only

    Ответ написан
    24 комментария
  • Как передать значение переменной между файлами шаблона на wordpress?

    RadCor
    @RadCor Автор вопроса
    Если мой ответ вам помог, отмечайте его решением.
    Пришлось усердно погуглить, что бы найти решение.
    А решение оказалось очень простым.
    Вместо get_template_part() использовать более низкоуровневую функцию locate_template()
    include (locate_template('header.php'));
    Ответ написан
    2 комментария
  • Как создать связанные записи в момент сохранения модели?

    @Novikofff
    PHP Developer
    В Модели Node создать релэйшены к Events и Places:
    /**
         * Relations to Events
         *
         * @return HasMany
         */
        public function events() : HasMany
        {
            return $this->hasMany(Events::class);
        }
    
        /**
         * Relations to Places
         *
         * @return HasMany
         */
        public function places() : HasMany
        {
            return $this->hasMany(Places::class);
        }


    А потом уже после создания элемента сущности работаешь через эти релейшены:
    $node = Node::create([
        'title' => 'foobar',
        'etc' => '123'
    ]);
    $node->events()->create([
        'title' => 'foobar',
        'etc' => '123'
    ]);
    $node->places()->create([
        'title' => 'foobar',
        'etc' => '123'
    ]);


    Или так:
    Node::create([
        'title' => 'foobar',
        'etc' => '123'
    ])->events()->create([
        'title' => 'foobar',
        'etc' => '123'
    ]);
    Ответ написан
    4 комментария
  • С чего начать изучение Laravel?

    MrSPV
    @MrSPV
    Ведущий специалист по наладке систем АСДУЭ
    По этому сайту не плохо начать cccp-blog.com/category/laravel.
    Ответ написан
    Комментировать
  • С чего начать изучение Laravel?

    leto2015
    @leto2015
    Веб-разработчик
    Привет!
    Перед тем как начать изучать Laravel, советую посмотреть https://www.youtube.com/watch?v=e6GW8LIPxB0&list=P... . Автору удается очень доходчиво и понятно показать построение систем.
    По этим видео можно понять суть не только Laravel, но возможно и суть других фрейворков.
    --------------------------------------
    Но если нужно очень быстро, то верстаешь сайтик в 5 страниц (либо лендинг) + админка. "Сажаешь"
    его на Laravel. Со всеми авторизациями, с отправкми почты, админками, формами, валидациями. Работаешь с двумя русскоязычными сайтами, там достаточно много информации. На одном почти официальная переведенная документация, а на другом готовые решения в виде небольших статей. Ну и плюс видосы в формате поиска конкретной задачи. Если будет совсем непонято задаешь вопросы на различных ресурсах. При определенном упорстве это займет неделю. Конечно до совершенства будет далековато, но осознание "...как я жил все эти годы без Laravel..." придет.
    Всего вам доброго и удачи!
    Ответ написан
    Комментировать
  • Тестовое задание (Junior Frontend), приемлемое ли?

    bootd
    @bootd Куратор тега CSS
    Гугли и ты откроешь врата знаний!
    При чём тут какая-то связка с php? Как php вообще относится к вёрстке? Если вы там адаптивности боитесь, то, лично моё мнение, вам ещё нужно подтянуть знания и вы себя в оценке переоценили))

    Что насчёт самого макета, то я бы сказал, слишком лёгкий. Чё тут делать то? Карту вставить? Подвигать стрелочки при наведении через css? Сделать кнопку с раскрытием меню?

    P.S. Я никак не хочу обидеть или оскорбить вас, но я не понимаю, сути вашего вопроса. У вас навыки 70% х 30%, а вы вместо того, что бы начать верстать, пришли сюда с глупым вопросом, а не слишком ли сложно!
    Ответ написан
    2 комментария
  • Как сделать на php использование прокси?

    muzikant777
    @muzikant777
    PHP/Vue разработчик
    $proxyList = [
        ['ip' => '1.2.3.4', 'port' => '1234'],
        ['ip' => '4.3.2.1', 'port' => '5678'],
    ];
    $requestOptions = [
        CURLOPT_RETURNTRANSFER => TRUE,
        CURLOPT_CONNECTTIMEOUT => 3,
        CURLOPT_TIMEOUT        => 7,
    
    ];
    $ch = curl_init('http://test.ru/get?a=1&b=2');
    curl_setopt_array($ch, $requestOptions);
    foreach ($proxyList as $item) {
        curl_setopt($ch, CURLOPT_PROXY, $item['ip']);
        curl_setopt($ch, CURLOPT_PROXYPORT, $item['port']);
        $response = curl_exec($ch);
    }
    
    curl_close($ch);
    Ответ написан
    5 комментариев
  • Как реализуется SPA-приложение, на примере Vue.js?

    @game802 Автор вопроса
    Дали ответ на другом ресурсе, может быть кому пригодится:
    1. Да, на нем пишут как простые штуки таки и полноценные SPA, навигация работает без презагрузки.
    2. Nuxt js это сборка (VueJS + VueRouter и т.д.) которая делает Рендеринг SPA приложения на стороне сервера. Зачем он это делает? - все очень просто. SPA приложения неиндексируются поисковыми ботами из-за своей асинхронности и JS, NuxtJS решает эту проблему, делая рендер на стороне сервера (выполняет все асинхронные действия например запрос к бекенду по REST, и возвращает отрендеренный HTML)
    3. SSR (серверный рендеринг), генерирует ту страницу которую запросил пользователь например: example.ru/item/12, в данном случае SSR спросит у бэкенда Item с id = 12 , и затем сгенерирует и вернет клиенту HTML. В конце HTML документа всегда подключен файл вашего SPA приложения, который исполнится и включит реактивность. Т.е. Получается что первый запрос к сереверу это отрендеренный SSR, а все остальные переходы по приложению это уже SPA
    4. Да, просто ставите NuxtJS и наслаждаетесь разработкой.
    5. Взаимодействует через REST, делая GET|POST запросы на ваш бекенд. Либо через socket. Используйте laravel 5 как бэкенд
    6. Vuex это централизованное хранилище данных. предназначено для того чтобы жёстко отделять данные от view. Все данные хранятся в едином экземпляре, и если происходит set (мутация) для какого-либо значения в хранилище, то во всех местах где был get этого значения, произойдёт обновление.
    Этим обеспечивается реактивность, сайт перестаёт быть просто страницей. Он если хотите "обретает душу"

    Иногда в простых админках я создаю всего один основной action который делает т.н. getAllState, т.е. Берет все состояние относительно пользователя у бекенда. Например берет объекты user, comments, posts. Billing, messages и пишет это в хранилище.
    И когда мне надо обновить данные, я опять вызываю getAllState который обновит хранилище, в это время автоматически вызовется цепочка геттеров/сеттеров и вот тут сработает магия vue. Он сравнит текущий отрендеренный DOM с Новым Virtual DOM. И если где то будут различия он перерендерит этот кусок.

    Очень сложно объяснять это. Надеюсь я смог донести хоть частичку всей концепции.
    Думаю про доки говорить не стоит. Ведь все что сказано выше там написано в более подробной форме)

    Автор: Евгений Рюмин
    Ответ написан
    4 комментария
  • При нажатии на плюс значение прибавляется, при нажатии на минус убавляется. Как сделать?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Сколько предполагается таких элементов - один или несколько? Будем считать, что несколько.

    Общий принцип тут такой - поймали клик по кнопке; определили, что за кнопка (т.е., как должно будет измениться значение, плюс или минус единица); от кнопки поднялись до общего предка кнопки и элемента, содержащего значение, внутри общего предка нашли элемент со значением; обновили значение.

    Вариант раз - назначаем обработчики клика каждой кнопке индивидуально:

    function setOnClick(selector, change) {
      function onClick({ target: t }) {
        const el = t.closest('.style-item_count').querySelector('.style-count-number');
        el.innerText = el.innerText.replace(/\d+/, m => Math.max(0, +m + change));
      }
    
      document.querySelectorAll(selector).forEach(n => n.addEventListener('click', onClick));
    }
    
    setOnClick('.style-count-plus', 1);
    setOnClick('.style-count-minus', -1);
    
    // или
    
    function setOnClick(selector, change) {
      $(selector).on('click', e => {
        $(e.target)
          .closest('.style-item_count')
          .find('.style-count-number')
          .text((i, text) => `${Math.max(0, parseInt(text) + change)} шт`);
      });
    }

    Вариант два - делегирование, один обработчик на всех. Если не менять разметку, то

    document.addEventListener('click', ({ target: t }) => {
      const change =
        t.classList.contains('style-count-plus')  ? +1 :
        t.classList.contains('style-count-minus') ? -1 :
                                                     0;
      if (change) {
        const el = t.closest('.style-item_count').querySelector('.style-count-number');
        el.innerText = `${Math.max(0, parseInt(el.innerText) + change)} шт`;
      }
    });
    
    // или
    
    $(document).on('click', '.style-count-plus, .style-count-minus', e => {
      const $target = $(e.target);
      const change = $target.hasClass('style-count-plus') ? 1 : -1;
    
      $target
        .closest('.style-item_count')
        .find('.style-count-number')
        .text((i, text) => text.replace(/\d+/, m => Math.max(0, +m + change)));
    });

    Но если кнопкам добавить data-атрибуты, которые будут указывать, на сколько надо изменить значение, а самому значению добавить обёртку (чтобы отделить его от единиц измерения), то код можно немного упростить:

    <div class="style-item_count">
      <div class="style-count-minus" data-change="-1">-</div>
      <div class="style-count-number"><span>1</span> шт</div>
      <div class="style-count-plus" data-change="+1">+</div>
    </div>

    document.addEventListener('click', ({ target: t }) => {
      const change = +t.dataset.change;
      if (change) {
        const el = t.closest('.style-item_count').querySelector('.style-count-number span');
        el.textContent = Math.max(0, +el.textContent + change);
      }
    });
    
    // или
    
    $(document).on('click', '[data-change]', function() {
      $(this)
        .closest('.style-item_count')
        .find('.style-count-number span')
        .text((i, text) => Math.max(0, +text + +this.dataset.change));
    });
    Ответ написан
    1 комментарий