Народный базар на Друпал

Аватар пользователя PavelZ PavelZ 2 декабря 2021 в 9:25

Приветствую сообщество. Давно меня тут не было...

Несколько лет назад возникла идея сделать интернет-магазин на много продавцов (marketplace, multi-vendor). Более подробно об этой задумке в этой статье: http://shal.pw/blog/post/socialnaya-zanyatost-v-nebolshih-gorodah-i-syolah Тогда я начал как раз заниматься веб-разработкой на новом уровне. Если 12 лет назад я был как веб-мастер и контент-менеджер, то потом стал серьезнее погружаться в программирование и прочее. Три года назад купил дом в деревне и озадачился возможностью зарабатывать удалённо. Как таковое сайто-строительство нынче не особо выгодно. Но вот разработка сервисов это уже совсем другое дело. Пришлось практически заново учить JS/PHP и разные фреймворки. То есть я теперь не просто знаю, что такое React и Symfony, но и имею уже некоторую практику работы с этими и другими инструментами.

Теперь от предыстории к сути темы. Я попробовал начать делать маркетплейс на Laravel, попутно изучая данный фреймворк, посмотрел варианты сделать такой сервис на Yii2. Сейчас вспомнил, что новый Друпал, как и Ларавел, имеет в своей основе компоненты Сифони, с которой я уже частично познакомился. В общем хочу попробовать сделать проект используя Commerce и Commerce Shipping, Commerce Marketplace. Последнее расширение устанавливаться через композер в 9-ый Друпал не захотело. Я создал новый модуль Commerce Multivendor. Затем перенёс туда файлы из архива, переименовав везде marketplace на multivendor, да простит меня автор. Думаю серьёзно его переработать, взяв исходные файлы за основу. Сейчас, подключив поочерёдно модули нахватал кучу ошибок при апгрейде базы. Сейчас разбираюсь, что нужно сделать, чтоб их исправить.

В первую очередь нашёл, что надо добавить строку $config['system.logging'] ['error_level'] = 'verbose'; в settings.php файл, тогда будет понятно, почему: The website encountered an unexpected error. Please try again later.
Сейчас в Status Details Обнаружены ошибки: несоответствие определений сущности и/или поля
В типе сущности и определениях поля обнаружены следующие изменения.
Store --Тип сущности Store должен быть установлен.
Store type -- Тип сущности Store type должен быть установлен.
Tax type -- Тип сущности Tax type должен быть установлен.
Вот думаю, сущности надо вручную настраивать, или надо всё-таки как-то подкорректировать скрипты установки модуля, последнее будет правильнее, наверное.

Продолжение следует...

Комментарии

Аватар пользователя PavelZ PavelZ 2 декабря 2021 в 10:36

php D:\OpenServer\domains\bazar\vendor\drush\drush\drush updb --entity-updates
[warning] Drupal removed its automatic entity-updates API in 8.7. See https://www.drupal.org/node/3034742.
------------------- ----------- --------------- ----------------------------
Module Update ID Type Description
------------------- ----------- --------------- ----------------------------
commerce_order 8212 hook_update_n 8212 - Update the
order_number field
definition.
commerce_order 8213 hook_update_n 8213 - Add the 'balance'
field to the 'default'
view mode for all order
bundles.
commerce_order 8214 hook_update_n 8214 - Add the 'version'
field to 'commerce_order'
entities.
commerce_order 8215 hook_update_n 8215 - Update the state
field definition.
commerce_shipping 8200 hook_update_n 8200 - Remove the
'adjustments' field from
shipments.
commerce_shipping 8201 hook_update_n 8201 - Add the condition
fields to shipping
methods.
commerce_shipping 8202 hook_update_n 8202 - Add the
'adjustments' field to
shipments.
commerce_shipping 8203 hook_update_n 8203 - Add the
'original_amount' field to
shipments.
commerce_store 8202 hook_update_n 8202 - Update entity keys
for stores.
commerce_store 8203 hook_update_n 8203 - Add the timezone
field to stores.
commerce_store 8204 hook_update_n 8204 - Add the
'is_default' field to
stores.
commerce_store 8205 hook_update_n 8205 - Update the 'uid'
field.
commerce_store 8206 hook_update_n 8206 - Add created and
changed fields to stores.
commerce_tax 8201 hook_update_n 8201 - Configure the UK
VAT if necessary.
commerce_cart 1 post-update Revert Cart views to fix
broken Price fields.
commerce_cart 2 post-update Revert the cart block and
form views.
commerce_order 1 post-update Revert Order views to fix
broken Price fields.
commerce_order 10 post-update Update the customer
profile type.
commerce_order 11 post-update Add the "admin" view mode
to profiles.
commerce_order 12 post-update Create the default number
pattern.
commerce_order 13 post-update Create the "billing" form
mode for profiles.
commerce_order 14 post-update Revert the
'commerce_order_item_table
' view to hide orphaned
order items.
commerce_order 15 post-update Import
`commerce_order.settings`
configuration.
commerce_order 2 post-update Update order types.
commerce_order 3 post-update Revert the Order and
Profile entity view
displays.
commerce_order 4 post-update Revert the Order entity
view displays.
commerce_order 5 post-update Revert the Order entity
form display.
commerce_order 6 post-update Update the profile address
field.
commerce_order 7 post-update Revert the
'commerce_order_item_table
' view - empty text added.
commerce_order 8 post-update Unlock the profile
'address' field.
commerce_order 9 post-update Grants the "manage order
items" permission to roles
that can update orders.
commerce_product 1 post-update Revert the Products view
because of the updated
permission.
commerce_product 2 post-update Revert the default order
item form display.
commerce_product 3 post-update Revert the default order
item form display.
commerce_product 4 post-update Expose the status field on
every product form.
commerce_product 5 post-update Enable the "Duplicate"
variation button for every
product type.
commerce_product 6 post-update Grants the "manage
variations" permission to
roles that can update
products.
commerce_product 7 post-update Move the variations form
to its own tab.
commerce_shipping 1 post-update Re-save shipping methods
to populate the condition
operator field.
commerce_shipping 2 post-update Add workflow property to
shipping method plugins.
commerce_shipping 3 post-update Create the 'checkout'
formview mode and displays
for the shipment entity.
commerce_shipping 4 post-update Create the "shipping" form
mode for profiles.
commerce_store 1 post-update Revert the Stores view
because of the updated
permission.
commerce_store 2 post-update Revert the Stores view.
commerce_store 3 post-update Revert the Store entity
form display.
commerce_store 4 post-update Set the default store and
remove the default_store
config key.
commerce_tax 1 post-update Add the tax_number field
to customer profiles.
commerce_tax 2 post-update Add the tax_number field
to customer profile view
displays.
commerce_tax 3 post-update Back-fill the
"tax_registrations" for
existing stores.
------------------- ----------- --------------- ----------------------------

Do you wish to run the specified pending updates? (yes/no) [yes]:
> yes

> [notice] Update started: commerce_store_update_8202
> [error] Call to a member function getKeys() on null
> [error] Update failed: commerce_store_update_8202
> [notice] Update started: commerce_order_update_8212
> [notice] Update completed: commerce_order_update_8212
> [notice] Update started: commerce_shipping_update_8200
> [warning] Undefined array key "field_name" BaseFieldDefinition.php:111
> [warning] Undefined array key "field_name" BaseFieldDefinition.php:111
> [warning] Undefined array key "field_name" BaseFieldDefinition.php:111
> [warning] Undefined array key "field_name" BaseFieldDefinition.php:111
> [error] SQLSTATE[42S02]: Base table or view not found: 1146 Table 'bazar.tor_commerce_shipment__' doesn't exist: SELECT 1 AS "expression"
> FROM
> "tor_commerce_shipment__" "t"
> WHERE "_value" IS NOT NULL
> LIMIT 1 OFFSET 0; Array
> (
> )
>
> [error] Update failed: commerce_shipping_update_8200
> [notice] Update started: commerce_order_update_8213
> [notice] Update completed: commerce_order_update_8213
> [notice] Update started: commerce_order_update_8214
> [notice] The order version number field was created.
> [notice] Update completed: commerce_order_update_8214
> [notice] Update started: commerce_order_update_8215
> [notice] Update completed: commerce_order_update_8215
> [notice] Update started: commerce_tax_update_8201
> [warning] Undefined array key "langcode" DefaultTableMapping.php:331
> [error] Drupal\Core\Entity\Sql\DefaultTableMapping::requiresDedicatedTableStorage(): Argument #1 ($storage_definition) must be of type Drupal\Core\Field\FieldStorageDefinitionInterface, null given, called in D:\OpenServer\domains\bazar\web\core\lib\Drupal\Core\Entity\Sql\DefaultTableMapping.php on line 331
> [error] Update failed: commerce_tax_update_8201

In ProcessBase.php line 171:

Unable to decode output into JSON: Syntax error

{
"0": {
"commerce_store": {
"8202": {
"#abort": {
"success": false,
"query": "Call to a member function getKeys() on null
"
}
}
},
"#abort": [
"commerce_store_update_8202",
"commerce_shipping_update_8200",
"commerce_tax_update_8201"
],
"commerce_order": {
"8212": {
"results": {
"query": null,
"success": true
},
"type": "update"
},
"8213": {
"results": {
"query": null,
"success": true
},
"type": "update"
},
"8214": {
"results": {
"query": "The order version number field was created.
",
"success": true
},
"type": "update"
},
"8215": {
"results": {
"query": null,
"success": true
},
"type": "update"
}
},
"commerce_shipping": {
"8200": {
"#abort": {
"success": false,
"query": "SQLSTATE[42S02]: Base table or view not fou
nd: 1146 Table 'bazar.tor_commerce_shipment__' doesn't exist: SELECT 1 AS
"expression"\nFROM\n"tor_commerce_shipment__" "t"\nWHERE "_value" IS NOT
NULL\nLIMIT 1 OFFSET 0; Array\n(\n)\n"
}
}
},
"commerce_tax": {
"8201": {
"#abort": {
"success": false,
"query": "Drupal\Core\Entity\Sql\DefaultTableMapping:
:requiresDedicatedTableStorage(): Argument #1 ($storage_definition) must
be of type Drupal\Core\Field\FieldStorageDefinitionInterface, null given,
called in D:\OpenServer\domains\bazar\web\core\lib\Drupal\Core\Entity\Sq
l\DefaultTableMapping.php on line 331"
}
}
}
},
"drush_batch_process_finished": true
}

Аватар пользователя ivnish ivnish 2 декабря 2021 в 10:38

OpenServer (да и windows в приципе) - не самый лучший выбор для веб-разработки

Аватар пользователя PavelZ PavelZ 2 декабря 2021 в 10:44

Обожаю такие комментарии. Второй системой у меня на компе Минт. Могу пользоваться докером. Есть в аренде VDS с CentOS. Просто на Винде удобнее. Не думаю, что проблема в ОпенСервер и Виндоус, хотя могу ошибаться...

Аватар пользователя PavelZ PavelZ 2 декабря 2021 в 10:47

Кстати, вопрос к вам, как модератору. Тут в блоге нет возможности скрывать часть строк в комментарии?

Аватар пользователя ivnish ivnish 2 декабря 2021 в 10:48

Скрывать в спойлер? К сожалению, нет. Но можно длинные тексты с ошибками выкладывать на pastebin

Аватар пользователя PavelZ PavelZ 2 декабря 2021 в 10:40

Начиная с версии 8.7.0, ядро ​​Drupal больше не поддерживает автоматическое обновление сущностей. Всякий раз, когда необходимо создать, изменить или удалить определение типа сущности или поля, это должно быть выполнено с помощью явной функции обновления, предоставляемой API обновления , и с использованием API, предоставленного менеджером обновления определения сущности .

Диспетчер обновлений определения сущности больше не поддерживает изменения, которые могут включать изменение макета таблицы . Теперь для них требуется новый API обновления сущностей (см. Примеры ниже). Это также можно использовать, если есть данные для типа объекта или определения поля, которые необходимо изменить.::updateEntityType()

На практике это не должно влиять на обычные рабочие процессы развертывания, единственное фактическое изменение состоит в том, что drush entupбольше не будет работать, пока оно не будет повторно реализовано в contrib. Команда будет удалена из drushядра и добавлена ​​обратно в модуль в зависимости от того, чтоdevel нужно, чтобы было понятно, что drush entupэто инструмент разработчика и никогда не должен быть частью производственного рабочего процесса.

Аватар пользователя PavelZ PavelZ 2 декабря 2021 в 11:02

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