Модуль Simple Math Field работает по разному на разных сайтах

Главные вкладки

Аватар пользователя Gnom7 Gnom7 20 февраля 2019 в 3:48

Данный модуль мне нужен для вычисления разности между датами во Views.
На тестовом сайте с тестовыми данными модуль работает хорошо, а на рабочем выводит некорректные значения, хотя настройки полей идентичны на обоих сайтах. Подскажите, в чем может быть причина?

Лучший ответ

Аватар пользователя marassa marassa 22 февраля 2019 в 10:53

Никаких дополнительных модулей не надо, всё в ядре:


PS Заменил скриншот на русский. Никогда не переключаю админку на русский и не понимаю как другие могут без слёз смотреть на "Cредство форматирования: Собственная" и прочую подобную галиматью и что-то даже понимать Wink

PPS Вернул английский скриншот и оставил оба, чтобы было понятно о чём я Wink

Комментарии

Аватар пользователя sas@drupal.org sas@drupal.org 20 февраля 2019 в 7:35
1

Если Вы используете даты то надо понимать что например на сервере может быть другой часовой пояс и при вычислении разницы на датах можно получить разные значения например при использовании UNIX_TIMESTAMP
см. http://qaru.site/questions/16013257/mysql-seconds-difference-unexpected-...

Аватар пользователя Gnom7 Gnom7 20 февраля 2019 в 9:32

Выяснилось, что если оперировать датами "создание" и "изменение", то проблем не возникает. А если оперировать другими датами сущности, то появляется число вроде этого "1546323030". Может быть дело в типе данных MySQL?

Подскажите, как включить отображение SQL запроса в админке Views? в phpmyadmin не могу найти таблицы с данными представления.

Аватар пользователя sas@drupal.org sas@drupal.org 20 февраля 2019 в 9:47
1

Кстати это
Конвертивание эпохи Unix в человекопонятную дату(human readable date)
1546323030
GMT: Tue, 01 Jan 2019 06:10:30 GMT
Ваша временная зона: 01.01.2019, 9:10:30

Аватар пользователя marassa marassa 20 февраля 2019 в 10:34
1

появляется число вроде этого "1546323030"

Если подобное число в секундах появляется при вычитании дат, то похоже что одна из ваших дат не определена, и вы по сути вычисляете разницу между датой в 2019 году и 1 января 1970 года.

Аватар пользователя Gnom7 Gnom7 21 февраля 2019 в 3:20

Оказалось, что модуль ECK, при помощи которого я сделал сущности, создает в MySQL столбцы с типом int(11) для полей "дата создания" и "дата редактирования" сущности, а для остальных столбцов содержащих дату тип varchar(20) хранящих дату в формате "2019-02-05".
Получается, что проще научится программно создавать сущности, чем зацикливаться на решение проблем связанных с конвертированием дат.

Аватар пользователя Gnom7 Gnom7 21 февраля 2019 в 11:13

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

У меня есть опыт работы с hook_menu() + theme() https://powerliftingrating.ru/athlete/162 , но спустя 3 года вялотекущей разработки, понял что иду не той дорогой... Поэтому решил познакомится с сущностями.

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

Буду рад любым советам от форумчан!

Аватар пользователя marassa marassa 21 февраля 2019 в 11:30

Я догадываюсь, что при помощи добавления полей в типы материалов можно реализовать данную задачу

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

во всех статьях что мне попадались описывалось процедура создания сущностей

А при каких обстоятельствах эти статьи Вам попадались? Мне например ни одной такой не попалось, возможно потому что я их специально никогда не искал. Wink
Я бы попробовал сделать на обычных нодах и типах материалов. Если есть сомнения в чем-то конкретном - напишите, разберемся.

Аватар пользователя Gnom7 Gnom7 22 февраля 2019 в 3:36

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

Работать с node оказалось значительнее приятней.

А при каких обстоятельствах эти статьи Вам попадались?

Поисковые запросы не помню, помню что искал информацию на тему как сделать кастомный модуль сделанный на hook_menu() доступным для Views и /admin/content.

Аватар пользователя marassa marassa 22 февраля 2019 в 9:04
1

искал информацию на тему как сделать кастомный модуль сделанный на hook_menu() доступным для Views и /admin/content

Мне кажется, Вы как-то методологически неправильно Друпал изучаете. Вместо того, чтобы прочесть какой-нибудь самый простой туториал где с самого нуля объясняются самые базовые вещи, или даже просто полазить по административному меню и посмотреть что там можно сделать, Вы начитались статей на очень сложные темы, которые не каждому среднему Друпалеру нужны и интересны, не то что начинающему. Я, например, только от Вас узнал про модуль ECK, кастомные сущности и про "кастомный модуль сделанный на hook_menu()", что мне совершенно не мешало писать собственные модули безо всяких hook_menu, решающие иногда довольно непростые задачи. Попробуйте сделать шаг назад и методично освоить азы.

Аватар пользователя Gnom7 Gnom7 22 февраля 2019 в 3:59

Если есть сомнения в чем-то конкретном - напишите, разберемся.

Сомнений не осталось, жалею что сразу не познакомился с node.
Однако в node проявилась та же проблема что и при создании entity через ECK

создает в MySQL столбцы с типом int(11) для полей "дата создания" и "дата редактирования" сущности, а для остальных столбцов содержащих дату тип varchar(20) хранящих дату в формате "2019-02-05".

Как сделать чтобы дата из поля типа "дата" записывалась в MySQL в формате UNIX?
Мне в голову приходит, что на стороне MySQL нужно сделать триггер который будет конвертировать дату. Но опасаюсь, что в будущем это может вызвать проблемы... да и с триггерами знаком заочно без практического опыта.

Аватар пользователя marassa marassa 22 февраля 2019 в 8:54
1

В общем, вот что нужно сделать:

1. Выкинуть модуль Simple Math Field за ненадобностью.

2. Вывести оба поля дат в нужное View форматтером Custom и форматом U.

3. Первое поле скрыть.

4. Второе переписать через rewrite results следующим текстом:
{{ (((field_date2|trim)-(field_date1|trim))/(60*60*24))|round }}
Если оба поля чисто даты без времени, то round можно выкинуть.

Аватар пользователя marassa marassa 22 февраля 2019 в 9:07

А я и не предлагаю трогать шаблоны, этот текст вводится прямо в настройки поля Views. Не все знают, что Rewrite results и Global: Custom text поддерживают практически полный синтаксис twig.

Аватар пользователя Gnom7 Gnom7 22 февраля 2019 в 10:35

Я застрял на 2-м шаге.
Речь идет о модуле Custom Formatters? Если да, то после установки у меня не появилось никаких дополнительных настроек ни во Views, ни в настройках типа материла.

Аватар пользователя marassa marassa 22 февраля 2019 в 10:53

Никаких дополнительных модулей не надо, всё в ядре:


PS Заменил скриншот на русский. Никогда не переключаю админку на русский и не понимаю как другие могут без слёз смотреть на "Cредство форматирования: Собственная" и прочую подобную галиматью и что-то даже понимать Wink

PPS Вернул английский скриншот и оставил оба, чтобы было понятно о чём я Wink

Аватар пользователя Gnom7 Gnom7 22 февраля 2019 в 7:08

Тем что не могу вычислить во Views с помощью модуля Simple Math Field разность дат. Модуль Simple Math Field не может производить арифметические операция с датами формата ISO.

Почему-то Drupal хранит дату создания node в формате UNIX а дату введенную в пользовательское поле в формате ISO.

Аватар пользователя sas@drupal.org sas@drupal.org 22 февраля 2019 в 7:13
1

Вам надо работать с датами в одном формате и лучше в ISO, если Simple Math Field этого не умеет, поищите другой модуль или напишите свой конроллер поля для views