• Как передать значение на другую страницу и отсортировать по нему?

    @Dark19 Автор вопроса
    Сделал через localStorage, мне показалось наиболее удобным и легким решением. Привожу свой код:
    $('.js-post-filter').on('click',function(e){
            e.preventDefault();
            var curFilter = $(this).data('filter'),
                guidesPage = site_url+"/guides";
            localStorage.setItem("singleFilter",curFilter);
            window.location.href = guidesPage;
        });
    
        $(window).on('load',function () {
            var singleFilter = localStorage.getItem("singleFilter");
            if (singleFilter !== null){
                tags.each(function () {
                    if($(this).data('filter') === singleFilter) {
                        $(this).trigger('click');
                    }
                });
                localStorage.clear();
            }
    
        });


    js-post-filter
    - кнопка фильтра на странице single-guides.php, при нажатии берем значение её data атрибута(это значение фильтра по которому происходит сортировка).
    site_url+"/guides"
    - урл сайта + название страницы в адресной строке на которую нужно передать значение.
    localStorage.setItem("singleFilter",curFilter);
    - передаем значение на другую страницу под названием
    singleFilter
    .
    window.location.href = guidesPage;
    - делаем перенаправление на нужную страницу.
    В моем случае понадобилось событие
    onload
    так как по другому не успевало подхватится переданное значение.
    Дальше в переменную
    singleFilter
    записываем переданное значение и проверяем есть ли оно вообще (проверка null).
    tags
    - наши кнопки фильтра на странице guides.php. Проходимся по ним циклом и ищем есть ли там совпадение с переданным значением, если есть делаем событие клик по совпавшей кнопке.
    localStorage.clear();
    - очищаем localStorage.
    Ответ написан
  • Как сделать такой parallax + svg?

    @Dark19 Автор вопроса
    В общем я отыскал для себя 2 варианта:
    1) это воспользоватся нативным скроллом вот я примерчик быстро наваял codepen.io/dark19/pen/ybboPw , но есть проблемка в том, что я не придумал как задерживать секцию до полного выполнения анимации, может кто знает, то подскажитет;
    2) это воспользоватся готовым решением с помощью плагинов GSAP и ScrollMagic (как мне тут подсказали, но удалили коммент). Вот этим вариантом я и воспользовался. Но нужно хорошо разобраться в документации.
    На jquery мне показалось проще как-то все сделать, но у меня не было там сверхзадач в проекте. Мне нужно было просто заполнять свг линию цветом и по мере её заполнения в некоторых участках анимировать блоки html(тут ещё есть грабли: рисуйте svg как path потому, что потом вы не сможете заполнить его цветом, там нужно будет использовать свойства stroke-dasharray и stroke-dashoffset). Но я все таки воспользовался плагинами, хотя, я думаю, зря, так как я вручную прописывал точки заполнения свг и когда должна произойти анимация, по другому я не знаю как вычислить степень заполнения линии. Вот вам ещё пример GSAP + ScrollMagic правда тут он без эффектов codepen.io/dark19/pen/WjwoWm
    Ответ написан
  • Едет верстка на сайте. при добавление в базу товара?

    @Dark19
    Блоки по высоте разные, если хотите использовать флоаты, то нужно убирать обтекание у элемента который переходит на новую строку ( на моем экране это каждый 6 элемент). То есть вы должны сделать каждому 6 элементу
    clear: both;
    Ну и дальше по @media пройтись, если на меньшем разрешении уже помещается 4 элемента, то у каждого 6 ставим
    clear: none;
    а каждому 5 ставим
    clear: both;
    и т.д.
    Или же если нужно чтобы блоки были одинаковые, то задай им фиксированную высоту, как написали люди выше.
    Ответ написан
  • Как добавить в конец ссылки .html?

    @Dark19
    Если я правильно понял вопрос, то нужно в настройках (Settings->Permalinks->Custom Structure) поставить что-то типа такого: https://site_name/%postname%.html
    Ответ написан
  • Как подгружать контента через load, чтобы работали скрипты на элементах?

    @Dark19 Автор вопроса
    В общем пришлось подключать нужные скрипты для плагинов при загрузке анонимной функцией и все заработало:
    $(document).on('click', 'a',function(e){
                if($(this).is('a:not([data-fancybox])') && $(this).is('a[href^="'+site_url+'"]')){
                    //e.preventDefault();
                    locationPrev = window.location.href;
                    var url = $(this).attr('href'),
                        toLoad = url+' #wrapper',
                        content = $('#ajax-content'),
                        opacityContent = $('#content');
                    opacityContent.animate({opacity: 0.1},loadContent());
                    function loadContent(){
                        setTimeout(function (){
                            content.load(toLoad,'',function(r, s, x){
                                $.getScript(home_url+"/wp-content/plugins/contact-form-7/includes/js/jquery.form.min.js");
                                $.getScript(home_url+"/wp-content/plugins/contact-form-7/includes/js/scripts.js");
                                $.getScript(template_dir+"/js/map.js");
                                $('html,body').animate({scrollTop: 0}, 500);
                                opacityContent.animate({opacity: 1},500);
                            });
                        },300);
                    }
    
                    // А вот так просто меняется ссылка
                    if(url != window.location){
                        window.history.pushState(null, null, url);
                    }
    
                    return false;
                }
            });

    Суть такова, что контент который подгружается не виден для скриптов и соответственно они на нем не срабатывают. Может его можно заделегировать как ссылки например, чтобы после подгрузки он был виден, не знаю. Увы другого способа не нашел.
    Ответ написан
  • Почему при ресайзе не меняет высоту элемента?

    @Dark19 Автор вопроса
    В общем я докопался до истины проблемы. Дело в том, что сначала элементам задалась фиксированная высота при заходе на страницу и все она уже не меняется в зависимости от контента, так как функция написана таким образом, что сравнивает высоты и устанавливает наибольшую, но после захода на страницу высоты установились одинаковые. Соответственно при ресайзе нужно высоте давать 'auto', чтобы она могла пересчитываться вновь по максимальной, но тут тоже не всегда срабатывает этот прием, так как бывает хапается старая высота, то есть не успевает сработать 'height: auto', поэтому ещё нужно ставить таймаут.

    function heightTitle(parent, el){
            var height = 0;
            $(parent).find(el).css('height','auto');
            setTimeout(function(){
                $(parent).find(el).each(function(){
                    if($(this).height() > height){
                        height = $(this).height();
                    }
                });
                $(parent).find(el).height(height);
            },300);
        }


    У меня вышло вот так, все работает теперь, но может кто сможет укоротить код функции или обойтись без таймаута, буду очень благодарен.
    Ответ написан
  • Почему так доолго грузится приложение на Angular2?

    @Dark19 Автор вопроса
    В общем нашел неплохую статью где рассказывают как собрать приложение на продакш + есть плагин на гите с готовыми конфигами и вебпаком: https://labs.encoded.io/2016/10/24/angular-2-aot-c...
    Ответ написан
  • Почему не ставится gulp.spritesmith?

    @Dark19 Автор вопроса
    В общем что-то оно не желает устанавливать по такой команде: npm install my-engine-smith@latest --save-dev, которая написана на странице плагина, а вот по такой все нормально поставило: npm install gulp.spritesmith --save-dev
    Ответ написан
  • Есть ли возможность прокручивать элементы массива внутри свойств функции?

    @Dark19 Автор вопроса
    а запустить там циклично перебор нельзя или запустить его в функции, а функцию подать как параметр в свойство?
    Ответ написан
  • Как проверить конечность массива?

    @Dark19 Автор вопроса
    Код писал сам, поэтому не особо хотел выкладывать, велосипед. Это завершающий этап алгоритма Кларка-Райта. Я тут проверяю конечность массивов вот так
    !next($data[$arrCenter[$i]]['j']) && !next($data[$arrCenter[$i]]['i']


    но это не правильно работает.

    $machin = 1200;
    $iter = ceil((count($data[$arrCenter[$i]]['j']) + count($data[$arrCenter[$i]]['i'])) / 2) + ceil($w / $machin);
    
                        for($a=0;$a<$iter;$a++){
    
                                if($data[$arrCenter[$i]]['j'][$a]['order'] == 0 && $data[$arrCenter[$i]]['i'][$a]['order'] == 0){
    
                                    if(($data[$arrCenter[$i]]['i'][$a]['weight'] + $data[$arrCenter[$i]]['j'][$a]['weight']) <= $machin) {
    //проверяем вес, если меньше допустимого, записываем точку пути в новый массив и удаляем данный элемент с текущего
                                        $weight[$a] = $data[$arrCenter[$i]]['i'][$a]['weight'] + $data[$arrCenter[$i]]['j'][$a]['weight'];
    
                                        array_unshift($path[$arrCenter[$i]][$c], $data[$arrCenter[$i]]['i'][$a]['name']);
                                        unset($data[$arrCenter[$i]]['i'][$a]);
                                        echo $data[$arrCenter[$i]]['j'][$a]['name'];echo "<br/>";
                                        array_push($path[$arrCenter[$i]][$c], $data[$arrCenter[$i]]['j'][$a]['name']);
                                        unset($data[$arrCenter[$i]]['j'][$a]);
    
                                    }
                                }
    
                                if($data[$arrCenter[$i]]['j'][$a]['order'] < $data[$arrCenter[$i]]['i'][$a]['order']){
                                    //проверяем вес, если меньше допустимого, записываем точку пути в новый массив и удаляем данный элемент с текущего
                                    if((array_sum($weight) + $data[$arrCenter[$i]]['j'][$a]['weight']) <= $machin) {
    
                                        $weight[$a] = array_sum($weight) + $data[$arrCenter[$i]]['j'][$a]['weight'];
    
                                        array_push($path[$arrCenter[$i]][$c], $data[$arrCenter[$i]]['j'][$a]['name']);
                                        unset($data[$arrCenter[$i]]['j'][$a]);
    
                                    }
    //проверяем вес, если меньше допустимого, записываем точку пути в новый массив и удаляем данный элемент с текущего
                                    if((array_sum($weight) + $data[$arrCenter[$i]]['i'][$a]['weight']) <= $machin){
    
                                        $weight[$a] = array_sum($weight) + $data[$arrCenter[$i]]['i'][$a]['weight'];
    
                                        array_unshift($path[$arrCenter[$i]][$c], $data[$arrCenter[$i]]['i'][$a]['name']);
                                        unset($data[$arrCenter[$i]]['i'][$a]);
    
                                    }
    
                                }
    
    
                                if($data[$arrCenter[$i]]['i'][$a]['order'] < $data[$arrCenter[$i]]['j'][$a]['order']){
                                    //проверяем вес, если меньше допустимого, записываем точку пути в новый массив и удаляем данный элемент с текущего
                                    if((array_sum($weight) + $data[$arrCenter[$i]]['i'][$a]['weight']) <= $machin) {
    
                                        $weight[$a] = array_sum($weight) + $data[$arrCenter[$i]]['i'][$a]['weight'];
                                        array_unshift($path[$arrCenter[$i]][$c], $data[$arrCenter[$i]]['i'][$a]['name']);
                                        unset($data[$arrCenter[$i]]['i'][$a]);
    
                                    }
    //проверяем вес, если меньше допустимого, записываем точку пути в новый массив и удаляем данный элемент с текущего
                                    if((array_sum($weight) + $data[$arrCenter[$i]]['j'][$a]['weight']) <= $machin){
                                        $weight[$a] = array_sum($weight) + $data[$arrCenter[$i]]['j'][$a]['weight'];
                                        array_push($path[$arrCenter[$i]][$c], $data[$arrCenter[$i]]['j'][$a]['name']);
                                        unset($data[$arrCenter[$i]]['j'][$a]);
    
                                    }
                                }
    //если дошли до конца текущих массивов и они не пустые обнуляем значения
                            if ((!next($data[$arrCenter[$i]]['j']) && !next($data[$arrCenter[$i]]['i']) && (!empty($data[$arrCenter[$i]]['j']) && !empty($data[$arrCenter[$i]]['j'])))){
                                $a = -1;
                                $weight = array();
                                $data[$arrCenter[$i]]['j']=array_values($data[$arrCenter[$i]]['j']);
                                $data[$arrCenter[$i]]['i']=array_values($data[$arrCenter[$i]]['i']);
                                $c++;
                                $path[$arrCenter[$i]][$c] = array();
                                $iter = ceil((count($data[$arrCenter[$i]]['j']) + count($data[$arrCenter[$i]]['i'])) / 2);
                            }
                            else{
                                break;
                            }
                        }
    Ответ написан
  • Как сделать такое меню?

    @Dark19 Автор вопроса
    Может еще подскажете, что можно придумать когда меню большое (12 пунктов, некоторые с 2, 3 слов) и даже в 1200 пикселей в 2 ряда влезает?
    Ответ написан