Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Очень простая задачка ) (https://javascript.ru/forum/events/70519-ochen-prostaya-zadachka.html)

MRJ 11.09.2017 23:52

Очень простая задачка )
 
В шаблоне страницы есть повторяющиеся элементы, количество которых php выводит произвольно, в зависимости от базы данных.

Всего <span>480</span>

<span>115</span>
<span>25</span>
<span>340</span>

Как можно подсчитать сумму всех этих значений и вывести в элементе который стоит выше, как показано :)

рони 12.09.2017 01:41

MRJ,
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  </style>

  <script>
window.addEventListener('DOMContentLoaded', function() {
  var span = document.querySelectorAll('span');
  span[0].textContent =  [].reduce.call( span, function(sum, el, i) {
         return sum + (el.textContent * !!i||0)
  },0);
    });
  </script>
</head>

<body>
 <span>abc</span>
 <span>115</span>
 <span>25</span>
 <span>340</span>


</body>
</html>

laimas 12.09.2017 03:12

MRJ,
а что самому серверу это неизвестно или лень сделать?

MRJ 12.09.2017 12:24

laimas, php выводит из таблицы данные столбца. Но в этом столбце данные лежат не в готовом числовом виде, а ввиде ключей, там повторяющиеся значения адресов картинок. Как обработать этот массив данных и подсчитать количество картинок в каждой строке столбца я уже знаю. Только php выводит это все через while и там я уже путаюсь, не могу понять как вычислить общее число картинок в выдаче.


$res = dbquery("SELECT * FROM photos WHERE user=user ORDER BY created DESC LIMIT 50");
if (dbrows($res)) {
$photos_tpl = ""; $photostpl = gettpl("photos.tpl");
while ($data = dbarray($res)) {
$set = unserialize(dbresult(dbquery("SELECT content FROM settings WHERE name=photos"), 0));
$files = unserialize($data['files']);
$allphotos = count($files);
if ($data['files'] && preg_match("/^.*?\"([0-9a-f]{2})\";s\:4\:\"file\";s\:\d{1,2}\:\"([-0-9a-z_\.]+\.(gif|jpg|jpeg|png))\"/", $data['files'], $matches)) {
$coverphoto = "<img src=\"/".$matches[1]."/thumbs/".$matches[2]."\">";
}
else { $coverphoto = ""; }
$photos_tpl .= parsetpl($photostpl);
}
}
else {
$uyphotos = 0;
$uphotos_tpl = "<br><br><br>".$lng['emptyuphotos']; }
}

Nexus 12.09.2017 12:33

MRJ,
О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting.

Стиль кода у прогера от бога. Изменять код не стал, ибо копаться в этом нет желания.
*!*$photos_num=0;*/!*$res = dbquery("SELECT * FROM photos WHERE user=user ORDER BY created DESC LIMIT 50");
if (dbrows($res)) {
$photos_tpl = ""; $photostpl = gettpl("photos.tpl");
while ($data = dbarray($res)) {
$set = unserialize(dbresult(dbquery("SELECT content FROM settings WHERE name=photos"), 0));
$files = unserialize($data['files']); 
$allphotos = count($files);
if ($data['files'] && preg_match("/^.*?\"([0-9a-f]{2})\";s\:4\:\"file\";s\:\d{1,2}\:\"([-0-9a-z_\.]+\.(gif|jpg|jpeg|png))\"/", $data['files'], $matches)) { 
$coverphoto = "<img src=\"/".$matches[1]."/thumbs/".$matches[2]."\">";*!*$photos_num++*/!*;
}
else { $coverphoto = ""; }
$photos_tpl .= parsetpl($photostpl);
}
}
else { 
$uyphotos = 0;
$uphotos_tpl = "<br><br><br>".$lng['emptyuphotos']; }
}

laimas 12.09.2017 12:45

Цитата:

Сообщение от MRJ
Но в этом столбце данные лежат не в готовом числовом виде, а ввиде ключей, там повторяющиеся значения адресов картинок.

Уже плохо, читайте о нормализации, упаковывать в строку данные, которыми необходимо оперировать (просчет, поиск, редактирование т .п.), это очень и очень плохо.

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

MRJ 12.09.2017 14:37

Nexus,

Спасибо, попробовал так. Только он подсчитывает не общее количество картинок пользователя в таблице, а просто количество записей таблицы где этот столбец содержит картинки.


Часовой пояс GMT +3, время: 21:57.