За последние 24 часа нас посетили 22805 программистов и 1272 робота. Сейчас ищут 700 программистов ...

Вывод цифр(деньги)

Тема в разделе "HTML и CSS", создана пользователем IvanKut, 22 июн 2020.

  1. IvanKut

    IvanKut Активный пользователь

    С нами с:
    27 июл 2018
    Сообщения:
    258
    Симпатии:
    0
    Приветствую
    Чтобы число выводить в денежном-читабельном формате на фронте, что стоит использовать?
    Не могу понять нужно искать Jquery обработчик, шрифт или есть какой-то спец тег(наример в bootstrap)?
    Благодарю

    [​IMG]
     
  2. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    А сейчас как выводится?
     
  3. IvanKut

    IvanKut Активный пользователь

    С нами с:
    27 июл 2018
    Сообщения:
    258
    Симпатии:
    0
    @Artur_hopf делаю просто echo $val; и выводится 24490 ну иногда приписываю руками р.
    Просто мне кажется что то должно быть простое на js/css чтобы одним класом преобразовывать.
     
  4. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
  5. IvanKut

    IvanKut Активный пользователь

    С нами с:
    27 июл 2018
    Сообщения:
    258
    Симпатии:
    0
    @Artur_hopf правильней в php на беке конвертить? Как проще и правильней решить эту задачу?
     
  6. виталий032

    виталий032 Активный пользователь

    С нами с:
    31 янв 2014
    Сообщения:
    227
    Симпатии:
    30
    Адрес:
    Владивосток
    C бэкенда лучше получать число в формате integer (я видел совет делать всегда в integer и в наименьшей валюте, т.е. копейки).

    Получаешь число, из твоего примера, "2449000". Делишь с помощью JS на 100. И используешь метод toLocaleString().
    Пример:
    Код (Javascript):
    1. let price = 2449000;
    2. let rublePrice = price / 100;
    3. let displayPrice = (price).toLocaleString() +  '  ' + 'P';
    4. console.log(displayPrice);  // "24 490 P"
    Другие варианты форматирования цены: https://stackoverflow.com/questions...-commas-as-thousands-separators-in-javascript
     
  7. IvanKut

    IvanKut Активный пользователь

    С нами с:
    27 июл 2018
    Сообщения:
    258
    Симпатии:
    0
    @виталий032 я задумался после ответа @Artur_hopf а стоит ли правда эту логику на фронт переносить? Есть сервер, есть мощности пусть подготавливает данные, чтобы фронт работал без лишних вычислений?
     
  8. виталий032

    виталий032 Активный пользователь

    С нами с:
    31 янв 2014
    Сообщения:
    227
    Симпатии:
    30
    Адрес:
    Владивосток
    Думаю @Artur_hopf прав, лучше это сделать на сервере.

    PHP:
    1. $priceFromDB = 2449000;
    2. $price = $priceFromDB / 100;
    3. $priceArr = explode(',', number_format($price , 0)));
    4. $displayPrice = implode(' ', $priceArr);
     
  9. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    @IvanKut, @виталий032 стоп стоп, я не говорил что это надо делать на сервере. Весь смысл в верстке, если верстка на сервере то да, если же на js, то там и оставить. Просто вывод денег, это только внешне. Человек накидает в корзину, сумму например ему надо вывести, считать надо. Исходя из этих соображений.

    Вообще щас модно писать, одну цену, перечеркивать ее, рядом писать сумму скидки и еще ниже результат

    24 490 р
    скидка 30%
    17 143 Р предложение ограниченно
     
    #9 Artur_hopf, 22 июн 2020
    Последнее редактирование: 22 июн 2020
  10. виталий032

    виталий032 Активный пользователь

    С нами с:
    31 янв 2014
    Сообщения:
    227
    Симпатии:
    30
    Адрес:
    Владивосток
    Он выводит цену через echo $val, значит на сервере верстка.
     
  11. IvanKut

    IvanKut Активный пользователь

    С нами с:
    27 июл 2018
    Сообщения:
    258
    Симпатии:
    0
    @Artur_hopf Первоначально я все собираю на сервере на php.

    Потом на клиенте Jquery стучится за доп данным(например если что-то изменяет клиент).Вопрос в другом треде у меня есть
    https://php.ru/forum/threads/pravilnaja-logika-formirovanija-stranicy.86603/#post-628049

    Как все таки правильно? С сервера отдавать подготовленный HTML через AJAX?
    Либо собирать на фронте все таки.

    Если все на сервере сразу собирать, тогда тема с расчетами на фронте закрыта)
     
  12. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    @IvanKut json данные весят меньше чем готовая верстка. Вот и все. Как хочешь делай, разницы особо нет, если сайт грамотно написан. Делят верстку на js обычно если в разработке участвуют много людей, фронт и бэк типо. Один человек подготавливает данные в json формате. Другой человек делает верстку.

    Я люблю делать верстку на php. Кто то на js.
    --- Добавлено ---
    Главное не делать вот так, такое я видел очень часто))
    PHP:
    1. <?php
    2. $data = [1,2,3,4,5];
    3. $data = json_encode($data);
    4. ?>
    5. <ui></ui>
    6. <script>
    7. var data = JSON.parse('<?=$data;?>'),
    8.     ui = document.querySelector('ui');
    9.  
    10. data.forEach((i) => {
    11.     ui.innerHTML += '<li>' + i + '</li>';
    12. })
    13. </script>
     
  13. виталий032

    виталий032 Активный пользователь

    С нами с:
    31 янв 2014
    Сообщения:
    227
    Симпатии:
    30
    Адрес:
    Владивосток
    А динамику до сих пор на jQuery делают, если верстку на php генерируют?
     
  14. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    Кто на чем привык, я на чистом js с делегированием.
    Код (Javascript):
    1. document.addEventListener('DOMContentLoaded', function() {
    2.  
    3.     document.addEventListener('click', function(event) {
    4.         let target = event.target;
    5.         let open = target.classList.contains("open");
    6.      
    7.         if(open)
    8.         {    
    9.             target.addEventListener('click', function() {
    10.                 console.log(target);
    11.             });
    12.         }
    13.     });
    14. });
    На jquery кода меньше. Но грузишь целую библиотеку.
    Код (Javascript):
    1. $(document).ready(function(){
    2.     $(document).on('click', '.open', function() {
    3.         console.log($(this));
    4.     });
    5. });
    Если в проекте js мало, то наверно лучше на чистом. Если много то jquery. Это мое мнение, но я в любом случае пишу на чистом.

    Главное про делегирование не забывать, иначе проблемы будут с подгрузкой данных.
     
    виталий032 нравится это.
  15. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    Ну и чтобы понимали зачем нужно делегирование. Допустим есть контейнер.
    HTML:
    1. <div id="container"></div>
    Если сверстать в нее с помощью js кнопку вот так, то кнопка будет работать
    Код (Javascript):
    1. document.addEventListener('DOMContentLoaded', function() {
    2.  
    3.     var container = document.querySelector('#container');
    4.  
    5.     container.innerHTML = '<button id="test">Нажми на меня</button>';
    6. });
    7.  
    8. document.addEventListener('click', function(event) {
    9.     let target = event.target;
    10.     let id = target.getAttribute("id");
    11.  
    12.     if( id == 'test')
    13.     {      
    14.         console.log( target );
    15.     }
    16. });
    А если просто через клик, то не будет работать, js просто не увидит кнопки, и придется извращаться с таймерами:
    Код (Javascript):
    1. document.addEventListener('DOMContentLoaded', function() {
    2.  
    3.     var container = document.querySelector('#container'),
    4.         test = document.querySelector('#test');
    5.  
    6.     container.innerHTML = '<button id="test">Нажми на меня</button>';
    7.  
    8.     if(test){
    9.         test.onclick = function() {
    10.             console.log(this);
    11.         };
    12.     }
    13. });
    То есть на момент создания страницы кнопки не было. Код с нажатием не работает.

    Вот тут как это работает https://learn.javascript.ru/event-delegation
     
    виталий032 нравится это.