• Как использовать zindex в js?

    @Aricus
    Мне приходит в голову сделать вложенные onload:
    var img1 = new Image();
    img1.src = "img/background/1.png";
    img1.onload = function() {
        ctx.drawImage(img1, 0, 0, x, y);
        var img2 = new Image();
        img2.src = "img/shadow/1.png";
        img2.onload = function() {
            ctx.drawImage(img2, 0, 0, x, y);
        }
    }

    Второй вариант: слои можно сделать самими canvas: придётся создавать отдельный canvas на каждую картинку.
    <div style="position: relative;">
    <canvas id="layer1" width="100" height="100"
    style="position: absolute; left: 0; top: 0; z-index: 0;"></canvas>
    <canvas id="layer2" width="100" height="100"
    style="position: absolute; left: 0; top: 0; z-index: 1;"></canvas>
    </div>

    А вообще, код плохой, потому что идёт множество повторений. По возможности любые повторения нужно прятать в циклы for или forEach, а также в функции. Потому что если что-то нужно будет менять, это нужно будет сделать в 1 месте, а не в 10. В данном случае, src картинок лучше вынести в массив, а всё остальное сделать в цикле forEach по этому массиву.
    Кроме того, вместо var лучше использовать let: почитайте разницу между ними.
    Ответ написан
    Комментировать
  • Как динамически (???) изменять XML документ?

    @Aricus
    Лучше в нужные моменты извлекать данные в js, и отправлять их по ajax, где уже в php сформировать и перезаписать xml.
    Ответ написан
    2 комментария
  • Как удалить пользователя WordPress?

    @Aricus
    Вопрос в том, а стоит ли? Если на пользователя многое завязано, то при его удалении нужно что-то делать с этими зависимостями. Лучше изменить его статус на что-то вроде "Заблокирован".
    Ответ написан
    Комментировать
  • Как плавно прокрутить страницу к указанной позиции после полной загрузке всей страницы?

    @Aricus
    На jquery примерно так:
    $("html, body").animate({scrollTop: "0px"}, {queue: false,duration: 0});
    $(document).ready(function () {
      $("html, body").animate({scrollTop: "700px"}, 1000, 'swing');
    });
    Ответ написан
    Комментировать
  • Как сделать слайдер блоков?

    @Aricus
    Конкретно там, судя по классам, используется Slick Slider. Я в таких случаях использую Owl Carousel, там тоже есть такой функционал. Про Elementor не скажу, не пользовался.
    Ответ написан
    Комментировать
  • Как открыть два frame по одной ссылке?

    @Aricus
    Нужно в ссылке сделать какой-нибудь дата-атрибут. При клике по элементу с ним нужно изменить src у iframe. Это будет выглядеть примерно так:
    <a href="http://something-new2.com" data-frame3="http://something-new3.com" target="frame2">LINK</a>
    <iframe id="frame2" src="http://something2.com">
    <iframe id="frame3" src="http://something3.com">

    jquery:
    $('[data-frame3]').click(function() {
        let thisSrc = $(this).data('frame3');
        $('#frame3').attr('src', thisSrc);
    });
    Ответ написан
    3 комментария
  • Как отправить данные строкой AJAX?

    @Aricus
    Как вы сами и сказали, JSON.
    В jquery:
    $.ajax({
    			type: "POST",
    			url: "ajax/get_data_analogue.php",
    			data: {analogue:thisData}
    		}).done(function(result) {
    			let resultData = $.parseJSON(result);
    		})

    На PHP-странице для AJAX:
    <?=json_encode($arr)?>
    В jquery:
    Ответ написан
    Комментировать
  • Как получить ссылки на множественные файлы из пользовательского свойства инфоблока?

    @Aricus Автор вопроса
    В результате у меня получилась функция:
    /**
     * Получение пользовательских свойств элемента инфоблока
     * @param string|int $iblockID - ID инфоблока
     * @param string|int $elementID - ID элемента инфоблока
     * @return array
     */
    function myGetProps($iblockID, $elementID) {
    	$result = [];
    	$rsProps = CIBlockElement::GetProperty($iblockID, $elementID, [], []);
    	while($arrProps = $rsProps->Fetch()) {
    		if ($arrProps['PROPERTY_TYPE'] == 'F') {
    			$result[$arrProps['CODE']][] = CFile::GetPath($arrProps['VALUE']);
    		} else {
    			$result[$arrProps['CODE']][] = $arrProps['VALUE'];
    		}
    	}
    	foreach ($result as $name => $value) {
    		if (count($value) == 1) {
    			$result[$name] = $value[0];
    		}
    	}
    	return $result;
    }
    Ответ написан
    Комментировать
  • Как исправить ошибку admin-ajax 400?

    @Aricus
    400 - bad request. Вероятно, неправильный url. Что в переменной ajaxurl? Если путь относительный, он должен быть относительно страницы, а не файла скрипта.
    Ответ написан
  • Как поменять цвет картинки при клике на кнопку?

    @Aricus
    При событии выбора цвета изменяете src изображения. Если можно, задать имя соответствующее, типа "qwerty-red.png", "qwerty-blue.png". Если нет, сделать на странице script, в котором задать массив соответствия. В чём сложность?
    Ответ написан
    Комментировать
  • Как отправить многомерный массив данных через AJAX на чистом JS?

    @Aricus
    Если вы можете управлять данными на обоих концах, то можно просто их перекодировать в JSON. С ним работает и js, и php. Я так делаю, когда возникают подобные проблемы.
    Ответ написан
    Комментировать
  • Почему не отображается шаблон компонента?

    @Aricus Автор вопроса
    Если кому интересно, ошибка была в самом шаблоне. База была взята из шаблона с модифицированными результатами. За границей области, попавшей в "Редактировать как текст" там было условие, которое прерывает отображение шаблона.
    Ответ написан
    Комментировать
  • Как добавить кнопку плагина в меню?

    @Aricus
    Проще всего вынести кнопку за пределы меню: прямо перед или после самого меню. Если же нужно, можно заморочиться с кастомным меню. WP позволяет сделать меню любого вида, но в нём непросто разобраться. Приведу пример из моего проекта.
    Это - в вёрстке:
    <div class="wrapper">
    						<?php wp_nav_menu( array(
    							'sort_column' => 'menu_order',
    							'theme_location' => 'primary-menu',
    							'container' => false,
    							'menu_class' => 'navigation_menu',
    							'walker' => new My_Walker_Nav_Menu()
    						) ); ?>
    					</div>

    Это - в functions.php, или включённом в него файле:
    // Главное меню
    class My_Walker_Nav_Menu extends Walker_Nav_Menu {
      function start_lvl(&$output, $depth = 1, $args = Array()) {
        $indent = str_repeat("\t", $depth);
        $output .= "\n$indent<ul class=\"navigation_submenu-".$depth."\">\n";
      }
    	public function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) {
    		if ( isset( $args->item_spacing ) && 'discard' === $args->item_spacing ) {
    			$t = '';
    			$n = '';
    		} else {
    			$t = "\t";
    			$n = "\n";
    		}
    		$indent = ( $depth ) ? str_repeat( $t, $depth ) : '';
    
    		$classes = empty( $item->classes ) ? array() : (array) $item->classes;
    		$classes[] = 'menu-item-' . $item->ID;
    
    		$args = apply_filters( 'nav_menu_item_args', $args, $item, $depth );
    
    		$class_names = join( ' ', apply_filters( 'nav_menu_css_class', array_filter( $classes ), $item, $args, $depth ) );
    		$class_names = $class_names ? ' class="' . esc_attr( $class_names ) . '"' : '';
    
    		$id = apply_filters( 'nav_menu_item_id', 'menu-item-'. $item->ID, $item, $args, $depth );
    		$id = $id ? ' id="' . esc_attr( $id ) . '"' : '';
    
    		$output .= $indent . '<li' . $id . $class_names .'>';
    
    		$atts = array();
    		$atts['title']  = ! empty( $item->attr_title ) ? $item->attr_title : '';
    		$atts['target'] = ! empty( $item->target )     ? $item->target     : '';
    		$atts['rel']    = ! empty( $item->xfn )        ? $item->xfn        : '';
    		$atts['href']   = ! empty( $item->url )        ? $item->url        : '';
    
    		$atts = apply_filters( 'nav_menu_link_attributes', $atts, $item, $args, $depth );
    
    		$attributes = '';
    		foreach ( $atts as $attr => $value ) {
    			if ( ! empty( $value ) ) {
    				$value = ( 'href' === $attr ) ? esc_url( $value ) : esc_attr( $value );
    				$attributes .= ' ' . $attr . '="' . $value . '"';
    			}
    		}
    
    		$title = apply_filters( 'the_title', writeTitle($item->title), $item->ID );
    
    		$title = apply_filters( 'nav_menu_item_title', $title, $item, $args, $depth );
    		
    		
    		if ($depth == 1) {
    			$writeIcon = '<div class="submenu__icon">
    				<div class="submenu__icon__img" style="background-image: url('.get_illImg($item->object_id)['url'].');"></div>
    			</div>&nbsp;';
    		} else {
    			$writeIcon = '';
    		}
    		$item_output = $args->before;
    		if (($depth == 1) && (get_field('activity', 'category_' .$item->object_id) == 'inactive')) {
    			$item_output .= '<div' .addTooltip($item->object_id). '>';
    			$item_output .= $writeIcon;
    			$item_output .= $title;
    			$item_output .= '</div>';
    		} else {
    			$item_output .= '<a'. $attributes .'' .addTooltip($item->object_id). '>';
    			$item_output .= $writeIcon;
    			$item_output .= $args->link_before . $title . $args->link_after;
    			$item_output .= '</a>';
    		}
    		$item_output .= $args->after;
    
    		$output .= apply_filters( 'walker_nav_menu_start_el', $item_output, $item, $depth, $args );
    	}
    	
    }
    Ответ написан
    Комментировать
  • Как изменить размер изображения на главной?

    @Aricus
    Причина в структуре. В первой картинке img добавляется напрямую, а в остальных - через picture. А width:100% - по отношению к родителю
    Исправить можно, добвавв в css шаблона:
    .wp-post-image {
        max-width: 250px;
    }

    Или как-то по-другому, если это некорректно повлияет на другие страницы.
    Ответ написан
  • Как корректно создать скрытые поля input с type hidden?

    @Aricus
    Не уверен, что понял правильно: не особо вникал. Но почему бы перед созданием поля не проверять его наличие? Примерно так (пишу на jquery, раз вы его выбрали в jsfiddle):
    function addInputHidden(input) {
      if ($('[name="' + input.name + '"]').length) {
        $('[name="' + input.name + '"]').val(input.value);
      } else {
        const inputField = document.createElement('input');
        inputField.type = 'hidden';
        inputField.value = input.value;
        inputField.name = input.name;
        form.appendChild(inputField);
      }
    }
    Ответ написан
  • Как изменить значение свойства элемента информационного блока Bitrix?

    @Aricus
    SetPropertyValuesEx
    CIBlockElement::SetPropertyValuesEx(
    int ELEMENT_ID,
    int IBLOCK_ID,
    array PROPERTY_VALUES,
    array FLAGS = array()
    );

    Как я понимаю, вы пропустили id инфоблока. К тому же, это - статический метод. Посмотрите пример по ссылке.
    Ответ написан
    Комментировать
  • Почему ftp-connect прерывает скрипт?

    @Aricus Автор вопроса
    Если кому интересно, в php.ini была закомментирована строка
    extension=ftp
    Спасибо x_lab с cyberforum.ru
    Ответ написан
    Комментировать
  • Как вывести детей в рекурсии?

    @Aricus
    Предлагаю подсчёт количества сделать отдельной функцией, и тоже с рекурсией. Вариант не слишком хороший с точки зрения производительности (будет много запросов к БД), но за неимением лучшего сойдёт. Схема примерно такая:
    function countGoods ($catId) {
      $result = ... // Здесь считаете количество товаров именно в этой категории
      $children = ... // Здесь получаете список дочерних категорий
      foreach ($children as $child) {
        $result += countGoods($child['id']);
      }
      return $result;
    }
    Ответ написан
  • Select выбор option, открыть нужный select?

    @Aricus
    Есть два варианта. Первый - подгрузка по ajax по значениям из базы данных.
    Второй - создать все дочерние списки сразу. Тогда нужно в каждый дочерний список добавить data-атрибут со значением, равным value в option. При изменении родительского списка скрыть все дочерние и показать нужный.
    Спросите, если что-то непонятно.
    Ответ написан
    9 комментариев