Доброе время суток.
Начал знакомиться с созданием собственных модулей. Разрабатывать форму (запись производится в ДБ), возник момент при записи даты в бд.
Кусок кода из формы:
<?php
$form['DatePast'] = [
'#type' => 'date',
'#default_value' => $date ? $date : date('y-m-d'),
];
?>
Необходимо перевести дату в int формат при записи в MySQL
Кусок кода из запроса:
<?php
$query = db_insert('database_exform')
->fields(array(
'institution' => $form_state->getValue('institution'),
'problem_desc' => $form_state->getValue('Disck'),
'timestamp' => $form_state->getValue('DatePast')
))
->execute();
?>
Вложение | Размер |
---|---|
![]() | 4.4 КБ |
Комментарии
Рекомендую начать с изучения examples и конечно полезен код из коробки.
drupal 8 использовать "голые" таблицы для хранения данных и их последующего использования как-то не айс.
Гораздо продуктивнее использовать для этого кастомные сущности
примерно как-то так: http://blog.oskoui-oskoui.com/?p=8218
Если очень надо, можно даже относительно несложно (переопределением и расширением стандартных классов сущностей) добавить сущность, которая будет хранить свои данные в кастомной таблице БД.
Все это сразу добавляет Вашей таблице(сущности) всю мощь друпал:
готовый формы редактирования сущности (и стандартная раобта с ними)
готовые варианты отображения (и стандартная раобта с ними)
интеграция вашей сущности с другими модулями (views и т.п.)
и еще кучу всякого полезного..
В php есть класс для работы с датами/временем: http://php.net/manual/ru/class.datetime.php который умеет, как собирать дату из строки по формату, так и форматировать её в строку, или в unix time, который, вероятно вам нужен, с помощью DateTime::getTimestamp.
P.S. А вообще, выше правильно вам написали про использование сущностей, а не кастомной таблицы, и sql запросов для организации хранения данных. Так иногда, может и полезно делать, но когда это необходимо, и это вряд-ли ваш случай. В большинстве случаев, лучше всё же пользоваться https://www.drupal.org/docs/8/api/entity-api а не работать с базой напрямую.
Как я понимаю (может и ошибаюсь), данный функционал позволяет проще спроектировать сам модуль. Когда делал свой модуль по примерам, сталкивался со штангой не один раз (в основном наименование файлов, машинное имя и т.д.). Но разве в моем примере я не использую сущность (вложил файл с моим модулем)? Я как бы сказать тока начал познавать азы.
Я бы создал на D8 entity -> node -> bundle -> bid с нужными поля и import туда заявку из excel далее все отчеты в D8
Я понял, что я сделал не правильно. По сути мне если и нужен свой модуль, то только для добавления в базовый класс, новый вид формы (может привязанной к определенному виду материалов, а может и нет). Максимум, что мне дополнительно нужно так это добавление нового типа поля в типе материалов (и то это очень сомнительно).
Вам достаточно enity -> node + добавить нужные поля, опять таки стандартных типов.
А импорт из экселя можно попробовать собрать на feeds
Но пока буду делать не правильно=) До момента создания сложных запросов в БД. Пока нет понимания, что за что отвечает и как это можно использовать. К примеру, не могу пока что вывести в блоке, данные из БД (в виде таблицы). Читаю про контроллеры.
Контроллеры отвечают за вывод основного содержимого страниц. А вам надо читать про блоки.
Со сложными запросами к БД отлично справляется модуль Views.
Правда, для его использования необходимо разобраться с "теорией" его использования, хотя бы, для начала, с фильтрами и связями.
Это смотря насколько сложные. Вьюс кстати бывает глючит неслабо, например если есть фильтр по полю сущности из необязательного референса, он всё равно ставит INNER JOIN. Приходится это в hook_views_query_alter исправлять.
да.. при решении каких-либо слишком специфичных задач приходится как-то выкручиваться..
Но в большинстве, даже достаточно сложных случаев, вьюс практически идеален.
если правильно его готовить-)
Скорее всего мне придется делать промежуточную таблицу в БД (об этом я пока не думаю). Чтоб было белее понятно объясню свою собственную задачу:
Одну и ту же заявку может выполнять сразу несколько сотрудников, при этом, вид заявки может быть разным (одновременно платная и бесплатная). После выполнения платных заявок идет подсчет часов.
Вьюха конечно поможет отобразить саму Заявку, но вот в работе формы никак.
Первая форма - это стандартная форма создания ноды. Вторая форма делается либо программным вызовом собственного режима формы той же ноды. Либо просто форма с 2-3 полями, в которой редактируется нода.
eForm, Conditional Fields, Field Permissions, Workflow
Да это то понятно, пока читаю
Не "таблицу", а сущность с необходимыми полями.
Если это будет сущность, то форма (код формы)с базовым функционалом у Вас уже есть.
Если это блок со списком заявок, и заявка - это сущность, а не таблица, то вьюс - однозначно.
Кстати, вьюс (выборка и темизация списка сущностей при помощи модуля Views) предназначен, в основном, для выборки именно "списка" сущностей, а не одной сущности.
Далее, т.к. "базовый" код формы Заявки у Вас уже есть, просто дорабатываете его по необходимости.
Как я понял, Вам просто нужно 3 режима отображения формы Заявки:
1.Нужна форма чтобы начальник и доверенные люди вносили заявку (может сразу назначить ответственного)
2.Вывод данной заявки в блоке с возможностью взять в работу (исключение это статус) заявку
3.Форма сотрудника в которой есть возможность
т.е. на основании некоторого контекста(пользователь с ролью "начальник", пользователь с ролью "сотрудник" и т.п.) выводите-скрываете в форме нужные поля.
Хм... действительно... тока много не понятно... как например работает
* "form" = {
* "default" = "Drupal\content_entity_example\Form\ContactForm",
* "delete" = "Drupal\content_entity_example\Form\ContactDeleteForm",
* },
и интересно, если это так работает с формой, то можно ли таким же образом добавить тип материала
как раз про это:
https://docs.drupalconsole.com/ru/commands/generate-entity-content.html
Чтобы не утонуть в пучине аннотаций плагинов, просто необходимо поручить написание этого кода друпал-консоли. Да, именно, она сама пишет код и весьма недурно. Всяко лучше, чем новички)))
Не получилось ее установить=(
У вас какая операционная система?
Получилось запустить консоль... Через мучения... В самом конце начал смотреть почему не запускается, нашел путь ..\vendor\bin там искомый файл... запустилось... Я прям рад как будто теперь я всемогущ=).... Теперь возникли новые вопросы...
Мне с помощью консоли используя команду generate:module можно весь модуль сделать или нужно по кускам
Подскажите пожалуйста drupal generate:plugin:block --services что можно туда положить? Если скинете ссылку на материал буду признателен
Генерируются только заготовки файлов. То есть они сразу рабгтают, но ничего не делают, например просто выводят тестовый текст. По поводу services, если не знаете, что такое сервисы в друпал и dependency injection, то пока просто пропустите этот пункт.
Кто может подсказать как в node.type.name.yml отключить помещено на главную страницу?
Отключить эту галочку в админке и через config editor посмотреть, что изменилось.