Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Замена значения ячейки таблицы (https://javascript.ru/forum/misc/58190-zamena-znacheniya-yachejjki-tablicy.html)

kolhoznik 09.09.2015 07:48

Замена значения ячейки таблицы
 
Здравствуйте!
Подскажите пожалуйста.
У меня есть таблица товаров. Один из столбцов 'цена' - выводит цену товара. Так как цена в базе данных хранится как цифра, то при не указании цены в форме по умолчанию заполняется '0' и соответственно выводится.
Вопрос как осуществить замену значений таблицы с 0 на 'не указана'.
Значение в ячейке выводится в div class='cena' id нет. Необходимо получать значения по классу.

laimas 09.09.2015 07:52

Цитата:

Сообщение от kolhoznik
при не указании цены в форме по умолчанию заполняется '0' и соответственно выводится.

А может все-таки NULL? Да и цена товара, это обязательное значение, то есть ее не может быть в форме только при добавлении товара.

tsigel 09.09.2015 07:53

Лучше не писать русские слова латиницей, это плохой тон.

<div class='cena'>
   0
</div> 
<div class='cena'>
   10
</div> 

<script>
Array.prototype.forEach.call(document.querySelectorAll('.cena'), function (price) {
   if (price.innerHTML.trim() == '0') {
       price.innerHTML = 'Цена не указана';
   }
});
</script>

tsigel 09.09.2015 08:10

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

laimas 09.09.2015 08:14

Цитата:

Сообщение от tsigel
Вообще эту задачу должен решать тот кто формирует страницу

Вообще-то на сервере не должно быть ситуации, при которой цена товара нулевая. Вы себе такой товар представляете? :)

Тем более, если речь о форме, да еще ее значением указать 'Цена не указана', ну так это же полный швах.

tsigel 09.09.2015 08:20

laimas,
Ну ноль там быть не должен, согласен.

kolhoznik 09.09.2015 08:43

Да к сожалению компонент который использую пишет 0 если пустое значение отсылают при типа ячейки int в базе данный.
А значение цена заполняют пользователи в каталоге и не всегда, поскольку некоторые товары цену пока не имеют. Приходится как то думать об избавлении от нуля в выводе товаров.

laimas 09.09.2015 08:54

Значит нужно к этой задаче подходить иначе.
Если товар добавляется, это означает, что его идентификатор не определен и пользователю отдается форма с пустыми значениями. По этому же признаку легко определить, что поле цены в форме необязательное для заполнения.

Как только товар добавлен, он получает идентификатор, в этом случае вызывается эта же самая форма но с заполненными значениями, а поле цены становиться обязательным для заполнения, то есть это уже редактирование товара.

Вот только пихать 'Цена не указана' в value поля не стоит, более полезно в placeholder указать допустимый ввод, например максимальная длина значения, а в pattern первая цифра обязательно не 0, а за ней остальные от максимальной длины. А поле value должно быть пустым.

kolhoznik 09.09.2015 09:13

Мне не надо чтобы обязательно была указана цена. Это я легко могу сделать и так.
Нужно просто хотя бы скрыть нули или заменить на произвольный текст.
Тем более кроме цифр в базу ничего не пихнешь так как тип строки int. Менять на text или varhar нельзя так как сортировка не будет работать.
Нужно что то городить на innerthtml

laimas 09.09.2015 09:25

Цитата:

Сообщение от kolhoznik
Менять на text или varhar нельзя

А я вам это предлагал?

Странная у вас база. Если значение может быть не определено, то в базе должно быть NULL у не определенных значений, и соответственно при выводе формы значение поля будет пустым. Зачем пустому значению указывать, что оно не задано, да еще как value?

Или если у вас такие навороты, то value=<?=$var ?: null?>

kolhoznik 09.09.2015 09:35

Использую стандартный компонент, который выставляет пустому полю значение '0' при типе данных ячейки в базе данных int. Победить это не смог . как вариант решил попробовать на javascript. Я то вас именно об этом спрашиваю а не о php. Есть варианты или нет?

tsigel 09.09.2015 09:38

kolhoznik,
Вариант я вам написал давным-давно. Посмотрите свой пост сначала и внимательно. Его даже запустить и посмотреть можно.

laimas 09.09.2015 09:41

Зачем вам JS, если форму выводит сервер и он подставляет значения в поля?
Я вам показал:

$var = 0;
var_dump($var ?: null);


Запустите и посмотрите, что будет при нулевом значении и отличном от него. Что вам еще надо? Воткнуть в value "Цена не определена"? Ну так замените null в выражении на эту строку, вот только для сообщений служит placeholder, а не value.

kolhoznik 09.09.2015 09:53

Цитата:

Сообщение от tsigel (Сообщение 387773)
kolhoznik,
Вариант я вам написал давным-давно. Посмотрите свой пост сначала и внимательно. Его даже запустить и посмотреть можно.

Извиняюсь сразу не увидел

laimas 09.09.2015 09:58

Цитата:

Сообщение от kolhoznik
Использую стандартный компонент

А что значит "стандартный"?

kolhoznik 09.09.2015 11:45

seblod для joomla.
tsigel, никак не удается подружить написанный вами скрипт с seblod и joomla. Хотя отдельно все работаетю

laimas 09.09.2015 13:24

seblod как и сама joomla, такой же стандартный, как и лом для открывания дверей. :)

http://www.seblod.pro/documentation

kolhoznik 09.09.2015 16:39

Цитата:

Сообщение от laimas (Сообщение 387775)
Воткнуть в value "Цена не определена"? Ну так замените null в выражении на эту строку

Цитата:

Сообщение от laimas (Сообщение 387767)
А я вам это предлагал?

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

tsigel 09.09.2015 16:50

kolhoznik,
В базе может быть 0 или null. laimas вам говорит о форматировании вывода данных в шаблон.

laimas 10.09.2015 06:21

Цитата:

Сообщение от kolhoznik
Как в ячейку с типом int вы предлагаете воткнуть строку?

tsigel, уже пояснил, что это форматирование вывода, что собственно понятно и по коду:

$var ?: null - это аналог js-выражения var || null, без учета, что var зарезервировано в js. )

Ежику ясно, что в базу это не вставить. Вашу проблему, вернее всех тех кто использует эти "стандартные" инструменты можно решить либо изменив код таковых "стандартных граблей", либо добавив в конструктор возможность задавать значения по умолчанию. Вы вряд ли это сможете сделать.

У вас остается другой выход - задать полю цены тип не INT (кстати этот тип слишком много для цены, если только вы не торгуете самолетами), а текст. Текстовые значения (представление чисел) конечно же будут не только сортированы некорректно, но и выборка в них к примеру по фильтру также будет выдавать некорректный результат. Но если в запросах для сортировки или условий к этим полям указывать работать с полем как с бинарными данными ... WHERE BINARY price ..., то все будет ОК.


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