Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Перезаполнить элемент вместо создания нового

В модуле на CMS Joomla есть код загрузки товаров из файла .cvs.
Так вот этот код создает новые элементы вместо перезаполнения существующих. В php полный нуб пока, поэтому прошу помощи.
Код:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$product = JSFactory::getTable('product', 'jshop');
                    $product->set("product_ean", $row[1]);
                    $product->set("product_quantity", $row[2]);
                    $product->set("product_date_added", $row[3]);
                    $product->set("product_price", $row[4]);
                    $product->set("min_price", $row[4]);
                    $product->set("product_tax_id", $listTax[$tax_value]);                                        
                    $product->set("currency_id", $jshopConfig->mainCurrency);
                    $product->set($lang->get("name"), utf8_encode($row[7]));
                    $product->set($lang->get("short_description"), utf8_encode($row[8]));
                    $product->set($lang->get("description"), utf8_encode($row[9]));
                    $product->store();
                    $product_id = $product->get("product_id");
                    $category_id = $listCat[$category_name];
                    if ($category_name!="" && $category_id){
                        $_products->setCategoryToProduct($product_id, array($category_id));
                    }
                    
Я вот не могу понять, что за процедуры store() и $product->get("product_id") и как мне впихнуть создание нового...
Ответ: Taatshi, при чем тут допиливание ядра, если стандартная загрузка только создает новые элементы, нет возможности даже прайсы обновить автоматически.
Суть вашего ответа сводится к тому, чтобы купить доработанную загрузку-выгрузку, но я их и так видел, покупать не стал, а смотрю в интернете как сделать.
Вопрос: Отследить момент создания нового селектора

Приветствую! Есть список пополняющийся динамически.
<ul>
  <!-- Сюда динамически добавляются li-->
</ul>

Мне нужно отследить создание нового элемента li не имеющего класса empty
это как-то можно отследить с помощью wait или другого аналога
wait.until li.hasClass("empty")

?
Ответ:
Сообщение от рони
ligisayan,нужно найти в вашем коде место где происходит добавление li и после добавить код вставки в слайдер.

всё.
более вариантов кроме MutationObserver я незнаю
А если отслеживать изменение размера ul.length или изменение hasclass?
Вопрос: Создание новых узлов в XML-файле через JS. Не сохраняет измененный файл

Всем привет!

Я формирую XML-файл с помощью JavaScript, а точнее динамически создаю новые узлы, чтобы потом вывести содержимое этого файла на web-интерфейс.

После создания нового узла, их количество действительно увеличивается. Узнаю я это так:
Код Javascript
1
document.write(xmlDoc.getElementsByTagName("event")[0].length)
Да и информация о новых узлах выводится.

Однако, такой феномен:
Открыв файл на сервере, никаких изменений нет! Такое ощущение, что файл изменился где-то локально, но не на сервере.
Соответственно на web-интерфейс актуальная информация не подгружается...

Может там надо какую-то волшебную функцию вызвать, аля Save()?
Помогите разобраться junior-программистке
Ответ: Да.
Вопрос: В массиве из 100 элементов найти количество отрицательных элементов, минимальный элемент и его индекс

В массиве из 100 элементов найти количество отрицательных элементов, минимальный элемент и его индекс. Построить новый массив из элементов исходного, величина которых больше 15.6.
Ответ:
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var arr = <ваш массив>
var numNegative = 0;
var minIndex = 0;
var min = arr[minIndex];
var newArr = [];
 
for(var i = 0, len = arr.length; i < len; i++) {
    if(arr[i] < min) {
        min = arr[i];
        minIndex = i;
        ++numNegative;
    }
 
    if(arr[i] > 15.6) {
        newArr.push(arr[i]);
    }
}
Вопрос: Несколько доменов и создание новых страниц

Пытаюсь использовать два доменных имени на одном apache24.
Сделал всё как в этом примере:
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# Ensure that Apache listens on port 80 
Listen 80 
<VirtualHost *:80> 
DocumentRoot "/www/example1" 
ServerName www.example.com
 
# Other directives here 
</VirtualHost> 
 
<VirtualHost *:80> 
DocumentRoot "/www/example2" 
ServerName www.example.org
 
# Other directives here 
</VirtualHost>
только пути абсолютные на локальном диске.
Всё равно открывается всё из одной директории. Если поменять хосты местами, то само собой теперь всё открывается только из пути к папке второго сайта, то есть директории и имена написаны верно.
Что я мог упустить?

Также был бы рад объяснению директивы Alias, будто вы рассказываете это человеку, который впервые видит кампутер перед собой, так как документация по нему объясняет мне чуть больше чем ничего.

Вопрос с созданием новых страниц решился, наверно.
Ответ: kokoken, решил.
Необходимо было добавить строчку ServerAlias, а в моём случае просто убрать перед ней символ комментария.
В итоге
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# Ensure that Apache listens on port 80 
Listen 80 
<VirtualHost *:80> 
DocumentRoot "/www/example1" 
ServerName [url]www.example.com[/url]
ServerAlias example.com
 
# Other directives here 
</VirtualHost> 
 
<VirtualHost *:80> 
DocumentRoot "/www/example2" 
ServerName [url]www.example.org[/url]
ServerAlias example.org
 
# Other directives here 
</VirtualHost>
Почему без него не работало - так и не понял, но с ним всё всё стало нормально.
Вопрос: Найти 1й элемент 2го элемента таблицы

Ни 1 способ не работает...

PHPHTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
        <script type="text/javascript">
            function main()
            {
                var t = document.querySelectorAll('table')
 
                alert(t.lastChild.innerHTML)
                alert(t.firstChild.innerHTML)
                alert(t.firstElementChild.innerHTML)
                alert(t.lastElementChild.innerHTML)
                alert(t.childNodes[1].innerHTML)
                alert(t.children[1].innerHTML)
            }
            document.addEventListener('DOMContentLoaded', main)
        </script>
    </head>
    <body>
        <table>
            <tr>
                <td>1</td>
            </tr>
            <tr>
                <td>Нужен этот элемент</td>
                <td>3</td>
            </tr>
        </table>
    </body>
</html>
Добавлено через 13 минут
А, не, оказывается для таблиц своя навигация...

PHPHTML
1
alert(t.rows[1].cells[0].innerHTML)
Ответ: Каждый день тут пишут одно и то же - все методы поиска элементов, кроме getElementbyId и querySelector, возвращают коллекцию. Это раз.
В table всегда будет присутствовать tbody, независимо от того, указали его явно или нет. Это два.
Для работы с таблицами есть специальные методы
"Найти 1й элемент 2го элемента таблицы"
Javascript
1
2
3
var t = document.querySelectorAll('table');
 
alert(t[0].rows[1].cells[0].innerHTML);
Вопрос: Создание новых окон на javascript

Вот классная статья по созданию новых окон на javascript
Ответ: MikkiMouse,

ТС - бот, нагоняет трафик себе на сайт
Вопрос: Определить перекрыт ли элемент другим элементом

Доброго дня!

Нужно определить перекрывают ли элемент другие элементы. Элементы которые могут перекрыть и их стили не известы.
Пока что, единственным решением было пройтись по всему DOM, проверяя координаты пересечения и z-index.
Проблема в том, что если у родителя будет стоять z-index, перекрытие будет ложным.
Может есть другое решение этой задачи?

var e = document.getElementById('e');
var eR = e.getBoundingClientRect();
var all = document.getElementsByTagName('*');
for (var i=0, max=all.length; i < max; i++) {
	var cR = all[i].getBoundingClientRect();
	if(all[i] != e) {
		if (((cR.top <= eR.top) && (eR.top <= cR.bottom)) &&
		   ((cR.top <= eR.bottom) && (eR.bottom <= cR.bottom)) &&
		   ((cR.left <= eR.left) && (eR.left <= cR.right)) &&
		   ((cR.left <= eR.right) && (eR.right <= cR.right))) {
       		var style = window.getComputedStyle ? getComputedStyle(all[i]) : all[i].currentStyle;
       		if(style.zIndex >= 1) {
              console.log(style.zIndex);
          }
    }
  }
}
Ответ: Большое вам спасибо! То что нужно.
Вопрос: Нужно чтобы при прокрутке списка элементов последний элемент не менял своего положения

как сделать так чтобы при прокрутке списка элементов последний элемент не менял своего положения ?

CSS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<style>
#content{
    position:relative;
}
#wrap{
    height: 105px;
    overflow-y: auto;
    width: 180px;
    overflow-x: hidden;
}
.two {
    position: absolute;
    bottom: 0;
    color: red;
    background:red;
    width:50px;
    height:50px;
}
</style>
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<div id="wrap">
    <div id="content">
        <div class="one">
            <div>1</div>
            <div>2</div>
            <div>3</div>
            <div>4</div>
            <div>5</div>
            <div>6</div>
            <div>7</div>
            <div>8</div>
            <div>9</div>
            <div>10</div>
            <div>11</div>
            <div>12</div>
            <div>13</div>
            <div>14</div>
            <div>15</div>
        </div>
        <div class="two">
            Текст
        </div>
    </div>
</div>
Javascript
1
2
3
4
5
6
7
8
9
10
11
<script type="text/javascript">
    $(function() {
        var offset = $("#fixed").offset();
        var topPadding = 5;
        $(window).scroll(function() {
            if ($(window).scrollTop() > offset.top) {
                $("two").css({marginTop: $(window).scrollTop() - offset.top + topPadding});
            }
            else {$("two").css({marginTop: 0});};});
    });
</script>
Ответ: WhiteMind, в том то и дело что я этого сделать не смогу,и нужно делать при текущей разметке
Вопрос: определить элемент под перетаскиваемым элементом

Всем доброго вечера!
Пробую делать простой Drag'n'drop интерфейс. Имеется несколько контейнеров (wrapper), в которых можно динамически создавать элементы (dragElement). Cами контейнеры, собственно, тоже динамические).
Мне нужно перетащить элемент из одного контейнера в другой. То есть, во время перетаскивания, необходимо определить, над каким контейнером сейчас элемент и туда его плюхнуть...
Затык в том, что я не могу определить контейнер через "onmouseover" и тому подобные вещи, поскольку курсор мыши во время перетаскивания всегда находится над элементом, а не над контейнером.
Собственно, чо делать-то?
Как-то может можно определить, над каким контейнером сейчас не курсор, а перетаскиваемый объект?

// Включаем Drag'n'Drop для элементов с классом draggable

	document.onmousedown = function(e) {

		var dragElement = e.target;

		if (!dragElement.classList.contains('draggable')) return;

		var coords, shiftX, shiftY, detectPage;

		startDrag(e.clientX, e.clientY);

		document.onmousemove = function(e) {
			moveAt(e.clientX, e.clientY);
		};

		// Здесь как-то надо определить и записать в переменную detectPage, над каким гнездом кукушки сейчас элемент

		dragElement.onmouseup = function() {
			finishDrag();
		};

		function startDrag(clientX, clientY) {

			shiftX = clientX - dragElement.getBoundingClientRect().left;
			shiftY = clientY - dragElement.getBoundingClientRect().top;

			dragElement.style.position = 'fixed';

			document.body.appendChild(dragElement);

			moveAt(clientX, clientY);

		};

		function finishDrag() {

			dragElement.style.top = parseInt(dragElement.style.top) - wrapper.getBoundingClientRect().top + 'px';
			dragElement.style.position = 'absolute';

			wrapper.onmouseup = function(e) {
				var selectPage = e.target;
			}

                        // Теперь взяв из переменной detectPage контейнер, плюхнем туда элемент

			detectPage.appendChild(dragElement);

			document.onmousemove = null;
			dragElement.onmouseup = null;

		};

		function moveAt(clientX, clientY) {
			var newX = clientX - shiftX;
			var newY = clientY - shiftY;

			if (newX < 0) newX = 0;
			if (newX > wrapper.offsetWidth - dragElement.offsetWidth) {
				newX = wrapper.offsetWidth - dragElement.offsetWidth;
			}

			dragElement.style.left = newX + 'px';
			dragElement.style.top = newY + 'px';
		};

		return false;
	};

	function selector(e) {
		var select = e.target;
		console.log(select);
	};
Ответ: Нашел, в общем, в архивах лекций с курсов Ильи, где он рассказывал об этом. Может кому пригодится. Хотя не знаю, нормальное это решение или нет.

На mouseup над контейнером делаем перетаскиваемому объекту display:none, после чего спокойно получаем координаты места под курсором через elementFromPoint, определяем, что там за контейнер и возвращаем объекту display:block.