Приветствую Чтобы число выводить в денежном-читабельном формате на фронте, что стоит использовать? Не могу понять нужно искать Jquery обработчик, шрифт или есть какой-то спец тег(наример в bootstrap)? Благодарю
@Artur_hopf делаю просто echo $val; и выводится 24490 ну иногда приписываю руками р. Просто мне кажется что то должно быть простое на js/css чтобы одним класом преобразовывать.
Ну если тебе хочется грузить свой сайт библиотекой ради пробела. http://openexchangerates.github.io/accounting.js/
C бэкенда лучше получать число в формате integer (я видел совет делать всегда в integer и в наименьшей валюте, т.е. копейки). Получаешь число, из твоего примера, "2449000". Делишь с помощью JS на 100. И используешь метод toLocaleString(). Пример: Код (Javascript): let price = 2449000; let rublePrice = price / 100; let displayPrice = (price).toLocaleString() + ' ' + 'P'; console.log(displayPrice); // "24 490 P" Другие варианты форматирования цены: https://stackoverflow.com/questions...-commas-as-thousands-separators-in-javascript
@виталий032 я задумался после ответа @Artur_hopf а стоит ли правда эту логику на фронт переносить? Есть сервер, есть мощности пусть подготавливает данные, чтобы фронт работал без лишних вычислений?
Думаю @Artur_hopf прав, лучше это сделать на сервере. PHP: $priceFromDB = 2449000; $price = $priceFromDB / 100; $priceArr = explode(',', number_format($price , 0))); $displayPrice = implode(' ', $priceArr);
@IvanKut, @виталий032 стоп стоп, я не говорил что это надо делать на сервере. Весь смысл в верстке, если верстка на сервере то да, если же на js, то там и оставить. Просто вывод денег, это только внешне. Человек накидает в корзину, сумму например ему надо вывести, считать надо. Исходя из этих соображений. Вообще щас модно писать, одну цену, перечеркивать ее, рядом писать сумму скидки и еще ниже результат 24 490 р скидка 30% 17 143 Р предложение ограниченно
@Artur_hopf Первоначально я все собираю на сервере на php. Потом на клиенте Jquery стучится за доп данным(например если что-то изменяет клиент).Вопрос в другом треде у меня есть https://php.ru/forum/threads/pravilnaja-logika-formirovanija-stranicy.86603/#post-628049 Как все таки правильно? С сервера отдавать подготовленный HTML через AJAX? Либо собирать на фронте все таки. Если все на сервере сразу собирать, тогда тема с расчетами на фронте закрыта)
@IvanKut json данные весят меньше чем готовая верстка. Вот и все. Как хочешь делай, разницы особо нет, если сайт грамотно написан. Делят верстку на js обычно если в разработке участвуют много людей, фронт и бэк типо. Один человек подготавливает данные в json формате. Другой человек делает верстку. Я люблю делать верстку на php. Кто то на js. --- Добавлено --- Главное не делать вот так, такое я видел очень часто)) PHP: <?php $data = [1,2,3,4,5]; $data = json_encode($data); ?> <ui></ui> <script> var data = JSON.parse('<?=$data;?>'), ui = document.querySelector('ui'); data.forEach((i) => { ui.innerHTML += '<li>' + i + '</li>'; }) </script>
Кто на чем привык, я на чистом js с делегированием. Код (Javascript): document.addEventListener('DOMContentLoaded', function() { document.addEventListener('click', function(event) { let target = event.target; let open = target.classList.contains("open"); if(open) { target.addEventListener('click', function() { console.log(target); }); } }); }); На jquery кода меньше. Но грузишь целую библиотеку. Код (Javascript): $(document).ready(function(){ $(document).on('click', '.open', function() { console.log($(this)); }); }); Если в проекте js мало, то наверно лучше на чистом. Если много то jquery. Это мое мнение, но я в любом случае пишу на чистом. Главное про делегирование не забывать, иначе проблемы будут с подгрузкой данных.
Ну и чтобы понимали зачем нужно делегирование. Допустим есть контейнер. HTML: <div id="container"></div> Если сверстать в нее с помощью js кнопку вот так, то кнопка будет работать Код (Javascript): document.addEventListener('DOMContentLoaded', function() { var container = document.querySelector('#container'); container.innerHTML = '<button id="test">Нажми на меня</button>'; }); document.addEventListener('click', function(event) { let target = event.target; let id = target.getAttribute("id"); if( id == 'test') { console.log( target ); } }); А если просто через клик, то не будет работать, js просто не увидит кнопки, и придется извращаться с таймерами: Код (Javascript): document.addEventListener('DOMContentLoaded', function() { var container = document.querySelector('#container'), test = document.querySelector('#test'); container.innerHTML = '<button id="test">Нажми на меня</button>'; if(test){ test.onclick = function() { console.log(this); }; } }); То есть на момент создания страницы кнопки не было. Код с нажатием не работает. Вот тут как это работает https://learn.javascript.ru/event-delegation